
概要 📖 – Kinect Azure ボディトラッキング
Kinect Azure CHOPは、Kinect Azure センサーで取得したスケルトン情報をチャンネルとして出力する CHOPです。Kinect Azure TOP から取り込んだ画像を入力に、最大プレイヤー数ぶんのジョイント位置・回転・信頼度を生成します。
主な用途 🎯
- プレイヤースケルトンのジョイント位置・回転をリアルタイム取得
- ワールド空間およびカラー画像・深度画像 UV 座標でのスケルトン座標出力
- ボーン回転(相対・絶対)とボーン長によるスケルトン構造の数値化
- ジョイント信頼度(Bone Confidence)に基づく追従品質判定
- IMU センサー値(温度・加速度・回転)の取得とジェスチャー駆動制御
データフロー 🔄
入力: Kinect Azure TOP(カメラ取り込み)
↓
ボディトラッキング処理(プレイヤー検出 / ジョイント推定)
↓
チャンネル展開(位置・回転・信頼度 / IMU)
↓
出力: スケルトンチャンネル群
初心者の方は、以下日本語書籍も手元にあると安心です。

実際の案件事例まで踏み込んで紹介されていて、効率よくスキルアップするなら必携の二冊です!
パラメータ解説 ⚙️
Kinect Azure Page 📋
デバイス接続 🎛️
Active .active ✅
– ボディトラッキングデータの取り込みを有効/無効にするトグル
– Kinect Azure TOP 側も active でないとデータは届きません
Kinect Azure TOP .top 📷
– カメラに接続している Kinect Azure TOP のパス
– この TOP からカラー / デプスのストリームが取り込まれます
Max Players .maxplayers 👥
– 同時にトラッキングするプレイヤースケルトンの最大数
– 検出数が足りない場合、余った分のチャンネルは 0 で埋められます
ボーン回転・長さ 🦴
Relative Bone Rotations .relbonerotations 🔄
– 各ボーンの親ボーンに対する相対回転を XYZ 軸まわり degree で出力
– FK 制御や階層スケルトン駆動に向いた回転表現
Absolute Bone Rotations .absbonerotations 🌐
– 各ボーンのワールド基準の絶対回転を XYZ 軸まわり degree で出力
– IK ターゲット駆動やワールド空間整合の用途に有用
Bone Lengths .bonelengths 📏
– 各ボーンの長さ(親ジョイントからの距離)チャンネルを出力
– ジョイント階層は Kinect Azure SDK のドキュメントを参照
座標空間オプション 🗺️
World Space Positions .worldspace 🌍
– 各ボーンのワールド空間座標(メートル単位)を出力
– 3D シーンへのマッピングや空間距離計算に使用
Color Image Positions .colorspace 🎨
– カラー画像の UV 座標系でのスケルトン位置を出力
– 映像合成やオーバーレイ表示に使用
Depth Image Positions .depthspace 🌫️
– 深度画像の UV 座標系でのスケルトン位置を出力
– デプスベースの視覚効果やマスキングに使用
Aspect Correct UVs .aspectcorrectuv 🔲
– 画像空間位置をカメラのアスペクト比に合わせてスケール
– 縦横比の歪み補正用
Mirror Image V Positions .flipimagev ↕️
– 画像空間位置の v 座標を反転(0,0 を左上にする)
– バージョン 2020.44130 以前のデフォルト挙動と同一
Mirror U Positions .flipskelu ↔️
– Color / Depth Image Positions の U 座標を鏡反転
– 元画像をミラー表示している場合の整合用
信頼度・IMU 📡
Bone Confidence .confidence 🎯
– 各ジョイントの位置・回転の信頼度を 0〜3 の整数で出力
– 値の意味は以下の通りです:
- 0: 範囲外(カメラから遠すぎる)
- 1: 見えていない(隣接ジョイントから推定)
- 2: 中程度の信頼度(現状の最高値)
- 3: 高信頼度(将来予約)
IMU Channels .imuchans 🌡️
– カメラ内蔵 IMU センサーの温度・加速度・回転データを出力
– 装着型用途やジェスチャー検出の補助情報として活用
Common Page 🔧
Time Slice .timeslice ⏱️
Time Slice モードの強制設定:
- オン: チャンネルを「タイムスライス」モードに強制
- タイムスライス: 前回のクックフレームから現在のクックフレームまでの時間
Scope .scope 🎯
影響を受けるチャンネルの絞り込み:
- Scope 文字列: 影響を受けるチャンネルを指定する文字列
- パターンマッチング:
*や[1-10]等のパターンが使用可能
Sample Rate Match .srselect ⚡
複数の入力 CHOP のサンプルレートが異なる場合の処理方法
| 項目 | 内部名 | 説明 |
|---|---|---|
| Resample At First Input’s Rate | .first |
最初の入力のレートで他をリサンプル |
| Resample At Maximum Rate | .max |
最高サンプルレートでリサンプル |
| Resample At Minimum Rate | .min |
最低サンプルレートでリサンプル |
| Error If Rates Differ | .err |
レート不一致でエラー |
Export Method .exportmethod 📤
CHOP チャンネルをパラメータに接続する方法
| 項目 | 内部名 | 説明 |
|---|---|---|
| DAT Table by Index | .datindex |
DAT テーブルのインデックスでチャンネルとパラメータを対応付け |
| DAT Table by Name | .datname |
DAT テーブルの行名でチャンネルとパラメータを対応付け |
| Channel Name is Path:Parameter | .autoname |
チャンネル名を `path:parameter` 形式で記述し直接対応付け |
Export Root .autoexportroot 🌳
Channel Name is Path:Parameter モード時のパス基点:
- Export Root パス:
autonameモードでチャンネル名のパス部分を相対化する基点 OP のパス
Export Table .exporttable 📋
DAT Table エクスポート方式での参照 DAT:
- Export Table DAT:
datindex/datnameモード時に参照する DAT のパス
Rename from .commonrenamefrom 🔤
リネーム対象チャンネルのパターン:
- Rename from パターン: リネーム対象とするチャンネル名のパターンマッチング文字列
Rename to .commonrenameto 🔁
リネーム後の置換パターン:
- Rename to パターン: Rename from にマッチしたチャンネルの新しい名前パターン (デフォルトはリネームなし)
実践アイデア 💡
Example 1: 全身モーションキャプチャによる 3D アバター駆動 🕺
Kinect Azure TOP → Kinect Azure CHOP (World Space + Relative Bone Rotations) → Constraint COMP → Skeleton Geo
Kinect Azure TOPでカメラ映像を取り込み- Kinect Azure CHOP の
topパラメータに TOP のパスを指定 worldspaceとrelbonerotationsを有効化- ジョイントチャンネルを Constraint COMP 経由で 3D アバターのリグに流し込みリアルタイム駆動
Example 2: プレイヤー位置に応じたインタラクティブ照明 💡
Kinect Azure CHOP (World Space, Max Players=2) → Math CHOP (Range mapping) → Light Intensity
maxplayersを 2 に設定して 2 人ぶんを取得worldspaceでメートル単位のジョイント座標を出力- Math CHOP で X / Z 座標を 0〜1 に正規化
- ステージ上の照明強度・色温度にマッピング
Example 3: 信頼度に基づくジェスチャー判定 🎯
Kinect Azure CHOP (Bone Confidence + World Space) → Logic CHOP → Trigger CHOP
confidenceを有効化し各ジョイントの信頼度チャンネルを出力- Logic CHOP で confidence ≥ 2 のジョイントのみ採用
- ジェスチャー条件(手の高さ等)が成立した瞬間に Trigger CHOP でイベント発火
関連オペレータ 🔗
類似機能OP 🔍
- Kinect CHOP — 旧世代 Kinect v2 用のスケルトン取得 CHOP
- Leap Motion CHOP — 手指トラッキングに特化したセンサー入力 CHOP
組み合わせ推奨OP 🔄
- Math CHOP — ジョイント座標を演出用レンジへ正規化
- Filter CHOP — ジッタの多いジョイント値を平滑化
- Logic CHOP — 信頼度チャンネルの閾値判定
- Analyze CHOP — ジョイント値の統計(平均・最大・ピーク)抽出
- Trigger CHOP — ジェスチャー成立時のエンベロープ起動
前処理・後処理CHOP 🎯
Info CHOP情報 📊
Kinect Azure CHOPは Info CHOP による詳細情報取得に対応しています。
CHOP固有情報 🎚️
start: CHOPインターバルの開始(サンプル単位)length: CHOPのサンプル数sample_rate: フレーム毎秒のサンプルレートnum_channels: CHOPのチャンネル数time_slice: タイムスライス有効時は1、無効時は0export_sernum: Export接続の更新回数
汎用オペレータ情報 🔄
total_cooks: プロセス開始からのクック回数cook_time: 最後のクック時間(ミリ秒)cook_frame: 最後にクックされたフレーム番号warnings: 警告数errors: エラー数
トラブルシューティング ⚠️
よくある問題と解決策 🔧
❌ Problem: チャンネルがすべて 0 になる
✅ Solution:
activeがオンになっているか確認topパラメータが対応するKinect Azure TOPを正しく指しているか確認- Kinect Azure TOP 側も active で、デバイスが認識されているかをデバイスマネージャで確認
❌ Problem: ジョイント座標がジッタで暴れる
✅ Solution:
- 後段に Filter CHOP(Boxcar / Gaussian)を入れて平滑化
confidenceが低いジョイントは Logic CHOP で除外- 光学条件(強い逆光・赤外干渉)を改善し物理的にトラッキング精度を上げる
❌ Problem: 画像 UV 座標が反転している / 縦横比がおかしい
✅ Solution:
flipimagevをオン/オフ切替して原点位置(左上 / 左下)を合わせるflipskeluで U 座標のミラー反転状態を映像と一致させるaspectcorrectuvをオンにしてカメラのアスペクト比に合わせてスケールする
❌ Problem: プレイヤーが増えても余分なチャンネルが 0 のまま
✅ Solution:
maxplayersの上限まで自動でジョイントが埋まる仕様、検出数が上限未満なら余りは 0 で正常- 実際の検出数は Info CHOP や
confidence経由で間接的に判定 - 視野角・距離(カメラからの距離が遠すぎないか)を見直す
参考資料 📚
その他 🔗
- TouchDesigner Wiki — CHOP 概要
- TouchDesigner Wiki — Category:CHOPs
- TouchDesigner Wiki ホーム
- TouchDesigner 公式 Forum
- Facebook — TouchDesigner Help Group

