Blob Track CHOP 完全ガイド | 使い方・パラメータ解説【TouchDesigner】

※当サイトにはプロモーションリンクが含まれます。

Blob Track CHOP のリアルタイム blob 追跡機能を示す図

記事更新の通知はXでアナウンス٩(๑❛ᴗ❛๑)
@maru6o6をフォロー

概要 📖 – ポイント群からのリアルタイム blob 検出と追跡

Blob Track CHOPは、入力されたポイント群を距離ベースで blob (まとまり) に集約し、フレーム間で同一性を保ったまま重心・速度を追跡する CHOPです。Hokuyo / Leuze ROD4 のような連続スキャン LiDAR、Kinect 等の深度センサーから得たポイント群を入力とし、Search Mode・Max Point Distance・Area of Interest・Movement Prediction を組み合わせてリアルタイムに人物 / 手 / 物体を 1 オペレータで追跡できます。

主な用途 🎯

  • LiDAR / ToF / 深度センサーから得たポイント群を blob (まとまり) に集約してリアルタイム追跡
  • Hokuyo CHOP / Leuze ROD4 CHOP の連続ポイント出力を Consecutive Points モードで高速 blob 化
  • Area of Interest (Rectangle / Circle) でスキャン領域を限定し、関係ない外周ノイズを除外
  • 各 blob の Centroid (重心) と Velocity (速度) を出力し、人物・手・物体のインタラクティブ追跡に利用
  • Kalman Filter / Simple Forward Predict による移動予測でフレーム間 blob 同一性を維持

データフロー 🔄

入力: ポイント群 CHOP (Hokuyo / Leuze ROD4 / Kinect 等のセンサー出力)

Active 判定

Search Mode (All / Consecutive Points) で点同士を比較

Max Point Distance で blob 化

Area of Interest でフィルタ

Blob Init Time / Min Points per Blob で偽陽性除去

Movement Prediction で移動予測

出力: 各 blob の Centroid / Velocity チャンネル

Tips

初心者の方は、以下日本語書籍も手元にあると安心です。

まる。
まる。

実際の案件事例まで踏み込んで紹介されていて、効率よくスキルアップするなら必携の二冊です!


パラメータ解説 ⚙️

Tracker Page 🎯

基本パラメータ ⚙️

Active .active
– オン: 入力からポイント情報を受け取って blob 追跡を実行
– オフ: 処理を停止するが、既存 blob は出力に保持される

Search Mode .searchmode 🔎

ポイント間の比較方法を決定するメニューパラメータ

項目 内部名 説明
All .all 全ポイントを互いに比較して blob を検出(低速だが、ポイントがランダムに並ぶ入力でも頑健)
Consecutive Points .consecutive サンプル順で隣接するポイント同士のみ比較(高速、Hokuyo CHOP / Leuze ROD4 CHOP のように空間的に近いポイントが連続して並ぶ入力に最適)

Blob 検出パラメータ 📏

Max Blobs .maxblobs 🔢
– 同時追跡できる blob の最大数
– 上限を超えた場合は新規 blob が無視される

Max Point Distance in Blob .maxpointdistance 📐
– 2 つのポイントが同一 blob に属すると判定する距離の上限
– 値を大きくすると複数の物体が 1 つの blob に統合されるため、対象サイズに合わせて調整

Max Blob Movement .maxblobmovement 🏃
– 1 フレーム間で blob が同一とみなされる最大移動距離
– 高速移動する対象では値を大きく、ゆっくり動く対象では小さく設定

Area of Interest .areaofinterest 🗺️

blob を追跡する領域の限定方法を決定するメニューパラメータ

項目 内部名 説明
Off .off 領域制限なし、スキャン範囲全域で blob を追跡
Rectangle .rectangle 指定した矩形領域内のポイントのみで blob 追跡
Circle .circle 指定した円(または楕円)領域内のポイントのみで blob 追跡

領域形状パラメータ 📐

Center .center 🎯
– 関心領域 (Area of Interest) の中心座標 (centerx, centery)
– Area of Interest が Rectangle / Circle のときに有効

Size .size 📏
– 関心領域のサイズ (sizew, sizeh)
– Rectangle なら矩形の幅と高さ、Circle なら楕円の長径・短径

