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

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

Blob Track TOP の物体追跡機能を示す図

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

概要 📖 – リアルタイム ブロブトラッキング

Blob Track TOPは、TOP 画像内の動くブロブ(連結領域)をリアルタイムに検出・追跡し、座標・サイズ・ID を Info DAT に出力する TOPです。出力テクスチャには検出されたブロブの矩形が描画され、Info DAT 経由で各ブロブの位置・面積・ID をスクリプトから参照できます。

主な用途 🎯

  • カメラ入力からの動体検出・物体追跡(リアルタイムでのブロブ抽出と ID 付与)
  • インタラクティブインスタレーションの入力ソース(来場者の位置を追跡してビジュアルを反応させる)
  • 赤外線カメラを使った擬似マルチタッチ検出(IR タッチテーブル等)
  • 動作解析・身体トラッキング(ダンス・スポーツ動作の重心追跡)
  • シーン内オブジェクトの自動カウント(人数・車両数等の集計)

データフロー 🔄

入力: TOP テクスチャ(前処理済みグレースケール画像)

ブロブ検出・ID 追跡・サイズ計測

出力: 元 TOP に検出矩形を描画したテクスチャ + Info DAT に各ブロブの座標・面積・ID テーブル

Tips

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

まる。
まる。

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


パラメータ解説 ⚙️

Blob Track Page 📋

Reset .reset ♻️

トラッキングデータと学習済み背景データのリセット:

  • Reset: オンの間、すべてのトラッキングデータと学習済み背景データをリセットし続ける(トグル)
  • Reset Pulse: 瞬時にトラッキングデータと学習済み背景データをリセットする(パルス)

Mono Source .monosource 🎚️

ブロブ検出に使う単一チャンネルの指定

項目 内部名 説明
Luminance .luminance RGB の輝度(標準的なグレースケール変換)を解析対象にする
Red .red R チャンネルのみを解析対象にする
Green .green G チャンネルのみを解析対象にする
Blue .blue B チャンネルのみを解析対象にする
Alpha .alpha アルファチャンネルを解析対象にする(IR カメラの輝度マスク等で有用)
RGB Average .rgbaverage R・G・B の単純平均を解析対象にする
RGBA Average .average R・G・B・A 全チャンネルの平均を解析対象にする

Draw Blob Bounds .drawblobs 🔲

検出ブロブの矩形描画のオン/オフ:

  • Draw Blob Bounds: オンの場合、検出された各ブロブを囲む矩形を出力テクスチャに重ねて描画する(デバッグ表示・可視化に便利)

Blob Bound Color .blobcolor 🎨

Draw Blob Bounds がオンのときに描画される矩形の色 (RGB):

  • Red (blobcolorr): 矩形描画色の R 成分 (0.0–1.0)
  • Green (blobcolorg): 矩形描画色の G 成分 (0.0–1.0)
  • Blue (blobcolorb): 矩形描画色の B 成分 (0.0–1.0)

Threshold .threshold 📏

背景差分テクスチャを二値化するしきい値:

  • Threshold: 背景差分テクスチャを二値化する際のしきい値。背景テクスチャと入力テクスチャの差分がこの値を超えるピクセルがブロブ候補になる

Download Type .downloadtype ⬇️

GPU からのデータダウンロード方式

項目 内部名 説明
Immediate (Slow) .immediate 現在フレームの出力を即時取得。レンダリングをストールさせるため遅い
Next Frame (Fast) .delayed 前フレームの出力を遅延取得。GPU を待たせず高速。1 フレーム分のレイテンシが許容できる用途向け

※ 注意: Next Frame (Fast) は 1 フレーム遅れのデータを返します。リアルタイム性が厳密に必要な用途(高速インタラクション等)では Immediate を選ぶか、後段で 1 フレームのオフセットを許容できる設計にしてください。

引用元: 公式 docs


Constraints Page 📋

Blob Size .blobsize 📐

追跡対象とするブロブのサイズ範囲:

  • Minimum Blob Size (minblobsize): この値より小さいブロブは追跡しない(ノイズ点を除外するのに使う)
  • Maximum Blob Size (maxblobsize): この値より大きいブロブは追跡しない(背景全体が拾われる事故を防ぐ)

Move Distance .maxmovedistance 🎯

