
概要 📖 – AI ボディトラッキングと骨格キーポイント取得
Body Track CHOPは、TOP に入った映像から AI モデルで人体を検出し、骨格キーポイントの位置・信頼度・回転値をチャンネル化する CHOPです。NVIDIA Maxine SDK を用いた人体検出を行い、UV または XYZ 座標でのキーポイント出力、最大 8 人までのマルチパーソントラッキング、フレームレベルでの ID 永続化に対応します。
主な用途 🎯
- NVIDIA Maxine SDK を用いた AI ベースの人体検出と骨格トラッキング
- キーポイント (関節) の UV / XYZ 座標取得によるリアルタイム骨格データ抽出
- バウンディングボックスと信頼度値による複数人トラッキング
- ダンス・パフォーマンスのモーションキャプチャ用途でのインタラクティブ演出
- ジェスチャー認識・姿勢推定を利用した体験型インスタレーション制作
データフロー 🔄
入力: TOP の画像ストリーム
↓
AI モデル (NVIDIA Maxine) による人体検出
↓
キーポイント抽出と回転計算
↓
出力: バウンディングボックス・キーポイント座標・信頼度・回転値のチャンネル
初心者の方は、以下日本語書籍も手元にあると安心です。

実際の案件事例まで踏み込んで紹介されていて、効率よくスキルアップするなら必携の二冊です!
パラメータ解説 ⚙️
BodyTrack Page 📋
基本設定 🎛️
Body Track CHOP の有効化と AI モデル・入力ソース指定
Active .active ✅
– ボディトラッキング機能を有効化するトグル
– オフのときは AI 推論が走らずチャンネル出力は更新されない
Model Folder .modelfolder 📁
– 人体検出に使用する AI モデルファイルの格納フォルダパス
– デフォルトは Config/Models フォルダを参照
TOP .top 🖼️
– ボディトラッキングの入力画像となる TOP オペレータのパス
– Video Device In TOP / Movie File In TOP / NDI In TOP 等を指定
High Performance .highperformance ⚡
– 品質を犠牲にしてパフォーマンスを優先するモード
– Keypoints が有効なときのみ利用可能
出力チャンネル制御 📤
出力するチャンネル種別を切り替えるトグル群
Bounding Boxes .bbox 🟦
– 検出した人体のバウンディングボックスをチャンネル出力
– 中心位置の u / v、ボックスの width / height を入力画像左下原点で出力
Bounding Box Confidence .bboxconfidence 📊
– AI モデルが人体を検出した確信度を 0–1 で出力するチャンネル
– 値が高いほど検出の信頼性が高い
Keypoints .keypoints 🦴
– 骨格キーポイントの位置をチャンネル出力
– Body 3D の設定により UV 座標または XYZ 座標を切り替え
Keypoints Confidence .keypointsconfidence 📈
– 各キーポイントの検出確信度を 0–1 で出力するチャンネル
– キーポイントごとに信頼度値を持つ
Rotations .rotations 🔄
– 各キーポイントの rx / ry / rz 回転値を出力するチャンネル
– (0,0,0) はカメラ正面方向、値域は ±180 度
座標系・ビュー設定 📐
出力座標系の次元・カメラ視野・反転制御
Body 3D .body3d 🧊
– キーポイント有効時に UV ではなく XYZ 座標で出力
– 3D 空間での骨格再構築・3D ビジュアライズに利用
Field of View (Horz) .fov 👁️
– Body 3D 有効時、入力画像を撮影したカメラの水平視野角
– XYZ 座標の奥行き計算に使用
Aspect Correct UVs .aspectcorrectuv 📏
– u / v 座標を入力画像のアスペクト比に合わせてリスケール
– UV を 3D 座標として扱う場合に有用
Mirror U Positions .flipskelu 🪞
– u 座標を反転 (1.0 → 0.0、0.0 → 1.0)
– 鏡像表示・前面カメラ用途で使用
マルチパーソン追跡 👥
複数人トラッキングと ID 永続化の制御
People Tracking .peopletracking 👤
– 入力画像内の複数人を追跡するモード
– 各人物に永続 ID が割り当てられ Bounding Boxes トグル経由で取得可能
Max Bodies .maxbodies 🔢
– Maxine SDK が同時追跡する最大人数の上限値
– 上限を超えた新規ターゲットは破棄される
– CHOP の出力チャンネル数には影響しない
– パラメータ自体に上限はないが、現行 SDK は最大 8 人まで追跡可
Shadow Tracking Age .shadowtrackingage 👻
– 一度追跡した人体が検出されなくなった後、追跡を破棄するまでのフレーム数
– デフォルトは 90 フレーム
Probation Age .probationage ⏳
– 検出された人体が「正式な追跡対象」と認められるまでの猶予フレーム数
– この期間を過ぎてから ID が割り当てられる
– 数フレームだけ検出される偽陽性の除去に役立つ
– デフォルトは 10 フレーム
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: リアルタイム骨格ビジュアライズ 🦴
Video Device In TOP → Body Track CHOP (Keypoints) → Geometry COMP → 3D 描画
- Video Device In TOP でカメラ映像を取得
- Body Track CHOP の TOP パラメータに Video Device In TOP を指定
- Keypoints と Body 3D を有効化して XYZ 座標を取得
- Keypoint チャンネルを Geometry COMP の Instancing に接続して骨格を 3D 描画
Example 2: ダンスパフォーマンスのモーション駆動演出 💃
Movie File In TOP → Body Track CHOP (Bounding Boxes + Keypoints) → Math CHOP → Particle System
- Movie File In TOP でダンス映像を入力
- Body Track CHOP で人体の中心位置とキーポイント座標を取得
- Math CHOP で座標を正規化しパーティクルの放出位置に変換
- ダンサーの動きに連動したリアクティブな映像演出を構築
Example 3: 複数人参加型インスタレーション 👥
NDI In TOP → Body Track CHOP (People Tracking + Max Bodies=8) → Select CHOP → ID別音響制御
- NDI In TOP で展示空間のカメラ映像を受信
- People Tracking を有効化、Max Bodies を 8 に設定
- Select CHOP で各 ID の Bounding Box を分離
- 各参加者の位置に応じて空間音響を制御
関連オペレータ 🔗
類似機能OP 🔍
- Kinect CHOP — Kinect デバイスを用いた骨格トラッキング
- Kinect Azure CHOP — Azure Kinect の骨格データ取得
組み合わせ推奨OP 🔄
- Math CHOP — キーポイント座標を後段で正規化・スケーリング
- Filter CHOP — AI 推論ノイズの平滑化
- Lag CHOP — キーポイントの動きにスムーズな遅延補間
- Select CHOP — 特定 ID・特定キーポイントだけを抽出
- Trail CHOP — キーポイント位置の時間履歴を可視化
前処理・後処理CHOP 🎯
Info CHOP情報 📊
Body Track 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: 人体が検出されない・トラッキングが不安定
✅ Solution:
Activeがオンか確認、TOPパラメータに正しい入力 TOP を指定しているか確認Model Folderパスが正しい AI モデル格納先を指しているか確認- 入力画像の解像度・明るさを確認、被写体が画面内に収まっているかチェック
❌ Problem: キーポイント出力がガクつく・ノイズが多い
✅ Solution:
- 後段に Filter CHOP を入れて平滑化
- Lag CHOP で時間方向の補間を追加
Probation Ageを増やして偽陽性検出を抑制
❌ Problem: パフォーマンスが重い・フレームレートが低下する
✅ Solution:
High Performanceをオンにして品質を犠牲に速度優先- 不要な出力チャンネル(Rotations / Keypoints Confidence 等)をオフにして計算量削減
Max Bodiesを実用範囲に絞り、追跡対象人数を制限
❌ Problem: 複数人トラッキングで ID が頻繁に切り替わる
✅ Solution:
Shadow Tracking Ageを増やして一時的な検出失敗での ID リセットを防ぐProbation Ageを調整し、安定的な検出のみに ID を付与- カメラ位置を見直し、被写体の重なり・遮蔽を減らす
参考資料 📚
その他 🔗
- TouchDesigner Wiki — CHOP 概要
- TouchDesigner Wiki — Category:CHOPs
- TouchDesigner Wiki ホーム
- TouchDesigner 公式 Forum
- Facebook — TouchDesigner Help Group

