1

， textheight

ゴミ検索システムから見る酒田市オープンデータのあり方

{広瀬研究室 \atop C1191049 佐藤圭悟}

概要

公共機関が保有するデータの内，二次利用を目的としたオープンデータの推進は，酒田市において提供されているオープンデータの例を挙げると，防火水槽， AED，避難所等の位置を緯度，経度で示されている。しかし，酒田市においてオープンデータの形式は統一されていない。オープンデータの意義・目的は国民参加・官民協働の推進を通じた諸課題の解決，経済活性化行政の高度化・効率化透明性・信頼の向上国，地方公共団体及び事業者が保有する官民データのうち，国民誰もがインターネット等を通じて容易に利用（加工，編集，再配布等）できるよう，次のいずれの項目にも該当する形で公開されたデータをオープンデータと定義する。営利目的，非営利目的を問わず二次利用可能なルールが適用されたもの機械判読に適したもの無償で利用できるもの

3

目次

第 1 章

はじめに

本章では研究の背景と目的を説明する。

1.1 オープンデータとは、オープンデータの歴史と現時点の位置付け

オープンデータとは，政府，自治体，公共機関等が保有する大量の情報を公開し，インターネットを通じて誰もが無料でアクセスしてダウンロードして利用でき，自由に再利用・再配布することができるデータのことである。 [?] 我が国では，平成 23 年 3 月 11 日の東日本大震災を機に，政府，地方公共団体や事業者等が保有するデータの公開・活用に対する意識が高まり、平成 24 年 7 月 4 日公共データは国民共有の財産であるとの認識を示した「電子行政オープンデータ戦略」より，政府の取り組みは本格化した。 [?] それに伴い，オープンデータに取り組む地方公共団体数も大幅に増加している。デジタル庁による「オープンデータに取り組む地方公共団体数の推移」を見ると，平成 25 年 3 月時点で、オープンデータ 4 自治体であったが，令和 3 年 10 月時点で全自治体の約 67 ％にあたる 1194 自治体に増加している。 [?]

， height，

height

図 1.1 地方公共団体におけるオープンデータの取組状況（令和 3 年 10 月 12 日時点）

しかし，以下に示す総務省によるオープンデータの定義を十分に満たしている自治体はまだまだ少ない。

• 営利目的，非営利目的を問わず二次利用可能なルールが適用されたもの

• 機械判読に適したもの

• 無償で利用できるもの

オープンデータを二次利用可能な形で公開する意義と目的に関して総務省は大きく二つ述べている。

• 創意工夫を活かした多様なサービスの迅速かつ効率的な提供，官民の協働による公共サービスの提供や改善が実現し，ニーズや価値観の多様化，技術革新等の環境変化への適切な対応とともに，厳しい財政状況，急速な少子高齢化の進展等の我が国が直面する諸課題の解決に貢献することができる

• ベンチャー企業等による多様な新サービスやビジネスの創出，企業活動の効率化等が促され，我が国全体の経済活性化につながる

[?]

1.2 若者の現状

若者の酒田離れ優秀な人材の流出酒田には SAS などもあるが，下請けが多く若者にとって魅力ある企業が少ない就職者が減る，企業内でも下請けに魅力を感じなくなった人は辞職してしまう総務省の DX 化推進

オープンデータ整備したことによる告知（二次創作物とソースの掲示）企業内でも下請けに魅力を感じなくなった人は辞職してしまう利用による二次創作物の政府は少子高齢化や人口減少による生産力の低下や経済活動の縮小を懸念しており，地方公共団体がオープンデータ化に取り組むとデータを活用した新事業が促進され，生産力向上や経済の活性化につながる。本研究は，自治体のオープンデータ化によるメリットを提示する。先進地域ではどうなってるのかオープンデータ化の先進事例を紹介する。

1.3 公開が推奨されているオープンデータ

内閣官房情報通信技術（IT）総合戦略室（以下「IT 総合戦略室」という）は、オープンデータの公開とその利活用を促進することを目的とし、政府として公開を推奨するデータと、公開するデータの作成にあたり準拠すべきルールやフォーマット等を取りまとめた「推奨データセット」を示している。推奨データは基本編と応用編から構成されている。（）基本編：推奨データセットの対象データの中でも、特にオープンデータに取り組み始める地方公共団体の参考となるようなデータ（）応用編：推奨データセットの対象データの中で、基本編以外のデータを応用編として位置付けており、地方公共団体に限らず、民間事業者等の保有するデータについても対象としている

IT 総合戦略室は推奨データセットの選定に際しては、世界最先端 IT 国家創造宣言・官民データ活用推進基本計画における重点分野や「地方公共団体アンケート」（平成 28 年 12 月実施）におけるニーズの高い分野を中心に先進地方公共団体の公開済データ等を参考にしている。これらはオープンデータに取り組むにあたって、保有していないデータの収集・公開を義務付けるものでは無いため、まずは保有している情報から公開を進め， height， height

図 1.2 推奨データセット

ることを推奨している。データセットの選定

1.4 そんな低レベルなものを量産して酒田市に役立つ、市民が使えるレベルにはなってない。意味ないのでは

HTML 検索フォーム記述

[figure]

<form class = "form1"
 method="POST" action="gomi.rb">
<input class ="sbox" class ="s"
name = "gomi" type="text"
placeholder="検索する品目名を入力"
maxlength="40"/>
<input class ="sbtn" type="submit"
 value="検索" />
<input class ="rt" type="reset"
value="クリア"/>

[figure]

の記述例

[figure]

 db = SQLite3::
 Database.new("tmpdb/gomi.sq3")

