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

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

Leap Motion CHOP のハンドトラッキング機能を示す図

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

概要 📖 – ハンド・フィンガー・ジェスチャートラッキング

Leap Motion CHOPは、Leap Motion / Ultraleap センサーから取得したハンド・フィンガー・ジェスチャー情報をチャンネルとして出力する CHOPです。API バージョン(V2 / V4 Orion / V5 Gemini)の選択により、トラッキング精度・対応ジェスチャーが切り替わります。

主な用途 🎯

  • Leap Motion / Ultraleap センサーからのハンド位置・回転トラッキング
  • フィンガーごとの位置・回転・関節(MCP/PIP/DIP/Tip)取得
  • Pinch(つまみ)・Grab(握り)強度によるジェスチャー入力
  • Circle / Swipe / Key Tap / Screen Tap のジェスチャー検出(V2 API のみ)
  • ハンドトラッキングを用いたインタラクティブインスタレーション制御

データフロー 🔄

入力: Leap Motion / Ultraleap センサー(USB)

API 選択(V2 / V4 Orion / V5 Gemini)

ハンド・フィンガー・ジェスチャー認識

出力: 位置・回転・状態チャンネル

Tips

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

まる。
まる。

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


パラメータ解説 ⚙️

Setup Page 📋

Active .active 🟢

センサーからのデータ取得の有効・無効:

  • Active: オンにすると Leap Motion センサーからのデータ取得を開始する。オフにすると取得停止

API .api 🔀

トラッキング SDK のバージョン選択

項目 内部名 説明
Version 2 Tracking .default レガシー SDK(Windows: Orion Beta 3.2.1 / MacOS: 2.3.1)。Circle / Swipe / Key Tap / Screen Tap のジェスチャーや Tool トラッキングが利用可能
Orion (v4) / Gemini (v5) .on V5 Gemini が最も安定・高速(Windows 5.13.2 / MacOS 5.14 以上)。V4 Orion は Windows のみ。ジェスチャーや Tool は非対応

Library Folder .libfolder 📁

Windows 環境でのドライバライブラリ(DLL)のパス指定:

  • Library Folder: Windows 専用。選択した API バージョンの DLL(V4/V5: LeapC.dll / V2: Leap.dll)が置かれているフォルダのパス。Gemini V5 のデフォルト: C:\Program Files\Ultraleap\LeapSDK\lib\x64

HMD Mode .hmd 🥽

Head Mounted Display モードの切替

項目 内部名 説明
Default .default デフォルト動作(センサー設置方向は SDK 側のデフォルトに従う)
On .on HMD モード有効(センサーを HMD に取り付け、視点方向を前提としたトラッキング)
Off .off HMD モード無効(デスクトップ設置を前提としたトラッキング)

Debug Channels .debugchannels 🐞

オンにすると以下のデバッグ用チャンネルが追加されます:

  • connected: Leap Motion センサーの接続状態(接続中: 1 / 未接続: 0)
  • sequence_id: 現在のフレームに対応する一意の ID

Status Channels .statuschannels 📡

オンにすると以下のステータスチャンネルが追加されます:

  • hands / fingers / tools / gestures: センサーが検出しているハンド・フィンガー・ツール・ジェスチャーの個数
  • [hand|finger|tool|circle|swipe|keytap|screentap]:tracking: 各オブジェクトが現在アクティブにトラッキング中なら 1、そうでなければ 0

Named Hands .namedhands 🤲

ハンドチャンネルの命名方式:

  • Named Hands: オンにするとハンドチャンネルが r(右手)・l(左手)として命名される。オフではインデックス番号

Hands .hands

トラッキングするハンド数と、各ハンドに対して出力されるチャンネル:

  • Hands: トラッキングするハンドの最大数
  • hand*:t[xyz]: センサー基準のハンド位置(X/Y/Z 座標)
  • hand*:r[xyz]: ハンドの回転(X/Y/Z 軸)

Left Hands / Right Hands .lefthands ↔️

Named Hands 使用時の左右別トラッキング数:

  • Left Hands: Named Hands 有効時、トラッキングする左手の数
  • Right Hands: Named Hands 有効時、トラッキングする右手の数

