TouchDesigner MediaPipe 手勢辨識實作:Blob Track 追蹤與 Face AR 濾鏡|IVD487 W12

想用 TouchDesigner 做即時手勢辨識?這篇整理互動控制第三堂的兩條路線:OpenCV 的 Blob Track 色塊追蹤(Resolution 降解析度、Edge 保輪廓、DAT to CHOP 轉資料),以及 Google MediaPipe 的 AI 辨識——手勢魔法方塊與 Face AR 濾鏡。附 Blob Track vs MediaPipe 對照表、DAT to CHOP 設定步驟與章節時間戳,上完課回來掃一遍就能接回來。

May 25, 2026
🧰 TouchDesigner 工具庫 | Luxmin Institute on Patreon
我們把接案與展場現場累積下來的 TouchDesigner 元件、專案檔與製作系統,整理發佈在 Patreon,部分工具與 Demo 免費開放下載。
https://www.patreon.com/cw/LuxminInstitute
⭑⭑⭑⭑⭑⭑⭑⭑⭑⭑⭑⭑⭑⭑⭑⭑

TouchDesigner MediaPipe 手勢辨識實作:Blob Track 追蹤與 Face AR 濾鏡

上一週走的是實體感測器,這一週是互動控制系列的最後一堂,主題換成 AI:先用 OpenCV 的 Blob Track 做色塊追蹤,再用 Google MediaPipe 做手勢與臉部的即時辨識與視覺效果。
關鍵觀念先講:Blob Track 認的是「色塊」,MediaPipe 認的是「這是手、這是臉」。 前者基於 pixel、什麼都能追但不知道追到的是什麼;後者是預訓練的 AI 模型,直接給你有語意的點。搞懂兩者差別與資料怎麼轉,就能把辨識訊號接進任何互動。這篇是重點整理,上完課回來掃一遍就能把流程接回來。
讀完這篇你會知道:
  • Blob Track 與 MediaPipe 差在哪、什麼時候用哪個
  • 為什麼 Blob Track 前面要加 Resolution (TOP)Edge (TOP)
  • DAT to CHOP 的三個關鍵設定
  • 怎麼把追蹤點畫成一個會跟著動的框線
  • 手勢魔法方塊與 Face AR 濾鏡是怎麼組出來的
Video preview
本週登場節點速查:
家族
節點
這週的用途
TOP
Movie File InResolutionEdgeNoiseBlob TrackOverRenderSwitchVideo Device InBody TrackFace Track
影像輸入、前處理、色塊追蹤、渲染、疊圖、切換
CHOP
Blob TrackDAT to CHOPSelectNullMathCount
把追蹤表格轉成 channel、選值、運算、累加
SOP
Rectangle
要被 instance 複製的方框幾何
COMP
GeometryCamera
3D 容器與鏡頭(改 orthographic)
MAT
Line
讓方框以線框呈現的材質
.tox 元件
MediaPipe
Google AI 辨識(手/臉/姿勢/分割)

一、OpenCV 與 Blob Track:它在追什麼

OpenCV 是一套開源的電腦視覺函式庫(由 Intel 在 2000 年釋出),GitHub 上就找得到,常用來做辨識、分割、臉部偵測。TouchDesigner 只整合了其中少數效果,最常用的就是 Blob Track——它在 TOPCHOP 兩個家族都有,TOP 版最直接。
接法很單純:在影像後面接一個 Blob Track (TOP),它下方會多出兩個 DAT 表格,記錄追蹤到的每個色塊:uv(等同 x/y)、width、height、ID,以及 lost/active/expired 狀態。它追的是「色塊(blob)」,所以:
  • min/max blob size 決定辨識範圍。 設太大框會消失(辨識不到)、設太小也抓不到;用 Noise (TOP) 造隨機圖來試最清楚——整張圖縮小,相近色塊變多,blob 數量就跟著變多。
  • lost/active/expired 是它的隱藏優點。 物件被短暫遮住會進入 lost,一定時間內追回來時 ID 不變,等於真的認得「還是同一個東西」。這也是 Lidar 人流追蹤常配 Blob 的原因——先拿到位置,再拿 x/y 去做後續轉換。