|trash|= c[”gomi”]

db.results_as_hash = true
result = db.execute("SELECT * FROM gomi where

name||kana||kata|| roma LIKE ’%#trash%’;”)

[figure]

KAKASI の記述

[figure]

values << Kakasi.kakasi('-JH -KH'，

row["品名"])# 酒田市→さかたし

values << Kakasi.kakasi('-JK -HK'，

row["品名"])# さかたし→サカタシ

values << Kakasi.kakasi('-Ja -Ha -Ka'，
row["品名"])# さかたし→ sakatashi
db.execute("INSERT INTO gomi
VALUES(?， ?， ?， ?， ?， ?)"， *values)

[figure]

SQLite3 の記述

[figure]

db.execute_batch(<<~EOF)
DROP TABLE IF EXISTS gomi;
CREATE TABLE IF NOT EXISTS
gomi(name text， type text， remark text，
kana text， kata text， roma text);
BEGIN;
EOF
 db.execute("END;")

[figure]

1.5 目的

本研究の目的は PC，スマートフォン，タブレット等のモバイル端末の Web カメラを活用し，民俗芸能・伝統芸能の踊りを記録・保存することである。また，踊りを正確で容易に記録・保存できるかを検討する。

第 2 章

先行研究と課題

本章では現状を把握し，問題点を発見するために，これまで行われてきた研究とその課題，そして関連する事例を取り上げている。第??節では民俗芸能・伝統芸能の踊りを記録・保存した研究を紹介する。また，先行研究の課題点を第??節に示す。第??節には踊りが消失してしまっている関連事例を取り上げる。

2.1 先行研究

民俗芸能・伝統芸能の記録・保存に関する先行研究を述べる。民俗芸能・伝統芸能の踊りにおいて，身体の動きを記録・保存している研究を以下に示す。

2.1.1 民族芸能・伝統芸能をモーションキャプチャで記録

玉本 [?] はこれまで民俗芸能・伝統芸能の踊りの伝承を支援するため，モーションキャプチャで踊りの動きを 3 次元デジタルデータとして記録・保存し， CG アニメーションを使って踊りの動きを再現する研究を行ってきた。さらに，この手法を活用して，踊りの記録・保存だけでなく，踊りの学習支援システム (バーチャルに踊りを見る，体験できるシステム) を開発した。踊りを記録・保存することは，いつの時代でも行われており，以下に示す方法で行われてきた。

• 文章

• 記号

• ポンチ絵

• 写真

• 映画

• ビデオ

• モーションキャプチャ

この方法の中でもモーションキャプチャは近年の情報技術の発展により出現した方法であり，玉本はモーションキャプチャで踊りの記録・保存を行った。ここで使用されたモーションキャプチャは慣性センサ式の高精度で収録できる Xsens MVN と NOITOM 社製の Perception Neuron である。

2.1.2 黒川能のディジタル化を通した踊り継承

玉本，唐ら [?] は山形県庄内地域に 500 年以上継承されている民俗芸能の黒川能をデジタル化し，踊りを継承する新手法を研究した。第??節で示した手法を用いて 12 項目の黒川能を収録した。使用されたモーションキャプチャは慣性センサ式である Xsens 社の MVN Awinda，映像は 4K のデジタルカメラ 2 台，楽曲は ZOOM 社の H4n Pro を使用した。モーションキャプチャで黒川能の収録を行い， BVH 形式のデータで保存した。また， CG アニメーションで踊りを再現し，動きを観察できるようにした。また CG アニメーションを活用し，以下の表示方法を提案した。

• 動画と CG アニメーションの同時表示

• 演者と骨格モデルの共演

• 多視点から見た舞の同時表示

踊りは人の動き，衣装，小道具，舞台，楽曲等からなる総合芸術である。衣装，小道具，舞台の記録は現時点ではビデオによる記録が優れている。動画と CG アニメーションの同時表示により，この点を補っている。また，演者と骨格モデルの共演により，動きの違いを把握し，学習できるようにした。さらに多視点から黒川能の動きを観賞することを可能にした。

2.1.3 YOSAKOI ソーランの舞踊記譜法

丹羽，木村ら [?] は YOSAKOI ソーランの舞踊譜の構成要素として必要な要素を明らかにし，それを舞踊譜に落とし込んだ。舞踊譜とは，舞踊の動きを紙面に記号を用いて記録したものであり，舞踊記譜法とは，その舞踊譜の記し方である。 YOSAKOI ソーランの振付を記録する舞踊記譜法は確立されておらず，各チームで独自の方法が取られている。身体の図解を手書きで記録し，図形エディタで舞踊記譜法を制作した。舞踊記譜法は一定時の静止した構造として共時的に記録する。共時的とは，現象が継続的変化としてではなく，一定時の静止した構造としてあるさまである。最後に踊り手が理解できるかをグループインタビュを行い，プロトコル分析を用いて明らかにした。

2.2 先行研究の課題点

第??節で述べた先行研究の課題を示す。

2.2.1 第??項と第??項の課題

第??項と第??項の研究で利用されたモーションキャプチャの機材は Xsens MVN と Perception Neuron であり， 2021 年 8 月時点でそれぞれ約 600 万円， 30 万円と高額である。また，所得の分布状況は所得金額階級別に相対度数分布をみると，「200〜300 万円未満」が 13.9 ％，「300〜400 万円未満」が 13.3 ％と多くなっている。中央値は 427 万円であり，平均所得金額（547 万 5 千円）以下の割合は 61.3 ％となっている [?]。この状況で機材を購入し，民俗芸能・伝統芸能を記録・継承しようと考える個人は少ないと考えられる。また，民俗芸能・伝統芸能を継承してきた人々が Xsens MVN と Perception Neuron を扱うことができる程専門的な知識を有しているとは限らず，このことも民俗芸能・伝統芸能を記録・継承する課題となっている。

2.2.2 第??項の課題

丹羽，木村らは YOSAKOI ソーランの舞踊譜の構成要素として必要な要素を明らかにし，それを舞踊譜に落とし込んだが，手書きで舞踊記譜法を記録しその後に図解エディタで制作するため，非効率である。また，舞踊記譜法は共時的な記録をとるため，情報量が乏しく連続した記録の保存を行うことができない。また， YOSAKOI ソーランに携わってきた踊り手は踊り手の経験に補完されることによって共時的な舞踊譜だけでも理解することは可能だが， YOSAKOI ソーランに携わってこなかった一般の人が舞踊譜を見ても理解することができなかったと課題を残している [?]。

2.3 関連事例

踊りの消失に関連する事例として東北公益文科大学の YOSAKOI ソーランを取り上げる。 YOSAKOI ソーランの説明と YOSAKOI ソーラン部蒼嵐の事例を以下で紹介する。

2.3.1 YOSAKOI ソーラン

YOSAKOI ソーラン祭りは，高知県の「よさこい祭り」をルーツに 1992 年，よさこい祭りの「鳴子」と北海道の民謡「ソーラン節」がミックスされ誕生した。この祭りは 1992 年，参加チーム 10 チーム参加者 1000 人，観客動員数 20 万人から始まった。今も，開催会場が各地域のボランティアによって運営されるなど，参加チームを含めた多くの市民の協力により，毎年祭りを開催することができている。 YOSAKOI ソーランの基本ルールを以下に示す。

• 手に鳴子を持って踊ること

• 曲にソーラン節のフレーズを入れること

以上のルール以外の，踊り・曲・衣装等はチームの自由である [?]。

鳴子

もともとは田畑に吊るして音で鳥を追い払うために使用されていたもの。高知よさこい祭りで踊りの中に取り入れられて以来，いまや全国の YOSAKOI 関連の祭りでも欠かせない象徴的な道具となった [?]。ソーラン節

北海道民謡の一つ。北海道の漁師が昔ニシン漁の際に歌った労働歌。「ヤーレンソーラン」の歌に合わせて，綱引きや網あげの力強さを表現している [?]。

2.3.2 YOSAKOI ソーラン部蒼嵐

東北公益文科大学 (以下本学) には YOSAKOI ソーラン部が存在し，山形のみならず東北地方の各施設・お祭り等で演舞をしている。本学の YOSAKOI ソーラン部蒼嵐（以下蒼嵐）は 2020 年，約 20 名の学生で構成されている。練習は週 2 日の水曜日と木曜日で，各 2 時間程度の練習を行っている。蒼嵐では踊りを習得している先輩学生が踊りを習得していない後輩学生に教えるという方法で踊りを継承している。

YOSAKOI ソーランの活動が活発になるのは，祭りが多く開催される夏となる。参加する祭りの内容によって演舞する曲の構成にも変化が生じる。そのため，蒼嵐が練習している曲は毎年変化し，祭りに参加しない，または祭りが開催されない等が起こると，練習されない曲も出てくる。本学の蒼嵐では毎年， 1 年生が入学してから数名の学生が部活動に参加し， 3 年生もしくは 4 年生になると退部する仕組みとなっている。

演舞が行われる踊りは毎年変化するにもかかわらず，蒼嵐の学生も変化していくため，継承が上手く行われず，消失してしまう踊りも存在する。また，本学では部活動に参加するかどうかは基本的には学生の意思で判断できるため，踊りを習得した学生が蒼嵐を退部してしまう等の問題が発生することも，踊りの消失を招く原因となっている。 YOSAKOI ソーランでは YOSAKOI ソーランを踊る誰もが一緒に踊ることのできる総踊りといわれる踊りが存在する。総踊りは各チームでの継承が途絶えてしまったとしても，他のチームに指導してもらうことが可能である。しかし，総踊りとは反対に各チームにしか存在しない曲（持ち曲）も存在し，その曲と踊りが一度でも消失してしまうと復元することは困難となる。蒼嵐には持ち曲が以下の 2 曲存在する。

• 神々の舞い

• 秋波奏風

しかしながら， 2020 年現在では神々の舞いのみの継承となっており，秋波奏風の踊りは消失してしまっている。

第 3 章

モバイルデバイスを活用した踊りのデータ保存システムの構築

本章では第??章と第??章で述べた現状と問題点を元に，課題を解決する改善案を挙げる。また，改善案を踏まえ，民俗芸能・伝統芸能の踊りを保存するシステムの提案を行う。第??節で課題に対する改善案を挙げる。さらに，第??節では改善案を踏まえて，踊りを保存するシステムの提案を述べる。

3.1 課題に対する提案

第??章から第??章までを踏まえた上で改善案を挙げる。

3.1.1 第??項に対する改善案

モーションキャプチャを行うにあたって高額な機材を準備しなければならないという課題を解決するため，安価な機材を使用する。第??章の背景も踏まえ，モバイルデバイスを活用することを考える。 PC やタブレット等のモバイルデバイスは XsensMVN と Perception Neuron に比べると，比較的安価に準備することができる。また，スマートフォンやタブレット等のモバイル端末所持率が 95.7% [?] であり，機材を購入せずに準備することが可能であると考える。

XsensMVN や Perception Neuron 等の機材を扱うことの困難さを改善するため，容易な操作でモーションキャプチャを行うことを可能にする。ボタンのクリックやキーボードでのキー入力等の操作方法でモーションキャプチャを行うことが好ましい。

3.1.2 第??項に対する改善案

舞踊記譜法を効率的に記述するため，身体の図解を手書きで記録し，図形エディターで舞踊記譜法を制作するのではなく，自動的に身体の図解を記録し，舞踊譜を制作するシステムであることが望ましい。第??章の背景を踏まえ，機械学習により身体の図解を記録できるものとする。

共時的な記録では経験者しか理解できないという課題を解決するため，共時的な記録ではなく，通時的な記録として保存する。

3.2 システムの提案

第??節では課題に対する改善案を述べた。本節では第??章と第??項に示したことを考慮し，民俗芸能・伝統芸能を記録・保存するシステムを提案する。本システムでは高額な機材を準備するのではなく，所持率の高いモバイルデバイスを使用し，踊りを記録・保存可能にする。個人でもモーションキャプチャの操作を可能にするため，ボタンのクリックやキーボードのキー入力等で操作可能とする。舞踊記譜法を手書きで作成することをさらに効率化するため，本来，手書きで作成する記録をデジタル化し，自動的に記録する記録方法にする。踊りの経験がない人も理解可能な通時的な記録としてモーションキャプチャで踊りを記録する。記録したデータを個人のデバイスやサーバに保存可能にする。

以上を踏まえたシステムとし，モバイルデバイスを活用した踊りのデータ保存システムの提案と構築を行う。民俗芸能・伝統芸能の踊りを個人でも記録・保存することが可能なシステムにしていく。

第 4 章

システム関連技術の解説

本章では本システムを作成するにあたり，必要となる前提知識，技術について説明する。

4.1 モーションキャプチャ

モーションキャプチャは物体の動き（多くの場合，人の動き）を 3 次元のデジタルデータとして収録し記録する装置である。身体部位の位置と回転角度を求める原理によって，磁気式，光学式，慣性センサ式などの方式がある [?]。

4.1.1 磁気式

対象者が磁気センサを身体各部位に装着する。磁気発生装置で磁気を発生させ，対象者がその空間の中で動くことにより，身体の位置や姿勢を求める方式である。磁気を利用し，計測を行うので，センサが身体の陰，衣服の陰になっても計測することが可能である。しかし，磁気の強さが磁気発生装置からの距離により変化するため，測定する範囲が限られる。

4.1.2 光学式

対象者の身体各部位に光を反射するマーカを装着する。周囲に光源と多数のカメラを設置し，マーカにより反射された光を撮影することにより，身体の位置や姿勢を求める方式である。複数の視点から撮影することで精度よく位置と姿勢を求めることができるが，装置として高額になる。マーカが身体や衣服の陰になると反射した光を撮影できず，位置や姿勢を求められなくなる。また，カメラと光源に囲まれた空間が測定可能な範囲であり，その範囲外では利用することができない。屋外等の強い光を受ける環境では測定することが不可能である。

4.1.3 慣性センサ式

ジャイロ（角速度計），加速度計からなる慣性センサを身体各部位に装着する。身体の動作から得られる角速度，加速度を利用して身体の位置，姿勢を求める方式である。身体のセンサだけから回転角度と位置を求めるので，測定する範囲に制限がない。しかし，時間経過による誤差の蓄積が発生し，測定精度に限界がある。

4.2 PoseNet

PoseNet は，主要な体の関節の位置を推定することにより，画像や動画内の人物のポーズを推定するために使用できるビジョンモデルである。ポーズ推定とは，画像や動画内の人物を検出するコンピュータビジョン手法のことで，例えば，画像内の人物の肘の位置などを特定することが可能である [?]。

4.2.1 TensorFlow

TensorFlow は，機械学習向けに開発されたエンドツーエンドのオープンソースプラットフォームである。研究者が機械学習で最新の実験を行い，デベロッパが ML 搭載アプリケーションを簡単に開発して展開できるよう，各種ツールやライブラリ，コミュニティリソースを備えた総合的で柔軟性に富んだエコシステムを確立している [?]。

4.2.2 p5.js

p5.js は，アーティスト，デザイナ，教育者，初心者，および他の誰にとっても，コーディングをアクセス可能で包括的なものにすることに焦点を当てた，創造的なコーディングのための JavaScript ライブラリである。ソフトウェアに期待し，それを学ぶ誰もが利用可能なオープンソースである [?]。

4.2.3 ml5.js

ml5.js は，機械学習アルゴリズムのための GPU 加速数学操作とメモリ管理を処理するためのライブラリである TensorFlow.js へのオープンソースでフレンドリな高レベルのインターフェースである。人間のポーズを検出するための事前トレーニング済みのモデル，テキストの生成，別の画像のスタイリング，音楽の構成，ピッチ検出，一般的な英語の単語関係など，ブラウザで即座にアクセスできる [?]。

第 5 章

システム

第??章では本研究の目的を達成するためのシステムの提案を行った。本章では第??章で提案したシステムの作成について説明する。本システムの要件を定義し，システムの設計と構築について述べる。その上，どのようなシステムが構築されたのかを示す。

5.1 要件定義

以下に必要となる要件を示す。

1. モバイルデバイスで実行可能にする

2. 容易な操作で実行可能にする

3. モーションキャプチャで踊りを記録する

4. データを保存可能にする

これらの要件を満たすようシステムの設計を行う必要がある。

5.2 システム設計

第??節を元にシステム設計を行う。イメージ図とフローチャートを用いて説明をする。

図 5.1 システムのイメージ図

図 5.2 システムのフローチャート

5.2.1 システムの基本設計

本システムのイメージ図を??に示す。まず演者の踊りをモバイルデバイスの Web カメラを用いて撮影する。その踊りに対しリアルタイム姿勢推定を行い，モーションキャプチャを行う。最後に取得したモーションデータを自身のモバイルデバイスに保存する。また，任意でモーションデータをサーバに保存することも可能である。

5.2.2 システムの詳細設計

本システムの詳細設計を図??に示す。本システムは Web サイトで稼働することとし， HTML， CSS に加え， JavaScript を利用する。

踊りの撮影

JavaScript のライブラリの p5.js の setup 関数によりキャンバスのサイズは横幅 640，高さ 480 に設定する。さらに video により撮影を行う。

モーションキャプチャ

モーションキャプチャを開始する指示が入力されるとモーションキャプチャを開始する。モーションキャプチャは PoseNet を利用し，リアルタイムでの姿勢推定を行う。 PoseNet は JavaScript のライブラリである p5.js と ml5.js を使用する。 p5.js により人のポーズを検出する。ポーズはキーポイントとして取得され，鼻，左目，右目，左耳，右耳，左肩，右肩，左ひじ，右ひじ，左手首，右手首，左腰，右腰，左ひざ，右ひざ，左足首，右足首のそれぞれから x 座標と y 座標の位置データを取得する。さらに取得された位置データを ml5.js の学習データとして保持しておく。取得されているキーポイントの位置には ellipse を使用し，楕円を表示する。また，キーポイントを skeleton を用いてつなぎ合わせる。

データの保存

モーションキャプチャにより取得していたモーションデータを JSON ファイルとし，自身のモバイルデバイスに保存する。 ml5.js の学習データとして保持されていたデータを.save を使用し，保存する。また，自身のモバイルデバイスに保存してあるデータをサーバに任意で保存可能とする。ここでサーバに保存する処理は Ruby と CGI を使用することとする。サーバ上のデータはデータレイク^{*1}として保存する。

データ形式

モーションデータの形式として JSON(JavaScript Object Notation) を用いる。 JSON は，軽量データ交換形式である。 JSON では順序付けされない名前と値のペアの集まりの構造である。 JSON は完全に言語に依存しないテキスト形式で C， C++， C#， Java， JavaScript， Perl， Python，その他多くの言語を含む C プログラマになじみのある規則を使用している [?]。 JSON は JavaScript で用いられるデータ交換フォーマットであり，シンプルで軽量なフォーマットが特長である。 Web 上に公開されているデータは JSON 形式でデータのやり取りを行うことがある。実例として内閣官房の新型コロナウイルス感染症対策サイト [?] 等が存在する。以下に JSON の簡単な形式を示す。

JSON 形式

[figure]

  {
    "x 座標": {
      "左目": 100，
      "右目": 200，
      "鼻": 150
    }，
    "y 座標": {
      "左目": 50，
      "右目": 50，
      "鼻": 80
    }
  }

[figure]

5.3 システム構築

第??節で設計したシステムの構築を行う。

5.3.1 開発環境

システム構築に使用する開発環境を示す。開発言語 HTML(HyperText Markup Language)

*1 データの発生源 (IoT デバイスからのセンサ情報やソーシャルメディアで作られた投稿データ等) の生データをそのままの形で蓄積

したもので，蓄積データは機械学習やデータ分析に利用されている [?]

ウェブページを作成するために開発された言語である [?]。 CSS(Cascading Style Sheets)

画面上，紙上などでの構造化されたドキュメント (HTML や XML など) のレンダリングを記述するための言語である [?]。

JavaScript

Web ブラウザに組み込まれているプログラミング言語である [?]。 Ruby

1995 年に一般公開されたプログラミング言語で，まつもとゆきひろにより作成されたフリーソフトウェアである [?]。本システムではバージョン 2.7.2 を使用する。

Web フレームワーク CGI(Common Gateway Interface)

Web サーバが Web ブラウザからの要求に応じて，プログラムを起動するための仕組みである。

ブラウザ • Microsoft Edge バージョン 97.0.1072.55

• Google Chrome バージョン: 97.0.4692.71

5.3.2 実装

第??項に示した環境でシステムの実装を行う。

ディレクトリとファイルの作成

今回使用する HTML， CSS， JavaScript の各ファイルを作成する。また， CGI ディレクトリとデータを保存しておくディレクトリを作成する。さらに CGI ディレクトリの中に Ruby プログラムのファイルを作成する。データを保存しておくディレクトリには権限も追加する。

データ保存ディレクトリの作成と権限追加

[figure]

  mkdir -m 1777 ディレクトリ名

[figure]

HTML ファイルを作成 p5.js と ml5.js のライブラリを使用するために head 要素に以下を記述しておく。

head 要素

[figure]

<script src="https://cdn.jsdelivr.net/npm/p5@1.1.9/lib/p5.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/p5@1.1.9/lib/addons/p5.sound.min.js">
</script>
<script src="https://unpkg.com/ml5@0.4.2/dist/ml5.min.js"></script>

[figure]

また， body 要素には JavaScript のプログラム， CGI と Ruby により動作する form を記述する。

body 要素

[figure]

<script type="text/javascript" src="js ファイル名" charset="utf-8"></script>
<form action="rb ファイル名" method="POST" enctype="multipart/form-data">
    <input type="file" name="test_file">
    <input type="submit" value="送信">
    <input type="reset" value="reset">
</form>

[figure]

JavaScript ファイルを作成

キャンバスを作成するプログラムを以下に示す。 setup 関数ははじめに呼び出され，横幅 640，高さ 480 のキャンバスを作成しカメラを起動する。

キャンバスの作成する function

[figure]

function setup() {
  createCanvas(640， 480);
  video = createCapture(VIDEO);
  video.hide();
  poseNet = ml5.poseNet(video， modelLoaded);
  poseNet.on('pose'， gotPoses);
  let options = {
    inputs: 34，
    outputs: 4，
    task: 'classification'，
    debug: true
  }
  brain = ml5.neuralNetwork(options);
}

[figure]

指示を判定するプログラムである。指示判定のプログラムはキー操作だけでなく，クリックによる操作などでも可能であるが本システムでは指示判定をキー操作で行うと仮定して作成する。

指示判定の function

[figure]

function keyPressed() {
if (key == 't') {
brain.normalizeData();
brain.train({epochs: 50}， finished);
}else if (key == 's') {                      //データを保存
brain.saveData();
}else if (key == 'f') {                      //モーションキャプチャ開始
targetLabel = key;
console.log(targetLabel);
setTimeout(function() {
console.log('collecting');
state = 'collecting';
}， 1000)
}else if (key == 'l') {                      //モーションキャプチャ終了
targetLabel = key;
console.log(targetLabel);
setTimeout(function() {
console.log('not collecting');
  state = 'waiting';
}， 1000)
} else {
targetLabel = key;
console.log(targetLabel);
}
}

[figure]

モーションキャプチャを行うプログラムの一部を以下に示す。 input0 から input33 までの 34 個のデータを配列として取得する。

xy 座標を取得する function

[figure]

function brainLoaded() {
console.log('pose classification ready!');
classfigyPose();
}
function classfigyPose() {
if (pose) {
  let inputs = [];
  for (let i = 0; i < pose.keypoints.length; i++) {
    let x = pose.keypoints[i].position.x;
    let y = pose.keypoints[i].position.y;
    inputs.push(x);
    inputs.push(y);
  }
  brain.classify(inputs， gotResult);
} else {
  setTimeout(classifyPose， 100);
}
}
function gotResult(error， results) {
if (results[0].confidence > 0.75) {
poseLabel = results[0].label.toUpperCase();
}
classifyPose();
}
function dataReady() {
brain.normalizeData();
brain.train({epochs: 50}， finished);
}
function finished() {
console.log('model trained');
brain.save();
classifyPose();
}

[figure]

[figure]

function gotPoses(poses) {
if (poses.length > 0) {
pose = poses[0].pose;
skeleton = poses[0].skeleton;
if (state == 'collecting') {
let inputs = [];
for (let i = 0; i < pose.keypoints.length; i++) {
  let x = pose.keypoints[i].position.x;
  let y = pose.keypoints[i].position.y;
  inputs.push(x);
  inputs.push(y);
}
let target = [targetLabel];
brain.addData(inputs， target);
}
}
}

[figure]

取得している位置座標をキャンバスに描くプログラムを示す。 p5.js の draw を使用し，楕円とスケルトンの描写を行う。

キャンバスに描く function

[figure]

function draw() {
push();
translate(video.width， 0);
scale(-1， 1);
image(video， 0， 0， video.width， video.height);
if (pose) {
for (let i = 0; i < pose.keypoints.length; i++) {
let x = pose.keypoints[i].position.x;
let y = pose.keypoints[i].position.y;
fill(0， 255， 0);
ellipse(x， y， 16， 16);
let eyeR = pose.rightEye;
let eyeL = pose.leftEye;
let d = dist(eyeR.x， eyeR.y， eyeL.x， eyeL.y);  //右目と左目の距離を測る。

fill(255， 0， 0); //色は赤に指定。

ellipse(pose.nose.x， pose.nose.y， d-20);   //ここで鼻に楕円を描いてる。距離に応

じて大きさが変わる。

}
for (let i = 0; i < skeleton.length; i++) {
let a = skeleton[i][0];
let b = skeleton[i][1];
strokeWeight(2);
stroke(255);
line(a.position.x， a.position.y， b.position.x， b.position.y);
}
}
pop();
fill(255， 0， 255);
noStroke();
textSize(512);
textAlign(CENTER， CENTER);
text(poseLabel， width/2， height/2);
}

[figure]

サーバ側プログラムの作成

CGI によって動作するサーバ側のプログラムを Ruby スクリプトにて作成する。ここではデータをサーバに書き込む処理を行う。データレイクとして保存しておくため，ファイルの種類は限定しないこととする。

save json.rb

[figure]

  require "cgi"
  require "json"
  cgi  = CGI.new
  file = cgi.params["test_file"][0]
  file_name = cgi.params["test_file"][0].original_filename
  open("../db/#{file_name}"， "w") do |f|
    f.write(file.read)
  end
  cgi.out do
    "

#データの保存終了後のページを HTML で記載。

    "
  end

[figure]

5.4 実装したシステム

第??目によって実装されたシステムを図??に示す。図??はブラウザの画面を最大化した状態である。画面内のキャンバスにキーポイントが描写されている。キーポイントを取得した位置に楕円を表示し，スケルトンによってつなぎ合わせている。ファイルの選択ボタンから保存したいファイルを選択し，送信を押すことでサーバに保存することが可能である。

図 5.3 システムの画面

第 6 章

実験

第??章では作成したシステムについて説明した。本章では第??章で実装したシステムを実際に使用し，検証を行う。実験は手を上げ下げする等の単純な動作のみならず，いくつかの動きが組み合わされた踊りのモーションキャプチャも行う。踊りは YOSAKOI ソーランの踊りを取り上げる。また，実験により判明した実験結果とその考察を述べる。

6.1 実験

本実験ではモバイルデバイスとして PC 一台を使用することとし，正面からのモーションキャプチャを行うものとする。また，カメラ内に入る被験者は一人を前提とする。実験の手順を以下に示す。

1. 本システムの URL にアクセスする

2. 演者の全身がカメラに映るように立つ

3. モーションキャプチャを開始する

4. 演者は演舞を開始する

5. 演舞が終了次第モーションキャプチャを終了する

6. 自身の PC にデータを保存する

7. サーバにデータを保存する

6.1.1 動作とデータの保存

モーションキャプチャは行えるのか，データとして保存できるのかを検討する。以下に実験の項目を示す。

1. 何もせずに立っているだけの状態

2. 手を交差する動き

3. 身体を捻る動き

4. カメラの視界範囲内を約 1m/s の速さで動く動き

5. 背景と被験者の服装などを考慮した場合のモーションキャプチャ

6.1.2 YOSAKOI ソーランの踊りの保存

YOSAKOI ソーランの曲の一部を保存する。曲の速さは民俗芸能・伝統芸能の動きに比べ速いため， 1/2 の速さでのモーションキャプチャを行う。曲は蒼嵐の持ち曲である「神々の舞い」である。

6.2 実験結果と考察

実験結果とその考察を述べる。

6.2.1 実験結果

第??項の実験結果は以下のとおりである。

それぞれのキーポイントの座標を取得し， JSON ファイルとして保存することが可能であった。身体の 17 か所のキーポイントを x 座標と y 座標の 2D の位置データとして取得可能だった。実際に取得した JSON データの一部を以下に示す。

JSON データの内容

[figure]

  {"data":[{"xs":{"input0":342.5265202512983， "input1":115.03797296892131，
  "input2":349.4787793968156， ...
  ...， "input33":393.17645929942586}， "ys":{"output0":"l"}}]}

[figure]

通常の動作

何もせずに立っているだけの状態は問題なくモーションキャプチャを行うことが可能であった。図??は上半身 13 か所のキーポイントが取得されているものである。

手を交差する動きはキーポイントの位置がずれる，認識されるキーポイントの数が増える等の失敗が見られた。図??ではキーポイントの位置がズレていて，手首と腰のキーポイントがズレているのが確認できる。図?? では本来上半身 13 か所のキーポイントを取得するはずだが， 16 か所のキーポイントとして認識されている。身体を捻る動きはモーションキャプチャを行うことができた。カメラの視界範囲内を約 1m/s の速さで動く動きはモーションキャプチャを行うことができたが，正確に記録できていない場合も確認できた。

背景と被験者の服装の色が異色の場合も同色の場合も同じようにモーションキャプチャを行うことが可能であった。図??に背景と服装の色が同色の場合のモーションキャプチャを示す。

図 6.1 正常なモーションキャプチャ図 6.2 手を交差する動き 1

図 6.3 手を交差する動き 2

図 6.4 背景と服装の色が同色のモーションキャプチャ

YOSAKOI ソーランの踊り

YOSAKOI ソーランの踊り「神々の舞い」を 1/2 の速さで記録することが可能であった。単純な動作とは違い，大胆な動きや腕を捻る動き等の複雑な動きも踊りの中には存在するが，記録することが可能であった。しかし，空中で回転をしながら踊る動き等の動作は記録に失敗することもあった。図??， ??， ??， ??に YOSAKOI ソーランのモーションキャプチャの様子を示す。

図 6.5 神々の舞い 花の表現 1

図 6.6 神々の舞い 波の表現 1

図 6.7 神々の舞い 花の表現 2

図 6.8 神々の舞い 波の表現 2

6.2.2 考察

今回の実験ではモーションキャプチャによってキーポイントを正確に取得できたものとそうでないものが確認されたが，使用しているモバイルデバイスの性能により結果が変わることが考えられる。今回の実験では PC を使用したが，タブレットやスマートフォンで行った場合，正確に記録できないものやキーポイントそのものが認識されてないデバイスも確認できた。 PC の性能によっても速い動きのキーポイント取得の結果に違いが出るようである。

第 7 章

結論

本研究ではモバイルデバイスを活用した踊りのデータ保存システムの構築を行った。モバイルデバイスによるモーションキャプチャを PoseNet を利用することによって可能にした。 Web カメラでモーションキャプチャを行うことが可能であり， YOSAKOI ソーランの踊りを 1/2 の速さではあるが JSON ファイルで取得できていることから，民俗芸能・伝統芸能の踊りの記録にも活用できると考える。従来のモーションキャプチャは高額な装置を購入しなければならず，個人では行うことが困難であった。しかし，本システムを活用することで，民俗芸能・伝統芸能の踊りを安価に記録・保存することが可能となった。また，キー操作やクリック等による容易な操作によりモーションキャプチャを行うことを可能とした。高額なモーションキャプチャと比較すれば精度は劣るものの，本研究では安価で容易にモーションキャプチャを行うことを可能にした。

本システムは 2D の位置座標を取得しているが，本来，モーションキャプチャは 3D のデータを取得するものである。 3D カメラを使用する等して 2D だけでなく， 3D のデータを保存することが望ましい。また，モバイルデバイスの性能により，モーションキャプチャを行えるものとそうでないものがあることを確認した。 PC，タブレット，スマートフォン等のどのモバイルデバイスでも使用できるシステムにしていく必要がある。

本システムによって記録された 2D データにより，踊りの記譜法の記録 [?]， 2D のキャラクター等に利用することを考える。見本となる演者と継承される側の演者のモーションデータを比較することにより，相互の違いを認識することに利用することも可能にする。民俗芸能・伝統芸能の踊りは，人の動きや衣装，道具，舞台，楽曲等からなる総合的な表現である。そのため衣装や道具，大人数での演舞に関しては，モーションキャプチャで継承を行うよりも画像や動画を活用した方が優れている。楽曲等の音も他の方法で記録する必要がある。そこで本システムと他の継承方法を連携させ，より正確な継承を行うことを検討していく。

本研究で作成したシステムの QR コードと URL を以下に示す。

  https://www.koeki-prj.org/~c118077/posenet.html

謝辞

本研究を進めるにあたり，多くの方々にご指導を賜りました。指導教官の広瀬雄二教授からは多大なご指導を賜りました。ここに深謝の意を表します。三浦彰人特任助教には夜遅くまで温かいご助言を頂きました。感謝いたします。同大学元講師の唐栄氏には本システム作成にあたり，適切なご指導を賜りました。感謝申し上げます。実験のデータ収集にあたり，東北公益文科大学 YOSAKOI ソーラン部蒼嵐の皆様にはご協力頂きました。

本当にありがとうございました。

最後に， b 研究室及び c 研究室の皆様には，本研究の遂行にあたり多大なご助言，ご協力頂きました。ここに誠意の意を表します。

参考文献

[1] 玉本英夫.“民俗芸能・伝統芸能をモーションキャプチャで記録する”. 文部科学省私立大学研究ブランディング事業日本遺産を誇る山形県庄内地方を基盤とした地域文化と IT 技術の融合による伝承環境研究の展開.2019 （平成 29 年度〜平成 31 年度）， pp. 23-29.

[2] 玉本英夫，唐栄.“黒川能のディジタル化を通した民俗芸能の踊り継承の新手法”. 東北公益文科大学総合研究論集:Forum 21.2020， pp.87-97.

[3] 広瀬雄二，三浦彰人，唐栄.“地域文化デジタルストリートマップ構築の取り組み”. 研究報告情報システムと社会環境 (IS).2019， Vol.2019-IS-150， No.15， pp. 1-2.

[4] 三浦彰人.“深度カメラと姿勢推定モデルを用いた 3D キャラクターリアルタイムモーションシステムの開発”. 東北公益文科大学総合研究論集:Forum 21.2020， pp.99-107.

[5] 丹羽みずほ，木村健一.“YOSAKOI ソーランの舞踊記譜法のデザイン”. 日本デザイン学会第 63 回研究発表大会. 一般社団法人日本デザイン学会.2016， pp382-383.

[6] 株式会社わくわくスタディワールド瀬戸美月. 徹底攻略応用情報技術者教科書令和 3 年度，株式会社インプレス， 2020.

[7] アイテック IT 人材教育研究部. 高度午前 I ・応用情報午前試験対策書，株式会社アイテック， 2021.

[8] 総務省.“情報通信機器の保有状況”. 総務省. https://www.soumu.go.jp/johotsusintokei/
whitepaper/ja/r01/html/nd232110.html， (参照 2020-11-10).

[9] 総務省.“総務省 — 令和元年版情報通信白書 — 進む「AI の民主化」 ”. 総務省. https://www.soumu.

go.jp/johotsusintokei/whitepaper/ja/r01/html/nd113220.html， (参照 2022-1-09).
[10] 厚生労働省.“所得の分布状況”. 厚生労働省. https://www.mhlw.go.jp/toukei/saikin/hw/k-tyosa/
k-tyosa09/2-2.html， (参照 2021-11-27).

[11] 総務省.“新型コロナウイルス感染症 (COVID-19) の対応について — 内閣官房新型コロナウイルス感染症

対策推進室”. 内閣官房. https://corona.go.jp/dashboard/， (参照 2022-01-11).

[12] 一般社団法人 YOSAKOI ソーラン祭り組織委員会.“YOSAKOI ソーラン祭り公式ホームページ”.YOSAKOI ソーラン祭り公式サイト. https://www.yosakoi-soran.jp/， (参照 2021-10-26).

[13] W3C.“CSS Snapshot 2020 W3C Working Group Note， 22 December 2020”. https://www.w3.org/ TR/css-2020/， (参照 2021-12-02).

[14] WHATWG.“HTML Living Standard ― Last Updated 30 November 2021”. https://html.spec. whatwg.org/， (参照 2021-12-02).

[15] Ruby コミュニティ.“オブジェクト指向スクリプト言語 Ruby”. https://www.ruby-lang.org/ja/，

(参照 2021-12-02).

[16] Ecma International.“Home - Ecma International”. https://www.ecma-international.org/， (参照 2021-12-03).

[17] The Coding Train.“thecordingtrain.com”. https://thecodingtrain.com/， (参照 2021-12-03).

[18] TensorFlow.“ポーズ推定 — TensorFlow Lite”. https://www.tensorflow.org/lite/examples/
    pose_estimation/overview?hl=ja， (参照 2022-01-11).

[19] TensorFlow.“TensorFlow”. https://www.tensorflow.org/， (参照 2021-12-06).

[20] p5 コミュニティ.“home — p5.js”. https://p5js.org/， (参照 2021-12-06).

[21] ml5 コミュニティ.“ml5js·Friendly Machine Learning For The Web”. https://ml5js.org/， (参照 2021-12-06).

[22] JSON.“JSON”. https://www.json.org/json-en.html， (参照 2021-12-06).