Rotate .rotate 🔄
– 関心領域を回転させる角度(度単位)

Allow Movement Outside Area .allowmovementoutside ↔️
– オン: 領域内で検出された blob が領域外に出ても追跡を継続
– オフ: 領域外に出た blob は追跡停止


Blobs Page 🫧

出力チャンネル制御 📤

Output Centroid .outputcentroid 📍
– オン: 各 blob の重心 (Centroid) 座標を出力チャンネルに含める
– インタラクティブ可視化や OSC 送信での主要な座標源

Output Velocity .outputvelocity 🏃
– オン: 各 blob の速度 (Velocity) を出力チャンネルに含める
– 移動方向ベースのジェスチャー判定や速度連動エフェクトに利用

偽陽性フィルタ 🛡️

Min Points per Blob .minblobpoints 🔢
– blob を構成するために必要な最小ポイント数
– センサーノイズによる微小 blob の偽検出を抑制

Blob Init Time (s) .blobinittime ⏱️
– blob が信頼できると判定されるまでの最小検出時間(秒)
– この時間に満たない検出は出力に含めない(偽陽性除去)

Lost Blob Timeout (s) .lostblobtimeout
– 一度ロストした blob を出力から削除するまでの猶予時間(秒)
– 短い遮蔽(手前の通行人等)で blob が消えないように調整

Blob Movement Prediction Type .predicttype 🔮

前フレーム blob の位置を予測してから現フレームとマッチさせる方式を決定するメニューパラメータ

項目 内部名 説明
Off .off 予測なし、前フレーム位置とそのままマッチング
Simple Forward Predict .simple 等速度を仮定して前フレームと同じ移動量を加算(軽量)
Kalman Filter Predict .kalman 等速度モデルの Kalman フィルタで予測(高速移動・遮蔽に頑健)

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: LiDAR による空間内の人物追跡 🚶

Hokuyo CHOP → Blob Track CHOP (Consecutive Points + Area of Interest = Rectangle) → Centroid → Geometry COMP
  1. Hokuyo CHOP で 2D LiDAR からポイントクラウド (角度 + 距離) を取得
  2. Blob Track CHOP の Search Mode を「Consecutive Points」に設定(Hokuyo は隣接ポイントが空間的に近い順で並ぶため最適)
  3. Area of Interest を「Rectangle」、Center / Size を会場の床面サイズに設定して外周ノイズを除外
  4. Output Centroid をオンにし、各 blob の Centroid (重心) を XYZ 座標として Geometry COMP に渡してリアルタイム可視化

Example 2: Kinect 深度カメラによる手の追跡 ✋

Kinect TOP → CHOP (depth points) → Blob Track CHOP (Min Points per Blob + Blob Init Time) → OSC Out CHOP
  1. Kinect TOP の深度画像を CHOP 化し、閾値以下の点のみ抽出
  2. Blob Track CHOP の Min Points per Blob を 30 程度に設定して指先サイズの誤検出を除外
  3. Blob Init Time (s) を 0.1 秒に設定し、瞬間的なノイズを偽陽性として弾く
  4. Output Centroid + Output Velocity をオンにし、手の重心と移動速度を OSC で外部アプリに送信

Example 3: Kalman Filter による高速移動体の安定追跡 ⚡

Sensor Points → Blob Track CHOP (Movement Prediction = Kalman) → Filter CHOP → ビジュアル
  1. 高速移動するボール / ロボット等の点群を入力
  2. Blob Track CHOP の Blob Movement Prediction Type を「Kalman Filter Predict」に設定
  3. Max Blob Movement を高速移動量に合わせ大きく設定(フレーム間ジャンプを許容)
  4. Lost Blob Timeout を 0.3 秒程度に設定し、瞬間的な遮蔽でも同一 blob として継続追跡

関連オペレータ 🔗

類似機能OP 🔍

  • Blob Track TOP — 画像ベースの blob 追跡(ポイント入力ではなく TOP の輝度マップから検出)
  • Hokuyo CHOP — Hokuyo LiDAR 専用の生ポイント取得 OP(Blob Track の上流入力源)