📺 影片段落:1:562:463:334:447:38

二、前處理:Resolution 降解析度、Edge 保輪廓

Blob Track完全基於 pixel 運算的,影片一大(例如 1920×1080)就會超級慢。標準前處理是兩步:
  1. Resolution (TOP) 把 output resolution 降到約 1/8——畫面變糊,但對色塊辨識幾乎不影響,跑起來順很多。
  2. Edge (TOP) 做邊緣預處理,只保留想要的輪廓、去掉多餘的顏色雜訊,讓 blob 更乾淨。
⚠️ 順序別接反: Resolution → Edge → Blob Track。先降解析度、再抽邊緣,最後才丟進追蹤。
💡 大影片先加 Resolution: Blob Track 吃 pixel,原始大檔直接跑會卡到不行。養成習慣:追蹤前先 Resolution (TOP) 降到 1/8。
⚠️ Blob Track 只追到兩個點? 舊版 TD 的非商業版本 blob tracker 最多只有兩個追蹤點;近期版本已移除這個限制,追蹤數量無上限。回去記得把 TD 更新到最新版(右上角綠色 update 會帶你到官網)。
📺 影片段落:9:4311:3512:19

三、DAT to CHOP:把追蹤表格轉成 channel

Blob Track 給的是一張 DAT 表格,要拿去渲染得先轉成 channel。用 DAT to CHOP,但預設會把「每個橫排(row)」當成一個 channel,這不是我們要的——我們要的是「每個直行(column)」各自是一個 channel(id、u、v、width、height…),才能把 channel 餵給 instance。
三個關鍵設定:
設定項
改成
為什麼
Channel per Rows
Channel per Column
讓每個直行(column)各自成為一個 channel,而非每個橫排
第一個 Row
name
最上面那排當 channel 名稱(id/u/v/width/height…)
第一個 Column
value
指定哪一行的數值當 channel 的實際值
轉好之後,後面接 Select (CHOP) 取需要的資料就好——例如選 u 跟 v 當待會 Rectangle (SOP) 的 x/y 值。
📺 影片段落:14:03

四、畫出追蹤框:Rectangle → Geometry → Render → Line

有了 u/v,就用 W 前面做 3D 物件的老套路把追蹤點畫成框:
  1. Rectangle (SOP)Geometry (COMP)Camera (COMP)Render (TOP)
  2. 不用燈光,但要給材質 Line (MAT)(賦予到 Geometry 的 material),讓方形以線框呈現。
  3. Geometry 打開 instance,把前面的 Null (CHOP)(資料鏈的最後一個節點)拖進來,u 給 x、v 給 y——框框就會跟著追蹤點動。
  4. 再把 width/height 分配到 scale x/scale y,框的大小就跟著色塊變。(偷懶版:scale x、y 都用 width,保證是正方形。)
Camera 改 orthographic、對位 bottom left。 預設 Camera (COMP) 是 perspective(透視),會因距離改變物件大小;但追蹤資料是平面的,改成 orthographic(正投影,不論遠近同尺寸就同大小),並把對位點設 bottom left、scale 設 1,坐標才會貼近原本影像的辨識座標。
最後把原圖用 Over (TOP) 疊回來(記得把渲染框調到上層),再用 Math (CHOP) 微調 u/v,讓左邊畫的框對齊右邊辨識的框。剩下的就是慢慢校位的例行細節。(線條版本同理,只是改用選取 line 的資料去連點成線。)
📺 影片段落:16:3918:0721:12

五、Blob Track vs MediaPipe:什麼時候用哪個

