みんなー!カメラのインタラクティブもの作るとき、まず最初に動作テスト用データのレコーディングしてるー?
ちょっとプログラム修正するたびに立ち上がって手足パタパタしてないよねー?
っていいつつ僕も普段やりがちなんですが、今回はTouchDesignerでAzure Kinectを使う案件で、普段の開発をMacでやりたかったので、まず最初にレコーディングと再生の環境を整えました。
やったことは以下です。
- Azure Kinectのカラー画像とBody Trackingのデータをそれぞれファイルに保存
- 簡単なアバターをつくってBody Trackingデータで動かす
- 動画と同期して表示
- (おまけ)動画と3Dの位置合わせ
#TouchDesigner で #AzureKinect のBody Trackingデータを記録して再生してみたhttps://t.co/jspREYYDEE pic.twitter.com/evEYbTlJ9R
— 岩谷成晃 (@nariakiiwatani) August 18, 2020
レコーディング
こんな感じです。(スクショ)
CHOPの記録をどうやろうかいろいろ試行錯誤しましたが、今回はこの形に落ち着きました。
Trail CHOPの前にNull CHOP(CookType: Selective)を置いてるのに同フレームのデータが複数回記録される挙動がクリアできなかったので、レコーディング後にDATに変換して、Sort DATで重複を削除しました。
注意することとしては、Chop to DATはCPUを食うので、レコーディング中は切っておくと良いと思います。
今回はChop to DATのCHOPパラメータ欄に'trail1' if op('null3')[0] == 0 else ''と書いておきました。
読み込みと整形
File Out DATから書き出されたdatファイルは、TDのウィンドウにD&DするとTable DATとして読み込まれます。

-
Dat to CHOPでCHOPに変換 -
Select CHOPで不要なデータ(frame, timestamp, p1/id)を削除 -
Lookup CHOPで1フレームを切り出し(切り出す位置は動画と同期するためin CHOPで外から指定) -
Shuffle CHOPでjoint毎に1サンプルのデータになるよう整形(後にインスタンシングすることを意識) -
Rename CHOPでわかりやすい名前をつける(今回はt[xyz] r[xyz])
これで、外から指定した時刻の姿勢が取り出せました。
整形したデータは以下の形をしています。
- 32サンプル(Azure Kinectから取り出したジョイント数)
- 6チャンネル(位置[xyz] 回転[xyz])
アバターをつくる
前回とほぼ同じです。
前回は元データがQuaternionだったのでEulerへの変換が必要でしたが今回は元からEulerなので単純にGeometry COMPに突っ込めばOKです。
画像内左上にあるmotion_datというコンテナにはさっきのdat読み込み部分が入っています。

動画と同期
motion_datに0〜1の数を突っ込めば、その位置のモーションデータが取り出せる作りにしたので、Movie File In TOPをInfo CHOPでみて、index_fractionの値を入れてやればOKです。
ちなみにスクショ内でTOPの名前がTDMovieOut_0になってますが、これはloadしたファイル名であって、オペレーターはちゃんとMovie File In TOPです。

ちなみにこの方法で同期が取れるのは
- 動画とモーションの記録を同時に開始/終了した
- モーションデータが途切れていない
という条件が満たされているからです。
今回のようにテスト用に作るものであればこれで良いんですが、ちゃんとしなきゃいけない場面ではちゃんとしましょう。
位置合わせ
Azure Kinectのスペックシートから値を拾ってCamera COMPの姿勢に反映させたらぴったり合いました。簡単ですね。
カラーカメラの水平FOVは90 => https://docs.microsoft.com/ja-jp/azure/kinect-dk/hardware-specification
デプスカメラはカラーカメラ比で6度傾いている(NFOVの場合) => https://docs.microsoft.com/ja-jp/azure/kinect-dk/coordinate-systems
最後に
Windowsで開発を続けるとしての話ですが、Kinect Recorderから書き出したmkvを再生できるようになると良いですね。
https://forum.derivative.ca/t/support-for-mkv-matroska-multiple-video-tracks-such-as-color-depth-metadata-etc/121578