組み合わせ推奨OP 🔄

  • Filter CHOP — Centroid / Velocity チャンネルを後段で平滑化してジッターを除去
  • Math CHOP — Centroid 座標をスケーリング / オフセット補正して可視化空間に整合
  • Select CHOP — 特定 blob の Centroid / Velocity チャンネルだけを抜き出して下流に渡す
  • OSC Out CHOP — blob 座標を OSC で外部アプリ(Max/Ableton/Unity 等)に送信
  • Trail CHOP — blob の移動履歴を時系列バッファとして可視化

前処理・後処理CHOP 🎯


Info CHOP情報 📊

Blob Track CHOPは Info CHOP による詳細情報取得に対応しています。

CHOP固有情報 🎚️

  • start: CHOPインターバルの開始(サンプル単位)
  • length: CHOPのサンプル数
  • sample_rate: フレーム毎秒のサンプルレート
  • num_channels: CHOPのチャンネル数
  • time_slice: タイムスライス有効時は1、無効時は0
  • export_sernum: Export接続の更新回数

汎用オペレータ情報 🔄

  • total_cooks: プロセス開始からのクック回数
  • cook_time: 最後のクック時間(ミリ秒)
  • cook_frame: 最後にクックされたフレーム番号
  • warnings: 警告数
  • errors: エラー数

トラブルシューティング ⚠️

よくある問題と解決策 🔧

❌ Problem: blob がフレーム間で別物として認識されてしまう(ID が頻繁に変わる)
✅ Solution:

  • Max Blob Movement を実際の最大移動速度に合わせて大きく設定(小さすぎると同一 blob と認識されない)
  • Blob Movement Prediction Type を「Simple Forward Predict」または「Kalman Filter Predict」に切替して移動予測を有効化
  • 前段に Filter CHOP を入れて入力ポイントのジッターを抑制

❌ Problem: 近接した複数の物体が 1 つの blob として統合されてしまう
✅ Solution:

  • Max Point Distance in Blob を小さくして blob 化の閾値距離を絞る
  • Min Points per Blob を上げて、まばらな小 blob が大 blob に取り込まれないように調整
  • Area of Interest で対象領域を Rectangle / Circle で限定し、関係ない点群を除外

❌ Problem: ノイズによる偽の blob が頻発する
✅ Solution:

  • Min Points per Blob を上げて点数の少ない微小 blob を除外
  • Blob Init Time (s) を 0.1〜0.3 秒に設定し、瞬間的なノイズを偽陽性として弾く
  • 前段に Filter CHOP を入れてポイント座標を平滑化

❌ Problem: Hokuyo / Leuze ROD4 入力で処理が重い
✅ Solution:

  • Search Mode を「Consecutive Points」に切替(連続ポイント前提のセンサーでは All より遥かに高速)
  • Max Blobs を実用上の上限まで絞る(不要に大きい値はマッチング計算量を増やす)
  • Area of Interest で領域を限定し、走査対象点数を物理的に削減

参考資料 📚

その他 🔗

公式リソース 📖

この記事はLLMと共に内容を執筆、更新しています。
最新バージョンとの項目差異など、情報の不一致を見つけた心優しい方はXもしくはInsta、メールなどよりサイト管理者までご連絡ください😎


まる。

お仕事のご依頼はDM又はメールにて。
━━━━━━━━━━━━━━━━━
Python/Touchdesigner/M5Stackをこよなく愛すフルスタックエンジニア。
専門は生理心理学、趣味はヨガやサウナ、EMS電気風呂などヘルスケア全般。
脳波や筋電、心拍を中心とした生体情報のセンシング&インタラクティブアートづくりがライフワーク。

普段はワントゥーテンという会社で空間演出エンジニアをしています。
リファラル採用お繋ぎできますので、我こそはという尖った方は経歴と希望職種添えてDMください(エンジニア以外、営業職等もOK)。
ご飯行きましょう。

↓日常垢
Instagram:@malmal0v0

まる。をフォローする
その他の記事はこちら
Math Combine POP 完全ガイド | 使い方・パラメータ解説【TouchDesigner】
ZED Select TOP 完全ガイド | 使い方・パラメータ解説【TouchDesigner】
ZED POP 完全ガイド | 使い方・パラメータ解説【TouchDesigner】
Window COMP 完全ガイド | 使い方・パラメータ解説【TouchDesigner】
Widget COMP 完全ガイド | 使い方・パラメータ解説【TouchDesigner】

タイトルとURLをコピーしました