🔥

MediapipeとUnityを用いて、両手から炎が出てくるプロジェクションマッピングを作った話

2024/04/22に公開

作った作品はこちら

https://x.com/boichiboichi/status/1778766966498766922

使用技術

使用機器
・家庭用プロジェクター
・macbookPro

使用ソフト
・Unity
・Python

通信
・UDP

きっかけ

株式会社Flamers CEOのこーちさんと働いている時に、炎を両手から出せるプロジェクションマッピング作ったらX(Twitter載せるよ)と言われて、やってみたくなった勢いです。

具体的な手法

人間の検知はmacbookのカメラ、炎のビジュアル部分をUnityと考え、そこからどう繋いでいくかを考えました。具体的な技術の障壁として、

・人体の骨格認識
・骨格認識からかめはめ波みたいなポーズをとっているかの検知
・両手の位置や、かめはめ波のポーズの検知結果をUnityへ送信する通信部分
・炎の描画位置

この辺が大きかったです。

人体の骨格認識

ここに関しては、mediapipe というものを使用しました。具体的なコードが
https://github.com/Kazuhito00/mediapipe-python-sample

このgithubに載っているのでめちゃくちゃ参考にしました。
このposeというものを使って、全身の検知は完了!

骨格認識からかめはめ波みたいなポーズをとっているかの検知

ここに関しては、ニューラルネットワークを自作しました。
芝浦のAIの研究室に所属している友人に助けてもらいながら、かめはめ波のポーズを200回ほど自分でとって学習データとして、出力はかめはめ波っぽいほど0に近づく値ですね。

ここに関してはgithubを載せるので参考にしてみてください。
https://github.com/so-mimi/FireEffectForPerson_Python

あと、「ゼロから作るdeep learning」って本おすすめです。

両手の位置や、かめはめ波のポーズの検知結果をUnityへ送信する通信部分

ここはもうUDP通信で、IPアドレスとポート番号によるローカル通信を指定してゴリ押しました。具体的には「{右手首の座標},,,{左手首の座標},,,{右手人差し指の座標},,,{左手人差し指の座標},,,{AIの演算結果}」こんな感じでPythonでエンコードして、Unity側では「,,,」で区切ってデコードしました。jsonマスターであればもっと良くできるのかも。。。

炎の描画位置

両手の手首の中点を支点として両手の人差し指の中点の方向に炎のパーティクルを出しました。

こーちさんに広めてもらった

https://x.com/Iamkouch/status/1780133961483854008

嬉しい!

今後

デジタルアート楽しい、、研究に落とし込むのどうしよう、、就活どうしよう、、展示もしたい、、展示ってどうすればいいの、、もし知見ある方いれば教えてください、、

とりあえずVFX勉強しよう(逃げ)

Discussion