Works : VR 機材を使わずにフェイストラッキングを行うアプリケーションを作る
動機
私は Linux 使いです. Windows もありますが Linux も使います.
VTuber を初めとした V の者の活動を支援するツールは Windows にはいっぱいあります.
あとは解ると思いますが Linux にはほぼありません. (あるかもしれませんが, ちょっと探したぐらいでは見つからないぐらいにはありません)
これでは Linux をメインに活動する際に支障が出ます.
なので自分で作ることにしました.
目標
- できれば Windows, Linux, macOS 問わずに使えるものを設計します.
- トラッキングを行うソフトウェアと表示を行うソフトウェアは分離します.
- 分離することによって例えば表示部分を別のより良いソフトウェアで置き換えることがより簡単になります.
- またそうするために通信プロトコルを用意します.
- 標準技術を積極的に活用. とくに Web アプリケーションは汎用性が高いため Web アプリケーションで使われるフォーマットを優先的に採用します.
- 最後に, 作るからには使えるものを作ります.
技術
言語基盤
- .NET (.NET Core 3.0)
- Web (JavaScript/WebGL)
ただ, 前節で触れたように, ソフトウェアは分離されているためこれらの基盤はあくまで私が実装するときに用いるものです.
フェイストラッキング
- OpenCV, Dlib
Unity で素晴らしいフェイストラッキングライブラリを開発している @kumaS-kumachan さんの Qiita 記事 を参考にしました.
python では pythonとdlibでお手軽に顔のランドマークを検出してみた - Qiita が参考になると思います.
なお、生のデータは使い物にならないのでフィルタリングします. 実装の記事の方に詳しく書く予定です.
通信
WebSocket を用います.
VMC Protocol という先駆者もありますが, OSC はとっつきづらかったので Web や .NET で何も考えずに使える WebSocket で新たにプロトコルを実装します. なお OSC も WebSocket で実装できると思いますがそこまで OSC にこだわりはないのでやりません.
実際に WebSocket で通信するフォーマットには JSON を主に用います. ただし, MessagePack で通信するオプションも用意します(バイナリが良いときがありますから)
表示
three-vrm を用いて Web アプリケーションとして実装します.
これにより容易にマルチプラットフォームに対応できます.
以上をまとめるとこんな感じになります.
実装
別の記事として執筆予定
中間報告
突然顔出しなんてできませんから表示アプリケーションの方を紹介します.
GIF なのでカクカクするかもしれませんが実際はもうちょっと滑らかに動きます(まだ改善の余地はあります).
なお, モデルはこちらで用意した非公開のものです.