Hand Velocity .handvelocity 🏃

オンにすると以下のチャンネルが追加されます:

  • hand*:v[xyz]: オンにするとハンドの速度(X/Y/Z 方向)が追加チャンネルとして出力される

Hand Sphere .handsphere 🟠

API = Version 2 Tracking 時のみ利用可能。オンにすると以下のチャンネルが追加されます:

  • hand*/sphere:t[xyz]: ハンドに内接する仮想球の中心位置
  • hand*/sphere:radius: 仮想球の半径

Pinch Strength .pinchstrength 🤏

オンにすると以下のチャンネルが追加されます:

  • hand*:pinch: 親指と人差し指のつまみ距離(0: 開いた状態 → 1: 完全につまんだ状態)

Grab Strength .grabstrength

オンにすると以下のチャンネルが追加されます:

  • hand*:grab: 握りの強さ(0: 平らに開いた手 → 1: 完全に握った拳)

Named Fingers .namedfingers 🖐️

フィンガーチャンネルの命名方式:

  • Named Fingers: オンにすると thumb / index / middle / ring / pinky として命名される。オフではインデックス番号

Fingers per Hand .fingersperhand 🔢

Named Fingers 未使用時の、ハンドあたりのフィンガー数:

  • Fingers per Hand: Named Fingers がオフのとき、ハンドあたりのトラッキングするフィンガー数

Finger Rotation .fingerrotation 🔄

オンにすると以下のチャンネルが追加されます:

  • hand*/finger*:r[xyz]: 各フィンガーの回転(X/Y/Z 軸)

Finger Size .fingersize 📏

オンにすると以下のチャンネルが追加されます:

  • hand*/finger*:length: 検出されたフィンガーの長さ
  • hand*/finger*:width: 検出されたフィンガーの幅

Finger Extended .fingerextended 👉

オンにすると以下のチャンネルが追加されます:

  • hand*/finger*:extended: フィンガーがまっすぐ伸びていれば extended と判定(伸ばすほど 1 に近づく)

Finger Joints .fingerjoints 🦴

オンにすると以下のチャンネルが追加されます:

  • hand*/finger*/joint_mcp:t[xyz]: MCP 関節(指の付け根)の位置
  • hand*/finger*/joint_pip:t[xyz]: PIP 関節(第二関節)の位置
  • hand*/finger*/joint_dip:t[xyz]: DIP 関節(第一関節)の位置
  • hand*/finger*/joint_tip:t[xyz]: 指先の位置

Tools .tools 🖊️

トラッキングするツール数。オンにすると以下のチャンネルが追加されます(API = V2 のみ):

  • tool*:t[xyz]: センサー基準のツール位置
  • tool*:length: 検出されたツールの長さ
  • tool*:width: 検出されたツールの幅

Circle Gestures .circlegestures

トラッキングする Circle Gesture 数。オンにすると以下のチャンネルが追加されます(API = V2 のみ):

  • circle*:handindex: ジェスチャーに紐づくハンドのインデックス(-1 のときは紐づくハンドなし)
  • circle*:t[xyz]: 円の中心位置
  • circle*:radius: 円の半径
  • circle*:progress: ジェスチャー中に描かれた周回数

Swipe Gestures .swipegestures 👋

トラッキングする Swipe Gesture 数。オンにすると以下のチャンネルが追加されます(API = V2 のみ):

  • swipe*:handindex / swipe*:fingerindex: ジェスチャーに紐づくハンド・フィンガーのインデックス
  • swipe*:t[xyz]: スワイプの現在位置
  • swipe*:start[xyz]: スワイプ開始位置
  • swipe*:speed: スワイプの速度

Key Tap Gestures .keytapgestures ⌨️

トラッキングする Key Tap Gesture 数。オンにすると以下のチャンネルが追加されます(API = V2 のみ):

  • keytap*:handindex / keytap*:fingerindex: ジェスチャーに紐づくハンド・フィンガーのインデックス
  • keytap*:t[xyz]: キータップ位置

Screen Tap Gestures .screentapgestures 🖥️

