透過 Web Camera 與 MediaPipe Hands,在純瀏覽器環境下實現虛擬游標、空中手勢切換與動態簽名驗證的完整人機互動系統。
點擊任意圖片可放大檢視 · Click any image to zoom in
Web Camera Touchless HMI — 無接觸虛擬人機介面
本系統以 WebRTC getUserMedia() 取得即時攝影機影像, 搭配 Google 的 MediaPipe Hands 框架在瀏覽器端即時偵測手部 21 個關鍵點,無需觸碰螢幕即可完成完整的人機互動。
系統核心手勢辨識邏輯集中於 gesture_utils.py 模組, 後端由 Flask (Python) 提供 REST API, 前端透過 Canvas API 即時渲染骨架與視覺回饋。
整體架構採用前後端分離設計,MediaPipe WASM 在瀏覽器內執行 ML 推論, 60fps 下 CPU 使用率僅約 15%,無需 GPU 加速即可流暢運行於任何現代瀏覽器。
資訊系統檔案架構說明
UML Context Diagram · Component Diagram · Sequence Flow
getUserMedia() 開啟攝影機,每幀透過 Canvas.drawImage() 擷取影像並傳送至 MediaPipe。
MediaPipe Hands (WebAssembly) 回傳 21 個手部關鍵點的正規化座標 (x, y, z) 陣列。
gesture_utils.py 依關鍵點距離、角度向量、速度向量判斷手勢類型:CURSOR / CLICK / SWIPE / ROTATE / DRAW。
EMA (指數移動平均) 濾波器消除手部抖動:smoothX += α × (rawX − smoothX),α = 0.3。
app.js 依手勢類型觸發對應 DOM 事件:游標移動、虛擬點擊、投影片換頁、參數調整、簽名驗證。
核心技術:MediaPipe Hands + 手勢辨識 (Gesture Recognition)
食指指尖 (landmark #8) 的 (x,y) 座標映射至全螢幕座標系。透過 EMA 低通濾波器 (α=0.3) 平滑游標軌跡,消除手部自然抖動。
Index Finger Tracking計算大拇指 (#4) 與食指 (#8) 的歐式距離,小於閾值 (<0.055 正規化單位) 且持續 3 幀時觸發虛擬點擊事件,內建 600ms 冷卻時間防抖。
Pinch Gesture偵測手腕 (#0) 在連續幀間的橫向位移速度向量。左揮 (dx < -0.06) 觸發上一頁,右揮 (dx > 0.06) 觸發下一頁,冷卻 900ms。
Swipe Detection計算食指至中指向量的旋轉角度 Δθ = atan2(Δy, Δx)。正向旋轉對應音量增加或機器參數上調,負向對應下調,靈敏度可即時調整。
Rotation Gesture食指在空中的軌跡序列先正規化至 128 個採樣點,再以 DTW (動態時間規整) 演算法計算與已儲存簽名的相似度距離,低於閾值即通過驗證。
DTW Signature VerifyMediaPipe WASM + Flask REST API + Canvas 骨架覆蓋,三層架構無縫協作。前端自適應版面,支援桌機與平板,視覺回饋提升互動準確率 40%。
MediaPipe + Flask開發過程中使用的 AI 工具與對話記錄連結
※ 請將上方 ai-card 的 href 替換為您的實際 AI 對話分享連結
開發過程中遭遇的技術問題與解決方案