ID 同一性を維持できる 1 フレームあたりの最大移動量:

  • Maximum Move Distance: ブロブが 1 フレームで移動可能な最大距離。これを超える移動量は別のブロブとして扱われ新しい ID が割り振られる。高速に動く対象を追跡する場合は大きめに設定する

Delete Nearby Blobs .deletenearby 🧹

近接する重複ブロブの自動削除:

  • Delete Nearby Blobs (deletenearby): オンにすると、近すぎるブロブの一方を削除する(追跡手法によって発生する重複検出への対策)
  • Minimum Distance (deletedist): 削除判定の距離しきい値(ピクセル単位)。この距離以内にあるブロブのうち小さい方が削除される
  • Delete Area Tolerance (deletenearbytol): 面積差トレランス。1 のとき面積差を無視し距離のみで削除判定。値が小さくなるほど面積差が大きいブロブだけが削除対象になる

Delete Overlapping Blobs .deleteoverlap 🔀

重なり合うブロブの自動削除:

  • Delete Overlapping Blobs (deleteoverlap): オンにすると、重なり合うブロブを削除する
  • Delete Overlap Tolerance (deleteoverlaptol): 重なりトレランス。1 のとき完全に重なったブロブのみ削除。値が小さくなるほど少しの重なりでも削除対象になる

Revival Page 📋

Revive Blobs .reviveblobs ♻️

一時的にロストしたブロブを同じ ID で復活させる条件:

  • Revive Blobs (reviveblobs): オンの場合、ロストしたブロブを以下の条件を全て満たすときに同じ ID で復活させる
  • Revive Time (revivetime): ロストから復活までの猶予時間(秒)。これを超えてロスト状態が続いたブロブは expired 扱いとなり復活対象外になる
  • Revive Area Difference (revivearea): 新ブロブとロストブロブの面積差しきい値。差が大きすぎると復活対象とみなさない
  • Revive Distance (revivedistance): 新ブロブとロストブロブの距離しきい値。離れすぎていれば復活対象とみなさない

Info DAT Inclusion .includelost 📊

Info DAT に含めるブロブの状態フラグ:

  • Include Lost Blobs in Table (includelost): オンにすると、ロスト状態(復活可能性あり)のブロブも Blob Track TOP の Info DAT に含めて出力する
  • Include Expired Blobs in Table (includeexpired): オンにすると、expired 状態(復活見込みなし)のブロブも Info DAT に含めて出力する
  • Expired Time (expiredtime): expired 後に Info DAT に残しておく秒数。クリーンアップ前の最終参照に使う

Common Page 🔧

Common Page (placeholder) .common_page_placeholder 🔧

TOP 共通の出力解像度・アスペクト・ピクセルフォーマット等の設定(canonical sync で上書きされる placeholder):

  • Common Page: TOP 共通の設定群。詳細は style/common-pages/TOP.json を参照

実践アイデア 💡

Example 1: カメラ入力からの来場者カウント 📷

Video Device In TOP → Threshold TOP → Blob Track TOP → Info DAT → CHOP Execute DAT

Webcam の入力をしきい値処理して人物シルエットを抽出し、Blob Track TOP で各人物をブロブとして検出。Info DAT の行数を CHOP Execute DAT 経由でカウントしてリアルタイム来場者数として表示する基本フロー。

  1. Video Device In TOP でカメラ入力を取得
  2. Threshold TOP で背景と人物を分離(しきい値は環境光に合わせて調整)
  3. Blob Track TOP に渡し、Minimum Blob Size を人物サイズに合わせて設定
  4. Info DAT を Blob Track TOP に接続し、行数(=ブロブ数)を Constant CHOP に渡してテキスト表示

Example 2: 赤外線タッチテーブル 👆

IR Camera (Video Device In TOP) → Background TOP → Blur TOP → Threshold TOP → Blob Track TOP → Multi-touch Coords

赤外線カメラ + 背景差分 + ぼかし + 二値化を経て Blob Track TOP で複数の指先位置をブロブとして抽出し、各タッチ位置を UV 座標としてビジュアル制御に渡す擬似マルチタッチ実装。

  1. 赤外線カメラからの入力を Video Device In TOP で取り込み
  2. Background TOP で初期背景を学習し差分のみ抽出
  3. Blur TOP でノイズを減らし、Threshold TOP で二値化
  4. Blob Track TOP で各指先をブロブ検出し、Maximum Move Distance を指の移動速度に合わせて調整
  5. Info DAT の座標列を DAT to CHOP 経由でビジュアルアプリへ送信

