
概要 📖 – ハンド・フィンガー・ジェスチャートラッキング
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)
↓
ハンド・フィンガー・ジェスチャー認識
↓
出力: 位置・回転・状態チャンネル
初心者の方は、以下日本語書籍も手元にあると安心です。

実際の案件事例まで踏み込んで紹介されていて、効率よくスキルアップするなら必携の二冊です!
パラメータ解説 ⚙️
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
- Leap Motion CHOP の Active をオン、API を Gemini (V5) に設定
- Hands を 1、Named Hands をオフにして hand1:t[xyz] を出力
- Select CHOP で hand1:tx / hand1:ty / hand1:tz を抽出
- Geometry COMP の Translate にエクスポートし、ハンドの動きで 3D オブジェクトを操作
Example 2: ピンチ強度でパーティクル発生量を制御 🤏
Leap Motion CHOP → Math CHOP (Range mapping) → Particle GPU emission rate
- Pinch Strength をオンにして hand1:pinch を出力
- Math CHOP の From Range [0, 1]、To Range [0, 1000] でエミッション数にマッピング
- Particle GPU の Emission Rate にエクスポート
- 親指と人差し指の開閉でリアルタイムにパーティクル量を制御
Example 3: 握り込みでメニューUI を操作 ✊
Leap Motion CHOP → Math CHOP → Logic CHOP (>0.8) → Trigger CHOP → UI state
- Grab Strength をオンにして hand1:grab を出力
- Logic CHOP で 0.8 を閾値に握り込み判定
- Trigger CHOP で確定エンベロープを発火
- 握り込みジェスチャーでメニュー選択を確定する 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、無効時は0export_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 に設定して片手ずつ確実に取得
- 両手を視野内に入れた状態で初期化し、片手だけ突然出さないようにする
参考資料 📚
その他 🔗
- TouchDesigner Wiki — CHOP 概要
- TouchDesigner Wiki — Category:CHOPs
- TouchDesigner Wiki ホーム
- TouchDesigner 公式 Forum
- Facebook — TouchDesigner Help Group