Windows+Nvidia 顯卡的機器,其實內建 Body Track (TOP)Face Track (TOP),把 Video Device In (TOP) 接進去就能用;但 Mac 沒有 Nvidia,跑不了這兩個節點,所以改走跨平臺的 MediaPipe。
MediaPipe 是 Google 開發的開源 AI 辨識庫,最大優勢是跨平臺——Windows、Mac、手機、甚至網頁都能跑,內建臉部 mesh、手勢、手部關節、身體骨架、圖像分割(segmentation)等多種辨識。本課用的是社群大神 Torin 做的 TD 整合套件(GitHub 搜 mediapipe touchdesigner 即可),把對應辨識點一點就自動接好。
Blob Track
MediaPipe
原理
基於 pixel 的色塊(blob)追蹤
Google 開源 AI 辨識模型
追蹤對象
任意色塊/輪廓,不認得「那是什麼」
臉、手、姿勢、手勢、分割等具語意的對象
前處理
需 Resolution 降解析度+Edge,否則吃效能
載入 .tox 即用,點對應辨識自動接好
平臺
通用
跨平臺(Win/Mac/手機/網頁),Mac 也能跑
適用情境
Lidar 人流追蹤、社群感的框線視覺
手勢控制、AR 濾鏡、骨架互動
⚠️ MediaPipe.tox 要第一個 download: 核心 MediaPipe 的 .tox 檔很大,存進專案容易 crash,所以老師把它移除、要用時再從 media pipe/toxes 資料夾把它拉進來,且它一定要排在最前面、後面配套的 1~9 個檔都要有。刪節點時先按 xx 再 delete 比較安全。
📺 影片段落:26:2228:57

六、實作一:手勢魔法方塊

MediaPipe 的紫色 output 拉進來、點 detect hands,就能拿到兩隻手的資料。這個方塊做三件事(注意:h1/h2 沒有左右手之分,看誰先被辨識到):
  • translate(定位):Math (CHOP) 算兩手 x/y/z 的平均值(=兩手中點),分配給 x/y/z。兩手等距左右張開時中心幾乎不動。
  • scale(大小):hand distance(雙手距離)當 scale,並加一個條件——兩手都 active 才觸發,否則 scale 給 0(方塊完全看不到)。
  • rotation(旋轉): 取 h1、h2 的 rotation 做平均給 x/y/z(三軸同值,會一起轉,屬簡易做法、不算精確)。
數值再用 Math (CHOP) map 到適合畫面的範圍(例如 translate 到 -3.5~3.5、scale 到 0.5~3.5,都是試出來的經驗值)。整體比 Blob Track 更簡單:知道想要的效果需要哪個資料點,再做數學轉換就好。
💡 「兩手都被辨識到才給值、否則歸零」本質就是條件運算——想把這種判斷寫得更漂亮,可參考 TouchDesigner Python 條件運算/三元表達式。想做多人時,調高 max number of hands 理論上就能多人互動(實際支援程度請自行查證)。
📺 影片段落:36:1438:03

七、實作二:Face AR 濾鏡(手勢切換貼圖)

這個案例用複合追蹤:同時接 face 與 hand。做法拆成三塊:
  • 定位:鼻子的 x/y 當方塊位置,讓整個貼圖跟著臉移動(正臉最準,臉一旋轉就會怪)。
  • 深度: 臉部資料沒有 z 軸,用一個 tricky 的方法——拿左右耳的距離估算遠近(越遠、耳距在畫面上越近),把它當 scale 控制大小。
  • 切換: 用 gesture channel 抓手勢(內建握拳、打開、上指等預訓練手勢),「打開手」→ Count (CHOP) 累加 → 在 0~3 循環 → 控制 Switch (TOP) 切換貓臉/墨鏡/帽子/天線寶寶等貼圖。
每張貼圖的定位不同(貓貼臉、墨鏡在眼睛、帽子更往上),在 Math (CHOP) 各自微調偏移即可。本質上就是「用方塊追蹤臉,再把貼圖對到方塊上」。
提醒:貼圖有時會追不完整(例如環繞整臉的效果),這屬正常現象,回去多調位置與 scale 就好。「單手 I love you」手勢老師當場沒比出來——有比出來的同學歡迎回報。
📺 影片段落:44:0448:41

常見問題 FAQ

