ThreeDPoseTracker Ver.0.5アップデート

![QiitaTop.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/374813/96f98ddc-9276-9513-970a-daacb32fdb8c.png)


# はじめに

この記事はUSBカメラモーションキャプチャーThreeDPoseTrackerのバージョン0.5.0のアップデートについての記事です。ですが今回のリリースに合わせてマニュアルを整備したので使い方はそちらを参照してください。さらに、今回からダウンロード先をBOOTHにしてみました。もちろん無料でダウンロードできます。ブーストも用意したので気にいったら課金お願い致します。もちろん中身は同じですが、Discordのご案内URLが付きます。とは言っても何かある訳ではありませんので過度な期待は禁物です。質問には私が率先して答えるくらいです。基本的にフリーウェアです。その点お願いします。

https://digital-standard.booth.pm/items/3698596

という事で、この記事はリリースノートになります。
まずThreeDPoseTrackerってナニ？という方は先に

「USBカメラモーションキャプチャーThreeDPoseTrackerの説明」
https://qiita.com/yukihiko_a/items/43d09db5628334789fab
「ThreeDPoseTracker Ver.0.2アップデート」
https://qiita.com/yukihiko_a/items/e5b07bd045611c73bbbe
「ThreeDPoseTracker Ver.0.3アップデート」
https://qiita.com/yukihiko_a/items/e5b07bd045611c73bbbe
「ThreeDPoseTracker Ver.0.4アップデート」
https://qiita.com/yukihiko_a/items/d5c9635e4f1d7f69451f

をご覧ください。過去バージョンも上の記事からDLできます。

### ※iOS版もリリースしています。
詳しくはこちらのページをご覧ください。

https://digital-standard.com/tdpt_lp/

# Ver.0.5.0
iOS版アプリTDPTと学習モデル・アバターの動きを合わせるのがが主たる目的のリリースでしたが、要望が多かった上半身とハンドトラッキングモードも追加しました。

・動画でもミラーモードが使えるように変更
・入力画像モザイクモードの追加
・ウインドウ透過機能の追加
・上半身モードの追加
・ハンドトラッキングモードの追加
・VMCプロトコルの受信機能（ブレンドシェイプとアイボーンのみ）の追加
・アプリケーションの色空間をリニアに変更
・姿勢推定の学習モデルの変更。少し精度が改善

こうして見ると盛りだくさん。ここから下は駄文になります。

### Mirror Mode
動画でダンスのモーションを取って練習する時とかに左右反転しないと練習にならないじゃないかと、気が付いて追加しました。USBカメラ使用時やiOS版にはあったのですが動画のキャプチャーではできませんでした。実は、このアプリの奥底にダンス練習機能が仕込んであるのですがそれで遊んでいる時に気が付きましたｗ。ちょっと作りが雑ですが要望が多ければダンス機能も公開します（これはこれで別のアプリを作りたい）。

https://twitter.com/yukihiko_a/status/1450492685039521793?s=20&t=gB0x__fJ0xdO_BTr52w25Q


### Mosaic
入力画像をモザイク処理します。ライブ配信する方などチャレンジングな人がたまにいるので放送事故が無いか見ながらビクビクしています。とりあえずオンにしていてもらえば最悪の事態は避けられるんじゃないかと思います。あと、上の踊った動画とかも自分の踊ってる姿をさらすのはちょっと・・・と思っていたのでそんな用途を想定しています。シェーダーで処理していますがちょっとは負荷があるので必要ない人はモザイクだけでなく入力画面の表示もオフにしてください。

