
概要 📖 – OAK / Luxonis センサーの初期化と状態通知
OAK Device CHOPは、OAK / Luxonis 深度カメラの depthai パイプラインを管理し初期化・実行・完了の状態チャンネルを出力する CHOPです。OAK Select CHOP / TOP の上流ソースとして配置し、Callbacks DAT で onInitialize / createPipeline などのライフサイクルを記述します。
主な用途 🎯
- OAK / Luxonis 系深度カメラ(OAK-D / OAK-1 等)の初期化と接続管理
- depthai パイプラインの onInitialize / createPipeline コールバック起動
- 初期化・準備完了・実行中・完了の状態フラグ出力(ready / running / done チャンネル)
- OAK Select CHOP / TOP に対する上流デバイスソースとしての提供
- TOP テクスチャを XLinkIn 経由で OAK デバイスへ送信するストリーム経路
データフロー 🔄
入力: OAK Device 選択
↓
Initialize(onInitialize コールバック実行)
↓
createPipeline(depthai パイプライン構築)
↓
ready チャンネル ON → Start パルス
↓
running チャンネル ON(OAK Select CHOP/TOP に値供給)
↓
Done で running OFF / done ON
↓
出力: state チャンネル群 + Callbacks DAT イベント
初心者の方は、以下日本語書籍も手元にあると安心です。

