需要もないし、もっと良いやり方はいくらでもあると思いますが、試したことをメモとして残しておきます。(かなり雑ですが)
OSはWindows10です。
利用した機材
・Webカメラ 1台だけ(ちなみにELECOM UCAM-C820ABBK)
トラッキングに利用したソフトウェア
・VSeeFace(フェイストラッキング用) 無料
・ThreeDPoseTracker(手のトラッキング用) 無料
・SplitCam(カメラ映像加工、分配用) 無料
その他の関連ソフトウェア
・VRoidStudio(3Dモデル作成用) 無料
・OBS Studio(配信用) 無料
※ 追記
ThreeDPoseTrackerのバージョンアップに伴い、上半身モードやハンドトラッキングモードが追加されたので、下記のような面倒なことは不要になっています。
スポンサーサイト
目次
1.やりたかったこと
2.やってみたこと
3.結果
4.最後に
1.やりたかったこと
やりたかったのは、
Webカメラの上半身の映像だけで、
フェイストラッキングとハンドトラッキングして、
3Dモデル(VRMモデル)のキャラクターを動かして、
YouTubeなどで配信することでした。
要するに、特別なVR機器を使わずに、Vtuberのようなことをしたかったです。
もともとは全然知識のない状態でしたが、少し調べてみたら、VSeeFaceという無料のソフトウェアで、比較的簡単にフェイストラッキングできました。
ただ、ハンドトラッキングをやるには、VSeeFaceではLeapMotionという別の機材が必要なようで、別の方法を探しました。
もう少し調べると、Webカメラだけで全身をトラッキングできるThreeDPoseTrackerという無料のソフトウェアもありました。
こちらはVMC Protocolの送信に対応しているので、VMC Protocolを受信できるVSeeFaceと組み合わせて、なんとかいけるんじゃないかと思ったのでした。
2.やってみたこと
第1段階:Webカメラ+VSeeFaceでフェイストラッキング
VSeeFaceというソフトウェアで、フェイストラッキングはすぐできました。
情報も探せばたくさんあると思うので詳細は省略します。
私の場合、以下の流れで進めました。
(1)3Dモデルのキャラクターを作成する
VRoidStudioで3Dモデルを作成し、VRMでエクスポートしました。
やり方は、探せば情報がいっぱいあると思うので、説明を省略します。
他にもいろいろな作成方法があると思いますが、詳しく知らないです。
(2)VSeeFaceをダウンロードしてフェイストラッキング
VSeeFaceをダウンロードして実行し、
上記(1)でエクスポートしたVRMファイルからアバターを登録してスタート。
これでWebカメラの映像でフェイストラッキングして3Dモデルが動くと思います。
肩を揺らしたり目を閉じたり口を開けたりできます。手は動きません。
第2段階:Webカメラ+ThreeDPoseTracker+VSeeFaceで上半身トラッキング
試行錯誤した結果、ThreeDPoseTrackerというソフトウェアを使って、下図のような構成でハンドトラッキングも実現できました。

(1)ThreeDPoseTrackerをダウンロードして、色々設定する。
・下記から最新版をダウンロード
USBカメラモーションキャプチャーThreeDPoseTrackerの説明 - Qiita
(私はVer.0.4.1をダウンロードしました)
・起動して「Source Device」をWebカメラに変更して「Start Cam」で開始
・Webカメラに全身が収まるようにする
で、動きに合わせてモデルもいい感じに動きました。
ただ、ここで2つ問題がありました。
問題1:上半身だけの映像では認識してくれない
問題2:Webカメラの映像をVSeeFaceと奪い合う
そこで、SplitCamというソフトウェアを使って、無理やり問題を解決しました。
(2)SplitCamのインストールと色々設定
SplitCamはカメラ映像を複数アプリに分配したり、加工したりできるソフトウェアのようです。
・下記からダウンロードしてインストール
SplitCam free webcam software for video streaming and adding cool webcam effects
・起動したら、「Media Layers」に既にカメラがあって上半身が映っていた
・下半身の絵を適当に作って、「Media Layers」で「Image」として追加し、
Webカメラの上半身の映像と適当に合成(雑コラみたいになった)
下半身の絵は、こんなの
Webカメラの映像と合成するとこんな感じに…
これで上半身しかWebカメラに映ってなくても、全身が映っている風に偽装します。
こうやって見ると、あほっぽい。
(3)ThreeDPoseTrackerの設定を変更
・「Source Device」を「SplitCam Video」に変更して「Start Cam」
・「Configuration」で
・Imageタブ:「Mirror when using camera」のチェックを外す
・Predictタブ:「Low Pass Filter」を適当にいじる(私は0.2)
「Lock Foot」、「Lock Leg」、「Elbow axis to Top」にチェックを入れる
・Othersタブ:「Use VMC Protocol」にチェックを入れる(Portを確認しておく)
でOK。Predictタブの設定はあまりよくわかってないです。
これで上半身しかカメラに映ってなくても、モデルの上半身が動きます。
それをVMC Protocolで出力できるようになりました。
(4)VSeeFaceでウェブカメラをSplitCam Video Driverにして色々やる
・「ウェブカメラ」を「SplitCam Video Driver」にして「スタート」
・「設定」の「一般設定」で「OSC/VMCプロトコルで受信する」をチェックし、
ポートに(3)で確認したPort番号を設定
・「VSeeFaceトラッキングを使用」にチェックを入れて、
その下の「手から肩までのトラッキング」のチェックを外して、
「下半身のトラッキング」のチェックを外して、
他のトラッキングはチェックを入れる。
・下の方にある「腰をほぼ固定する」にもチェック
この辺の設定もあまり理解してないです。
・モデルの位置とか角度を適当に調整して上半身だけ映るようにする
3.結果
これで、Webカメラの映像から手の動きをThreeDPoseTrackerでトラッキングし、顔の動きをVSeeFaceでトラッキングして、3Dモデル(VRM)を動かせるようになりました。
ただ、ハンドトラッキングは、指や手のひらなどを認識しないので、そんなに表現力は高くないです。
こんな感じです。
このあと、OBS StudioでVSeeFaceの画面を簡単に配信もできました。
・OBS Studioをダウンロードしてインストール。
・起動して、ソースでゲームキャプチャを追加しVSeeFaceのウィンドウを指定。
この辺の手順は、たくさん情報があると思います。
4.最後に
一応、無料で十分やりたいことはできました。
ただ、ThreeDPoseTracker様のThreeDPoseTracker Ver.0.4アップデート - Qiitaにも書かれている通り、こういう用途(上半身のみの映像でモーションキャプチャ)は、他のアプリを使った方が多分良いだろうと思います。
そのうち気が向いたら、もっと他の方法も試してみようかと思います。
追記:mediapipeを試してみました。
mediapipeとVSeeFace(Leap Motionなし)でVRMモデルを動かす実験メモ:
※ 追記
ThreeDPoseTrackerのバージョンアップに伴い、上半身モードやハンドトラッキングモードが追加されたので、上記のような面倒なことは不要になっています。
以上
スポンサーサイト