Q1:檔案打開後專案全是叉叉、沒有畫面?
外層被設成 stop cooking(省效能、暫停運算),是刻意的。把外層的叉叉點開,畫面才會出現。
Q2:Blob Track 好卡,怎麼救?
它完全基於 pixel 運算,大影片直接跑很慢。前面加 Resolution (TOP) 降到約 1/8,再接 Edge (TOP),順序是 Resolution → Edge → Blob Track
Q3:Blob Track 只追到兩個點?
那是舊版 TD 非商業版本的限制。近期版本已移除,追蹤數量無上限——把 TD 更新到最新版即可(右上角綠色 update 會帶你到官網)。
Q4:DAT to CHOP 出來的 channel 不對,全擠成一排?
預設是每個橫排(row)一個 channel。改成 Channel per Column,第一個 Row 設 name、第一個 Column 設 value,每個直行(id/u/v/width/height)就會各自變成一個 channel。
Q5:MediaPipe 載入好久、還一直 crash?
第一次開會等比較久,因為要先載入必要的資料庫,耐心等別亂動。MediaPipe 的 .tox 檔很大容易 crash,一定要第一個 download 並排在最前面、配套檔也都要;刪節點先按 xx 再 delete 比較安全。
Q6:MediaPipe 開了但攝影機叫不出來?camera 一次只能被一個軟體使用。 把其他用到鏡頭的程式或 TD 檔先關掉,避免衝突導致開不起來。

課後練習

  1. Blob Track 框線視覺(本週基礎)。 Movie File In (TOP) → Resolution → Edge → Blob Track → DAT to CHOP → Select,再用 Rectangle (SOP)+Geometry (COMP)+Render (TOP)+Line (MAT) 的 instance 畫出會動的追蹤框,Camera 改 orthographic 對位。
  2. 手勢魔法方塊。MediaPipe detect hands,用 translate(兩手中點)、scale(hand distance,兩手 active 才觸發)、rotation(兩手平均)三組資料控制一個方塊。
  3. Face AR 濾鏡。 face+hand 複合追蹤:鼻子定位、耳距當深度、打開手 → Count (CHOP)Switch (TOP) 切換貼圖。換成自己的貼圖對位試試。
  4. (進階) 改用 gesture 的其他手勢(握拳、上指)觸發不同效果,或調高 max number of hands 試多人辨識。

影片章節

時間
內容
OpenCV 是什麼:開源電腦視覺函式庫
TD 只整合少數效果,最常用 Blob Track(TOP/CHOP)
Blob Track 下方兩個 DAT:uv/width/height/ID
用 Noise 測 min/max blob size
lost/active/expired:被遮住能追回、ID 不變
加 Resolution 降到 1/8,Blob Track 才順
更新最新版:移除兩點追蹤限制
加 Edge 做預處理,保留想要的輪廓
DAT to CHOP:Channel per Column+name/value
Rectangle→Geometry→Render+Line 材質做框
Camera 改 orthographic、對位 bottom left
width/height 給 scale,Over 疊回原圖校位
Body/Face Track 需 Windows+Nvidia,Mac 走 MediaPipe
MediaPipe 介紹+Torin 的 TD 整合套件
手勢魔法方塊:拉 MediaPipe、detect hands
translate 取兩手中點、scale 取 hand distance、rotation 取平均
Face AR:手勢 → Count → Switch 切換貼圖
鼻子定位 x/y、左右耳距離當深度 scale
 
⭑⭑⭑⭑⭑⭑⭑⭑⭑⭑⭑⭑⭑⭑⭑⭑
Luxmin Institute (互動研究院) on Patreon
教學講的是觀念,工具則是我們在真實展場裡跑過、改過、確定能用的東西。TD 元件、專案檔、校正與製作流程都陸續發佈在 Patreon 上,免費層可以先看 Demo 與公開工具,付費層取得完整檔案與更新:
https://www.patreon.com/cw/LuxminInstitute
最新的活動動態與報名資訊:
https://www.threads.com/@luxmin.institute
 
如有相關專案或其他需求,請洽 luxmin.art