### Transparent
わたしの専用アバター月坂りしゅなちゃんの服の色がグリーンバックととても相性が悪いので、ウインドウの透過をサポートしました。専用と言ってもVRoid Hubで公開されているのでアレですが。この機能はOBSとかで合成する時にとても便利です。完全にkirurobo様の[UniWindowController](https://github.com/kirurobo/uniwindowcontroller)パッケージのおかげです。ありがとうございます。
透過以外にもウインドウをトップ固定、ウインドウ最大化のオプションも追加しました。これｍ（略）。

https://hub.vroid.com/characters/5694063326259868074/models/3532357308088842858

### Use Upper Mode
要望が多かった上半身モードです。姿勢推定の学習も大きめの人物のデータも追加はしていますが、やっぱり全身が写ってないとちょっと（かなり？）あばれるので個人的には気にいっていません。Upper Modeを有効にした際は入力画像（Input image）内のカメラ画像を小さくし（デフォルトでは0.35倍）、少し上の位置（デフォルトではy:-0.3）の位置に表示します。これによりちょっと安定します。使用するカメラの距離や画角にかなり依存するので、どの位置が一番暴れないか環境に合わせて調整して頂けたらと思います。どちらも0.05ずつ程度で微調整する感じでいいと思います。でも一番効果があるのはカメラから離れる事です。
上半身モードではアバターの股関節から下を完全にロックします（というか実質的に上半身モードはこのロックが特別なだけで入力画像やカメラの設定は上半身モードでなくても同じ設定が可能です）。アプリケーション内のカメラもアバターの上半身だけを写すように移動します。設定画面ではカメラの移動位置を数値で設定できますが数値で設定するのはめんどくさいのでAltキーを押しながらマウスドラッグでカメラを移動できるようにしています（この機能はアプリケーションがどの状態でも有効になっています）。カメラの場所が決まったら”Get current camera pos”ボタンをクリックして設定画面に今のカメラ位置を反映します。

でUSBカメラなんですが、個人的にはこのUSBカメラ↓がおすすめ。Vitade社の682H。100度広角でマニュアルフォーカス、画質もまあまあで6,099円（2022/3/8時点）。安い。まあ中華なんですが。でもほんとに広角なので、机から上半身撮るとかは超お勧め。両端に行くと結構歪みますがそんな所使わないし。もうこれをこのアプリの推奨カメラに指定したいくらい。別に何か貰ってるとかはありません。環境によってはいろいろ合わない場合もあるかもしれません。そこまで調べてはいません。また、このメーカーの1000円ほど安い928Tというカメラもありますが、スペックには広角100度と書いてありますが100度はない感じです。logicoolのC922nと比較してみたところ画角はほぼ（ぴったり？）同じだったので78度くらいと考えて良さそうです。さらに画質もC922nとほぼおｎ（略）。


https://www.amazon.co.jp/100%C2%B0%E8%B6%85%E5%BA%83%E8%A7%92-%E3%82%B9%E3%83%88%E3%83%AA%E3%83%BC%E3%83%9F%E3%83%B3%E3%82%B0-%E3%83%8E%E3%82%A4%E3%82%BA%E3%82%AD%E3%83%A3%E3%83%B3%E3%82%BB%E3%83%AA%E3%83%B3%E3%82%B0%E6%A9%9F%E8%83%BD-youtube%E5%8B%95%E7%94%BB%E9%85%8D%E4%BF%A1-%E3%82%A6%E3%82%A7%E3%83%96%E3%82%AB%E3%83%A0-Vitade/dp/B08925VLLR?ref_=ast_sto_dp&th=1

### Use HandTracking（β）
ハンドトラッキングです。GoogleのMediaPipeを使用しています（自作の学習モデルも作っていますが、まだ指先がグニャグニャです。）。さらにkeijiro様の[HandPoseBarracuda](https://github.com/keijiro/HandPoseBarracuda)を参考にしてComputeShaderってこうやって使うのねととても勉強になっています。真似して自分のモデルの実行後の後処理もComputeShaderで行ってみましたがあんま変わらない・・・、現状で関節数分の24本CPUで平行処理しているのでそれをShaderに持って行ったって変わらんかぁという気もしますが、もうちょい軽く出来そうな気もしています（でも時間がない）。全体的にもうちょっとなんとかできそうな気がしているのですがあまり時間をかけていないので殆ど初めに書いたコードのままでほぼ放置です。安定してトラッキングするのは結構コツがいると思います。ごめんなさい。でも慣れてくるとなんとなくイケてる感じになります。その為β版機能としていますがこれ以上手を入れるかは今の所わかりません。おそらく全身で踊ってる状態でそれっぽく推定できるようになればβがとれると思いますが、逆に言うと現状では踊ってみたには全く使えません。カメラに手が映るように意識すれば全く認識しない訳ではありません。

https://twitter.com/yukihiko_a/status/1500793615970635778?s=20&t=f_I0JEcGVYzoJaosyIgD6A

### Item Setting
VRMはgltfがベースになっています。使用している[UniVRM](https://github.com/vrm-c/UniVRM)パッケージはgltfの読込ができるのでそれをそのまま使用して3Dオブジェクトが読めるようにしています。背景に物を置きたい時は座標系をWorldに。手に持った感じにするにはLeft、Right Handを指定してもらえば手の動きに追従します。さらに持った感じにするためにHand Figureの項目で指先の形状を指定できるようにしています。初めはグーチョキパーとか固定にしていたのですが、あまりいい感じにならなかったので諦めて好きにできるようにしました。指の開き具合も指定できます。でも親指の動きは難しいです。また、ハンドトラッキングが有効の時はハンドトラッキングが勝つようにしています。使用した感じはこんな感じです。

https://twitter.com/yukihiko_a/status/1498995342842675201?s=20&t=pQ2LBm_HXEy7BuJcBlySsw

### Receive VMC Protocol
ブレンドシェイプとeyeボーンだけ受信します。他のボーン情報は無視します。完全にフェイシャルトラッキング用の受信機能です。ブレンドシェイプはVRM標準とUnknownをそのまま渡すのでパーフェクトシンクのモデルも情報をもらえれば動くと思います。実際に使った感じは↓下記のような感じです。現状はPCではVseeface、iOSアプリはwaidayoだけでしか確認していません。他のiOSアプリもたぶん難しくないでしょうから今後可能な範囲で対応していきたいと思ってます。

https://www.youtube.com/watch?v=t4GezkSuE4s

# 最後に
おそらくQiitaにアップデート情報を書くのは今回で最後です。それかもうちょっと技術ネタに振るかかなあと思いますが、それでもあまりQiita向きじゃないと思うので次回からは引っ越しします。

### Licence
このThreeDPoseTrackerの実行ファイルについては営利・非営利問わずご自由にお使いください。この実行ファイルを使用した配信、モーションデータも同様にご自由に利用可能です。
GithubにあるソースコードについてはGithubにあるライセンスに従ってください。

### 免責事項
本ソフトウエアの使用に起因する、ソフトウエア、ハードウエア上の事故その他の損害、または使用できなかったことから生じる一切の損害に関して、製作者はいかなる責任も負わず、修正する義務を負いません。