なんだこれ
VRchatのようなSteamVRを使用するゲームで、Viveトラッカーなしで全身フルトラッキングができるまでの手順。
Oculusがいつまで経ってもフルトラッキングに対応しないので作りました。
この方法を使えば実用性はともかく、理論上はVR機器無しでフルトラッキング状態でSteamVRゲームができます。
ただし現状これは3Dトラッキングではなく2Dトラッキングです。3Dトラッキング用のモデルは作成中ですが、実用的なスピードで動かせるのかはまだ未知数。現在使用しているAlphaPoseも1070tiで12FPSが最大ぐらいです。
機械学習つよつよの人頑張って
Webcam フルトラッキングまでの手順
- OpenVR上で動作する仮想トラッカーを作成する。
- Webcamでモーション認識する。
- モーション認識データを仮想トラッカーに反映させる
必要なもの
- Pytorchの動くPython3系 (Anacondaがおすすめ)
- GTX 1060以上のGPU
1. 仮想トラッカーの作成
OpenVR Input Emulator は仮想デバイスの作成をサポートします。これを利用したプロジェクトの1つに、VRPlayspaceMoverがあります。このプロジェクトが仮想トラッカーの作成をサポートしていたので、こちらを利用しました。
こちらのプロジェクトを改造して、仮想トラッカーの位置をZeroMQを使ったソケット通信で上書きできるようにしたプロジェクトがこちら(VRPlayspaceMover4DIYTracking)です。
Windowsバイナリはこちら。
使いかた
新たに--externalTracking
という外部トラッキングシステムを有効にする引数を追加しているので、起動時にそれを書いてください
PlayspaceMover.exe --fakeTrackers --bodyHeight (your height [m]) --externalTracking
2. Webcamを使ったモーション認識
こちらは様々なOSSがありますが、いろいろ試したところAlphaPoseが精度とスピードが良かったです。
こちらのプロジェクトを改造して、各モーション情報をZeroMQで外部に出力できるようにしたのがこちらです。
使い方
python webcam_demo.py
トラッキング映像が見たければ
python webcam_demo.py --vis
3. 仮想トラッカーへのデータ送信
ソケット通信で改造したVRPlayspaceMoverに送ります。サンプルのPythonスクリプトは自分のVRPlayspaceMoverのsampleの中にあります。
python sample/tracking_sample.py
まだトラッキングデータをフィルタも補間もしない&OpenVRへの座標変換が大変なガバ実装なので、気になる人はみなさん好きに料理してください。
システムの起動手順
python sample/tracking_sample.py
python webcam_demo.py
PlayspaceMover.exe --fakeTrackers --bodyHeight (your height [m]) --externalTracking
トラッキングの様子 in VRchat
トラッキングの様子 pic.twitter.com/nVM3yUgTTc
— TenteEEEE てんて- (@tenteeeee_vrc) December 30, 2018
おわりに
私はViveを買いました(完)