実際の案件事例まで踏み込んで紹介されていて、効率よくスキルアップするなら必携の二冊です!
パラメータ解説 ⚙️
OAK Page 📋
デバイス選択と起動制御 .device 🎛️
Active .active 🟢
– OAK Device CHOP の有効・無効を切り替えるトグル
– オフ時はデバイスとの通信が停止し、ready / running 等のチャンネルも非アクティブ
Sensor .sensor 📷
– 利用可能な OAK デバイスをドロップダウンから選択
– 複数台接続時に対象を切り替え可能
Refresh Sensor List .refreshpulse 🔄
– 利用可能な OAK デバイス一覧を再スキャンするパルスボタン
– デバイスを後から接続したとき押すと Sensor ドロップダウンが更新される
Initialize .initialize ⚙️
– OAK デバイスを ready 状態にするためのトリガー
– onInitialize() コールバックを実行し、成功すると createPipeline() コールバックを起動
– 完了時に ready チャンネルがオンになる
Start .start ▶️
– 初期化済みデバイスの実行を開始するパルス
– 押下後 running チャンネルが ON、ready は OFF になる
Play .play 🎬
– TouchDesigner がカメラから受信した新規メッセージを処理するかどうかのトグル
– 例: 同じ OAK Device CHOP に複数の OAK Select CHOP / TOP を接続している場合、Play をオフにすると全 OAK Select OP は最後に受信したメッセージを保持し、新規メッセージを無視する
Go to Done .gotodone ⏹️
– 実行中のデバイスを Done 状態に遷移させるパルス
– running が OFF、done が ON になる
Callbacks DAT .callbacks 📝
– OAK Device CHOP のライフサイクル callback を記述した DAT のパス
– onInitialize() / createPipeline() 等を Python で記述し、depthai パイプラインを構築する
Stream In Page 📨
TOP テクスチャ送信ストリーム .stream 🖼️
TouchDesigner 側の TOP を XLinkIn 経由で OAK デバイスへ送信する逐次ストリーム設定。複数ストリームを Sequence で追加可能。
Stream .stream 🔢
– テクスチャ送信ストリームの本数を指定する Sequence パラメータ
– 各ストリームに Name / Frequency / TOP の 3 サブパラメータが付随
Name .stream0name 🏷️
– テクスチャを受け取るストリーム名
– depthai パイプライン側で pipeline.create(dai.node.XLinkIn) により事前に作成しておく必要あり
Frequency (Hz) .stream0frequency ⏲️
– OAK デバイスへテクスチャを送信する周波数 (Hz)
– 送信側 TOP の更新周期と整合させる
TOP .stream0top 🎞️
– ストリームへ送信するテクスチャを保持する TOP オペレータのパス
– 解像度・フォーマットは depthai 側 XLinkIn の期待値と一致させる
Outputs Page 📊
状態フラグ出力 .outflags 🚦
Initialize / Start / Done のライフサイクルに応じて 0/1 を出力する状態チャンネル群
Initializing .outinit 🟡
– initializing チャンネルを出力
– onInitialize() コールバックが非ゼロを返している間 1、それ以外は 0
Initialize Fail .outinitfail ❌
– initialize_fail チャンネルを出力
– 初期化中またはパイプライン作成中にエラーが発生した場合 1
Ready .outready ✅
– ready チャンネルを出力
– Initialize 完了後から Start 実行前までの間 1
Running .outrunning 🟢
– running チャンネルを出力
– Start 実行後から Done 到達前までの間 1
Done .outdone 🏁
– done チャンネルを出力
– 実行完了 / 終了状態に遷移したときに 1
Timer Count .outtimercount ⏱️
経過時間の出力単位を選択するメニュー
| 項目 | 内部名 | 説明 |
|---|---|---|
| Off | .off |
出力しない |
| Seconds | .seconds |
秒単位で経過時間を出力 |
| Frames | .frames |
フレーム単位で経過時間を出力 |
| Samples | .samples |
サンプル単位で経過時間を出力 |
| All | .all |
Seconds / Frames / Samples を全て出力 |
Running Time Count .outrunningcount 🕒
Start からの「壁時計」経過時間を出力するメニュー。デバイスの Play パラメータが OFF でもカウントは進み、Done に到達するとカウントが停止する。
| 項目 | 内部名 | 説明 |
|---|---|---|
| Off | .off |
出力しない |
| Seconds | .seconds |
秒単位で経過時間を出力 |
| Frames | .frames |
フレーム単位で経過時間を出力 |
| Samples | .samples |
サンプル単位で経過時間を出力 |
| All | .all |
Seconds / Frames / Samples を全て出力 |
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-D 深度カメラの初期化と実行制御 🎬
OAK Device CHOP (Active=ON, Initialize) → ready → Start → running → OAK Select CHOP/TOP
- OAK Device CHOP を配置し、Sensor ドロップダウンで接続中の OAK-D を選択
- Callbacks DAT に
onInitialize/createPipelineを Python で記述(depthai パイプラインを構築) - Initialize パルスを押下 →
readyチャンネルが 1 になるのを確認 - Start パルスを押下 →
runningチャンネルが 1 になり、後段の OAK Select CHOP / TOP がデータを受信開始
Example 2: 状態チャンネルでアプリケーションのフェーズ切り替え 🚦
OAK Device CHOP (out: ready / running / done) → Logic CHOP → Switch TOP
- OAK Device CHOP の Outputs Page で
Ready/Running/Doneを全て ON - ready / running / done チャンネルを Logic CHOP で 1 つの state index に圧縮
- Switch TOP の入力切替に index を渡し、初期化中・実行中・完了後で表示画面を切替
- ユーザに状態をフィードバックする UI が状態フラグだけで構築できる
Example 3: TOP テクスチャを XLinkIn 経由で OAK へ送信 🖼️
Movie File In TOP → OAK Device CHOP (Stream In Page) → depthai pipeline (XLinkIn)
- Callbacks DAT の
createPipeline()でpipeline.create(dai.node.XLinkIn)を作成しストリーム名を設定 - OAK Device CHOP の Stream In Page で Stream を 1 に設定
- Name にパイプラインで作成したストリーム名を入力、TOP に送信元 TOP のパスを指定、Frequency に送信周期 (Hz) を入力
- TOP のフレームが指定周期で OAK デバイス側へ転送され、ニューラルネット推論等の入力に利用可能
関連オペレータ 🔗
類似機能OP 🔍
- OAK Select CHOP — OAK Device CHOP に接続して特定ストリームのチャンネル値を抽出
- Kinect CHOP — 別系統の深度カメラデバイス(Microsoft Kinect)から骨格・身体情報を取得
組み合わせ推奨OP 🔄
- OAK Select CHOP — OAK Device CHOP の下流に必須、特定ストリームの数値チャンネルを取り出す
- OAK Select TOP — OAK Device CHOP の下流でカメラ映像・深度マップ等のテクスチャを取り出す
- Logic CHOP — ready / running / done フラグを論理演算で集約しアプリケーション state を作る
- Trigger CHOP — Initialize / Start パルスをタイムライン外部からプログラム発火
- Switch TOP — 状態チャンネルで表示画面を切り替える UI 構築
前処理・後処理CHOP 🎯
Info CHOP情報 📊
OAK Device 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: Sensor ドロップダウンに OAK デバイスが表示されない
✅ Solution:
- USB ケーブルを USB3 対応ポートに直接接続(USB ハブ経由は帯域不足になりやすい)
- Refresh Sensor List パルスを押下してデバイス一覧を再取得
- depthai のドライバ・ファームウェアが TouchDesigner 同梱バージョンと互換か公式 docs で確認
❌ Problem: Initialize 後に initialize_fail が 1 になる
✅ Solution:
- Callbacks DAT の
onInitialize()/createPipeline()内で例外が発生していないか TextPort で確認 - depthai pipeline でノード接続が抜けていないかチェック(XLinkIn / XLinkOut の対応漏れが頻出)
- 他アプリケーションが OAK デバイスを掴んでいないか確認し、必要なら TouchDesigner を再起動
❌ Problem: Start 後も running が 0 のまま
✅ Solution:
readyチャンネルが 1 になっているかを先に確認(ready=0 では Start を受け付けない)- Active パラメータが ON か確認、OFF だと全状態チャンネルが進行しない
- Callbacks DAT のエラーで内部 state machine が停止していないか TextPort のログを確認
❌ Problem: Play を OFF にしたら全 OAK Select OP が止まった
✅ Solution:
- Play OFF は仕様通り「最後に受信したメッセージを保持し、新規メッセージを破棄」する動作
- 新規メッセージを処理したい場合は Play を ON に戻す
- 一時停止表現として使うなら下流側で Hold CHOP 等のラッチを併用する
参考資料 📚
その他 🔗
- TouchDesigner Wiki — CHOP 概要
- TouchDesigner Wiki — Category:CHOPs
- TouchDesigner Wiki ホーム
- TouchDesigner 公式 Forum
- Facebook — TouchDesigner Help Group

