
概要 📖 – OAK ストリームからの選択取得
OAK Select CHOPは、OAK Device CHOP の depthai パイプラインから特定ストリームを選び CHOP データとして取り出す CHOPです。物体検出のアイテム数や IMU の高フレームレート出力を、TouchDesigner で扱いやすい一定形状の CHOP に整形します。
主な用途 🎯
- OAK Device CHOP が走らせる depthai パイプラインのストリーム取得
- 物体検出結果をフレーム毎に一定チャンネル数で受け取る整形
- IMU など高フレームレートストリームの最新サンプル抽出
- アイテム単位のデータをチャンネル列または時系列サンプルに変換
- コールバック DAT を介した OAK イベントの TouchDesigner 側ハンドリング
データフロー 🔄
入力: OAK Device CHOP のストリーム
↓
ストリーム名で選択
↓
Queue Size / Max Items による整形
↓
Output Format(チャンネル列 or サンプル列)
↓
出力: TouchDesigner の CHOP データ
初心者の方は、以下日本語書籍も手元にあると安心です。

実際の案件事例まで踏み込んで紹介されていて、効率よくスキルアップするなら必携の二冊です!
パラメータ解説 ⚙️
OAK Page 📋
Active .active ⚡
Active .active 🔘
– OAK Select CHOP のクックを有効化/無効化するトグル
– オフにするとストリーム受信が止まり CPU/GPU 負荷を抑制可能
OAK Device CHOP .chop 🎥
OAK Device CHOP .chop 🔗
– 参照する OAK Device CHOP のパス
– depthai パイプラインを実行している側の CHOP を指定
Stream .stream 📡
Stream .stream 🏷️
– OAK Device CHOP 側で公開されているストリーム名
– 物体検出結果・IMU・トラッキング等、パイプラインで定義したストリームを文字列で指定
Queue Size .queuesize 📦
Queue Size .queuesize 🔢
– OAK から受け取るメッセージを TouchDesigner が再利用するキュー長
– メモリ効率のための上限値で、過大に取るとメモリ消費増、過小だと取り逃しが発生
Max Items .maxitems 📐
Max Items .maxitems 🔢
– OAK Select CHOP が出力するアイテム数の上限
– 物体検出のように検出数が毎フレーム変動する場面で、TouchDesigner 側のチャンネル数を一定に保つために使用
Output Format .outputformat 🧭
アイテム単位データを CHOP に展開する形式
| 項目 | 内部名 | 説明 |
|---|---|---|
| Items As Separate Channels | .itemsaschannels |
アイテムごとに別チャンネルとして出力(デフォルト、タイムスライシング有効) |
| Items As Separate Samples | .itemsassamples |
アイテムごとに別サンプルとして出力(タイムスライシング無効、Max Items 数のサンプルを安定的に出力) |
Use First Sample Only .firstsample 🥇
Use First Sample Only .firstsample 🔘
– 直近に受信したメッセージのみを使用するトグル
– IMU 等の高フレームレートストリームで最新サンプルだけを反映したい場合に有効
Sample Rate .rate 🎚️
Sample Rate .rate 📊
– CHOP のサンプルレート
– デフォルトは me.time.rate(プロジェクトのフレームレート)
Callbacks DAT .callbacks 📝
Callbacks DAT .callbacks 🔗
– コールバック関数を保持する DAT のパス
– 受信メッセージごとの Python 処理フックを定義可能
Setup Parameters .setuppars 🛠️
Setup Parameters .setuppars ▶️
– setupParameters() コールバック関数を実行するボタン
– パイプラインに合わせて OAK Select CHOP のパラメータを動的に整える際に使用
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: 物体検出結果を一定チャンネル数で受け取る 📦
OAK Device CHOP (detection pipeline) → OAK Select CHOP (Max Items=10, Items As Separate Channels) → 後段ロジック
- OAK Device CHOP で物体検出 depthai パイプラインを起動
- OAK Select CHOP の Stream に検出結果ストリーム名を設定
- Max Items を 10 に設定し、検出数が変動してもチャンネル数を固定
- Output Format を Items As Separate Channels にして時間軸ごとの検出結果を取得
Example 2: IMU の最新サンプルだけを反映する 🧭
OAK Device CHOP (IMU pipeline) → OAK Select CHOP (Use First Sample Only) → Filter CHOP
- OAK Device CHOP で IMU ストリームを公開する depthai パイプラインを起動
- OAK Select CHOP の Stream に IMU ストリーム名を設定
- Use First Sample Only をオンにして直近のサンプルのみ使用
- 後段の Filter CHOP でジッタを平滑化
Example 3: コールバック DAT で受信イベントをフックする 📝
OAK Device CHOP → OAK Select CHOP (Callbacks DAT) → Python 処理 → 任意の CHOP/DAT
- Callbacks DAT パラメータに Text DAT を指定
- DAT 内に受信時の処理を Python で記述(例: ログ出力・別 OP の更新)
- OAK Select CHOP のクックに合わせて Python フックが発火
- Setup Parameters ボタンでパイプラインに合わせた初期設定を実行
関連オペレータ 🔗
類似機能OP 🔍
- OAK Device CHOP — OAK カメラと depthai パイプラインを駆動する側の CHOP(OAK Select の上流)
- Select CHOP — 汎用の CHOP チャンネル選択(OAK 専用ではない一般用途)
組み合わせ推奨OP 🔄
- OAK Device CHOP — OAK Select の上流。depthai パイプラインを実行する側
- Filter CHOP — 受信値のジッタやノイズを時間方向に平滑化
- Math CHOP — 検出座標や IMU 値を任意レンジへ正規化
- Logic CHOP — 検出件数や信頼度の閾値判定
- CHOP to DAT — 受信したチャンネルを DAT テーブル化してログ・可視化
前処理・後処理CHOP 🎯
Info CHOP情報 📊
OAK Select 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:
- OAK Device CHOP パラメータに正しい OAK Device CHOP のパスを設定しているか確認
- Stream 名が depthai パイプライン側で公開しているストリーム名と完全一致しているか確認
- Active がオンで、OAK Device CHOP 側もクックされている状態か確認
❌ Problem: 出力チャンネル数がフレーム毎にばらつく
✅ Solution:
- Max Items を想定上限に設定してチャンネル数を固定する
- Output Format を Items As Separate Samples にすると Max Items 分のサンプル数で安定出力
- 後段で固定数に揃える前提なら Items As Separate Channels + Max Items の組合せが扱いやすい
❌ Problem: 高フレームレートストリーム(IMU 等)でデータが暴れる
✅ Solution:
- Use First Sample Only をオンにして最新サンプルのみ採用
- 後段に Filter CHOP を入れて時間方向に平滑化
- Queue Size を適切に設定し、バッファ過多による遅延と取り逃しのバランスを取る
❌ Problem: Callbacks DAT が呼ばれない / エラーが出る
✅ Solution:
- Callbacks DAT に正しい DAT パスが設定されているか確認
- DAT 内の関数名が depthai 側コールバック仕様(
setupParameters等)と一致しているか確認 - Setup Parameters ボタンを押して初期化を再実行する
参考資料 📚
その他 🔗
- TouchDesigner Wiki — CHOP 概要
- TouchDesigner Wiki — Category:CHOPs
- TouchDesigner Wiki ホーム
- TouchDesigner 公式 Forum
- Facebook — TouchDesigner Help Group