トラッキングする Screen Tap Gesture 数。オンにすると以下のチャンネルが追加されます(API = V2 のみ):

  • screentap*:handindex / screentap*:fingerindex: ジェスチャーに紐づくハンド・フィンガーのインデックス
  • screentap*:t[xyz]: スクリーンタップ位置

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: ハンド位置で 3D オブジェクトを操作 ✋

Leap Motion CHOP → Select CHOP (hand1:tx/ty/tz) → Geometry COMP transform
  1. Leap Motion CHOP の Active をオン、API を Gemini (V5) に設定
  2. Hands を 1、Named Hands をオフにして hand1:t[xyz] を出力
  3. Select CHOP で hand1:tx / hand1:ty / hand1:tz を抽出
  4. Geometry COMP の Translate にエクスポートし、ハンドの動きで 3D オブジェクトを操作

Example 2: ピンチ強度でパーティクル発生量を制御 🤏

Leap Motion CHOP → Math CHOP (Range mapping) → Particle GPU emission rate
  1. Pinch Strength をオンにして hand1:pinch を出力
  2. Math CHOP の From Range [0, 1]、To Range [0, 1000] でエミッション数にマッピング
  3. Particle GPU の Emission Rate にエクスポート
  4. 親指と人差し指の開閉でリアルタイムにパーティクル量を制御

Example 3: 握り込みでメニューUI を操作 ✊

Leap Motion CHOP → Math CHOP → Logic CHOP (>0.8) → Trigger CHOP → UI state
  1. Grab Strength をオンにして hand1:grab を出力
  2. Logic CHOP で 0.8 を閾値に握り込み判定
  3. Trigger CHOP で確定エンベロープを発火
  4. 握り込みジェスチャーでメニュー選択を確定する UI を構築

関連オペレータ 🔗

類似機能OP 🔍

  • Kinect CHOP — Kinect センサーによる全身骨格トラッキング(ハンド単体は Leap Motion が高精度)
  • Mouse In CHOP — マウス位置・ボタン状態をチャンネル化(2D 入力で代替可能なケースに)

組み合わせ推奨OP 🔄

  • Filter CHOP — ハンド位置のジッタを後段でスムージング
  • Math CHOP — Pinch / Grab 値の範囲変換やオフセット調整
  • Logic CHOP — Pinch / Grab 強度の閾値判定でジェスチャー検出
  • Trigger CHOP — ジェスチャー発生時にエンベロープを発火
  • Select CHOP — 多数のチャンネルから必要な hand*/finger* のみ抽出

前処理・後処理CHOP 🎯


Info CHOP情報 📊

Leap Motion 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: センサーが検出されない / connected が 0 のまま
✅ Solution:

  • Ultraleap Tracking Software(Gemini V5 推奨)が PC にインストール済みか確認
  • Windows では Library Folder に LeapC.dll のあるフォルダ(例: C:\Program Files\Ultraleap\LeapSDK\lib\x64)を指定
  • USB ケーブルを別ポート(USB 3.0 推奨)に差し替え、ハブ経由を避ける

❌ Problem: ジェスチャー(Circle / Swipe / Key Tap / Screen Tap)が検出されない
✅ Solution:

  • API パラメータが Version 2 Tracking になっているか確認(V4 Orion / V5 Gemini ではジェスチャー API が廃止されている)
  • 対応する Gestures パラメータ(Circle / Swipe / Key Tap / Screen Tap Gestures)を 1 以上に設定
  • V5 Gemini で類似機能を実装する場合は Logic CHOP + Pinch / Grab 強度の閾値判定で代替実装

❌ Problem: ハンド位置の値がジッタで震える
✅ Solution:

  • 後段に Filter CHOP を入れて短時間平均でスムージング
  • Lag CHOP で立ち上がり・立ち下がりに緩やかな追従を加える
  • センサー設置位置を見直し、強い赤外線光源(直射日光・ハロゲン)を視野から外す

❌ Problem: 右手と左手の判別がフレーム間で入れ替わる
✅ Solution:

  • Named Hands をオンにして hand_r / hand_l として明示的に左右を分離
  • Left Hands / Right Hands をそれぞれ 1 に設定して片手ずつ確実に取得
  • 両手を視野内に入れた状態で初期化し、片手だけ突然出さないようにする

参考資料 📚

その他 🔗

公式リソース 📖

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