Example 3: ダンサーの重心追跡 💃

Kinect TOP (Depth) → Threshold TOP → Blob Track TOP → CHOP Execute → Geometry Transform

Kinect の Depth テクスチャから人物範囲だけをしきい値で切り出し、Blob Track TOP で人物の中心座標を取得してジェネレートしたジオメトリの位置に反映するパフォーマンス用途。

  1. Kinect TOP の Depth 出力を取得
  2. Threshold TOP で人物範囲のみ二値化
  3. Blob Track TOP で人物中心をブロブとして抽出(Maximum Blob Size を背景丸ごとを拾わない値に)
  4. Info DAT 経由で取得した中心座標を Geometry COMP の位置パラメータに Export

関連オペレータ 🔗

類似機能OP 🔍

  • Optical Flow TOP — ピクセル単位の動きベクトルを算出(ブロブ単位の追跡とは粒度が異なる近接機能)

組み合わせ推奨OP 🔄

  • Threshold TOP — 前段で二値化してブロブ検出の精度を上げる
  • Blur TOP — ノイズ平滑化でブロブ分裂を抑制
  • Composite TOP — 元画像とブロブ矩形を重ねて可視化
  • Info DAT — 検出ブロブの座標・面積・ID テーブルを取得

前処理・後処理TOP 🎯


Info情報 📊

Blob Track TOP は Info DAT による検出ブロブの詳細データ取得に対応しています。

TOP固有情報 🖼️

  • resx: TOP の出力解像度 X (ピクセル単位)
  • resy: TOP の出力解像度 Y (ピクセル単位)
  • aspectx: アスペクト比 X
  • aspecty: アスペクト比 Y
  • depth: 3D テクスチャ / テクスチャ配列の深度 (2D テクスチャでは 1)
  • gpu_memory_used: TOP が消費している GPU メモリ量 (MB 単位)

汎用オペレータ情報 🔄

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

Blob Track TOP固有のInfo DAT 📊

  • id: 各ブロブに割り当てられた追跡 ID(同一性が維持される限り同じ値)
  • u / v: ブロブ中心の正規化 UV 座標 (0.0–1.0)
  • size / area: ブロブの面積(ピクセル数換算)
  • min_u / max_u / min_v / max_v: ブロブを囲むバウンディングボックスの UV 範囲
  • state: ブロブの状態フラグ(active / lost / expired)。Include Lost/Expired Blobs オン時に出力

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

よくある問題と解決策 🔧

❌ Problem: ブロブが全く検出されない / 検出数が少なすぎる
✅ Solution:

  • Threshold 値が高すぎる可能性。入力テクスチャの輝度レンジに合わせて下げる
  • Mono Source が入力に対して妥当なチャンネルか確認(IR カメラなら Alpha / Luminance)
  • Minimum Blob Size が大きすぎないか確認。小さい対象は値を下げる

❌ Problem: ブロブ ID が頻繁に切り替わって追跡が不安定
✅ Solution:

  • Maximum Move Distance を増やし、1 フレームあたりの許容移動量を広げる
  • 前段に Blur TOP / Background TOP を入れてノイズや背景ゆらぎを減らす
  • Revive Blobs を有効化し短時間のロスト後に同 ID で復活させる

❌ Problem: 1 つの対象に対して重複ブロブが大量に発生する
✅ Solution:

  • Delete Nearby Blobs を有効化し近接ブロブを統合
  • Delete Overlapping Blobs を有効化し重なるブロブを除去
  • 前段に Blur TOP を入れて細かい分裂を抑制

❌ Problem: パフォーマンスが重い / フレームレートが落ちる
✅ Solution:

  • Common Page の Output Resolution を Half / Quarter に下げて処理ピクセル数を削減
  • Download Type を Next Frame (Fast) に変更して GPU ストールを回避
  • 前段で関心領域 (ROI) だけを Crop TOP で切り出してから渡す

参考資料 📚

その他 🔗

公式リソース 📖

この記事は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をコピーしました