75
50

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Webcamで全身フルトラッキング for SteamVR

Posted at

なんだこれ

VRchatのようなSteamVRを使用するゲームで、Viveトラッカーなしで全身フルトラッキングができるまでの手順。
Oculusがいつまで経ってもフルトラッキングに対応しないので作りました。
この方法を使えば実用性はともかく、理論上はVR機器無しでフルトラッキング状態でSteamVRゲームができます。

ただし現状これは3Dトラッキングではなく2Dトラッキングです。3Dトラッキング用のモデルは作成中ですが、実用的なスピードで動かせるのかはまだ未知数。現在使用しているAlphaPoseも1070tiで12FPSが最大ぐらいです。
機械学習つよつよの人頑張って

Webcam フルトラッキングまでの手順

  1. OpenVR上で動作する仮想トラッカーを作成する。
  2. Webcamでモーション認識する。
  3. モーション認識データを仮想トラッカーに反映させる

必要なもの

  • 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への座標変換が大変なガバ実装なので、気になる人はみなさん好きに料理してください。

システムの起動手順

  1. python sample/tracking_sample.py
  2. python webcam_demo.py
  3. PlayspaceMover.exe --fakeTrackers --bodyHeight (your height [m]) --externalTracking

トラッキングの様子 in VRchat

おわりに

私はViveを買いました(完)

75
50
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
75
50

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?