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

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

OAK Device CHOP の状態フロー図

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

概要 📖 – 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 イベント

Tips

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

まる。
まる。

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


パラメータ解説 ⚙️

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
  1. OAK Device CHOP を配置し、Sensor ドロップダウンで接続中の OAK-D を選択
  2. Callbacks DAT に onInitialize / createPipeline を Python で記述(depthai パイプラインを構築)
  3. Initialize パルスを押下 → ready チャンネルが 1 になるのを確認
  4. Start パルスを押下 → running チャンネルが 1 になり、後段の OAK Select CHOP / TOP がデータを受信開始

Example 2: 状態チャンネルでアプリケーションのフェーズ切り替え 🚦

OAK Device CHOP (out: ready / running / done) → Logic CHOP → Switch TOP
  1. OAK Device CHOP の Outputs Page で Ready / Running / Done を全て ON
  2. ready / running / done チャンネルを Logic CHOP で 1 つの state index に圧縮
  3. Switch TOP の入力切替に index を渡し、初期化中・実行中・完了後で表示画面を切替
  4. ユーザに状態をフィードバックする UI が状態フラグだけで構築できる

Example 3: TOP テクスチャを XLinkIn 経由で OAK へ送信 🖼️

Movie File In TOP → OAK Device CHOP (Stream In Page) → depthai pipeline (XLinkIn)
  1. Callbacks DAT の createPipeline()pipeline.create(dai.node.XLinkIn) を作成しストリーム名を設定
  2. OAK Device CHOP の Stream In Page で Stream を 1 に設定
  3. Name にパイプラインで作成したストリーム名を入力、TOP に送信元 TOP のパスを指定、Frequency に送信周期 (Hz) を入力
  4. 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、無効時は0
  • export_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 等のラッチを併用する

参考資料 📚

その他 🔗

公式リソース 📖

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