MediapipeとUnityを用いて、両手から炎が出てくるプロジェクションマッピングを作った話
作った作品はこちら
使用技術
使用機器
・家庭用プロジェクター
・macbookPro
使用ソフト
・Unity
・Python
通信
・UDP
きっかけ
株式会社Flamers CEOのこーちさんと働いている時に、炎を両手から出せるプロジェクションマッピング作ったらX(Twitter載せるよ)と言われて、やってみたくなった勢いです。
具体的な手法
人間の検知はmacbookのカメラ、炎のビジュアル部分をUnityと考え、そこからどう繋いでいくかを考えました。具体的な技術の障壁として、
・人体の骨格認識
・骨格認識からかめはめ波みたいなポーズをとっているかの検知
・両手の位置や、かめはめ波のポーズの検知結果をUnityへ送信する通信部分
・炎の描画位置
この辺が大きかったです。
人体の骨格認識
ここに関しては、mediapipe というものを使用しました。具体的なコードが
このgithubに載っているのでめちゃくちゃ参考にしました。
このposeというものを使って、全身の検知は完了!
骨格認識からかめはめ波みたいなポーズをとっているかの検知
ここに関しては、ニューラルネットワークを自作しました。
芝浦のAIの研究室に所属している友人に助けてもらいながら、かめはめ波のポーズを200回ほど自分でとって学習データとして、出力はかめはめ波っぽいほど0に近づく値ですね。
ここに関してはgithubを載せるので参考にしてみてください。
あと、「ゼロから作るdeep learning」って本おすすめです。
両手の位置や、かめはめ波のポーズの検知結果をUnityへ送信する通信部分
ここはもうUDP通信で、IPアドレスとポート番号によるローカル通信を指定してゴリ押しました。具体的には「{右手首の座標},,,{左手首の座標},,,{右手人差し指の座標},,,{左手人差し指の座標},,,{AIの演算結果}」こんな感じでPythonでエンコードして、Unity側では「,,,」で区切ってデコードしました。jsonマスターであればもっと良くできるのかも。。。
炎の描画位置
両手の手首の中点を支点として両手の人差し指の中点の方向に炎のパーティクルを出しました。
こーちさんに広めてもらった
嬉しい!
今後
デジタルアート楽しい、、研究に落とし込むのどうしよう、、就活どうしよう、、展示もしたい、、展示ってどうすればいいの、、もし知見ある方いれば教えてください、、
とりあえずVFX勉強しよう(逃げ)
Discussion