みんなー!カメラのインタラクティブもの作るとき、まず最初に動作テスト用データのレコーディングしてるー?
ちょっとプログラム修正するたびに立ち上がって手足パタパタしてないよねー?
っていいつつ僕も普段やりがちなんですが、今回は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