6
8

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 3 years have passed since last update.

TouchDesignerでAzure KinectのBody TrackingデータをRecordして再生

Last updated at Posted at 2020-08-18

みんなー!カメラのインタラクティブもの作るとき、まず最初に動作テスト用データのレコーディングしてるー?
ちょっとプログラム修正するたびに立ち上がって手足パタパタしてないよねー?

っていいつつ僕も普段やりがちなんですが、今回はTouchDesignerでAzure Kinectを使う案件で、普段の開発をMacでやりたかったので、まず最初にレコーディングと再生の環境を整えました。

やったことは以下です。

  • Azure Kinectのカラー画像とBody Trackingのデータをそれぞれファイルに保存
  • 簡単なアバターをつくってBody Trackingデータで動かす
  • 動画と同期して表示
  • (おまけ)動画と3Dの位置合わせ

レコーディング

こんな感じです。(スクショ)
CHOPの記録をどうやろうかいろいろ試行錯誤しましたが、今回はこの形に落ち着きました。
Trail CHOPの前にNull CHOP(CookType: Selective)を置いてるのに同フレームのデータが複数回記録される挙動がクリアできなかったので、レコーディング後にDATに変換して、Sort DATで重複を削除しました。

capture.png

スクリーンショット 2020-08-18 16.08.46.png

注意することとしては、Chop to DATはCPUを食うので、レコーディング中は切っておくと良いと思います。
今回はChop to DATのCHOPパラメータ欄に'trail1' if op('null3')[0] == 0 else ''と書いておきました。

読み込みと整形

File Out DATから書き出されたdatファイルは、TDのウィンドウにD&DするとTable DATとして読み込まれます。
スクリーンショット 2020-08-18 16.20.17.png

  • 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読み込み部分が入っています。
スクリーンショット 2020-08-18 16.33.37.png

動画と同期

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

ちなみにこの方法で同期が取れるのは

  • 動画とモーションの記録を同時に開始/終了した
  • モーションデータが途切れていない

という条件が満たされているからです。
今回のようにテスト用に作るものであればこれで良いんですが、ちゃんとしなきゃいけない場面ではちゃんとしましょう。

位置合わせ

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

6
8
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
6
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?