本週完成成果
你會理解鏡頭畫面不是直接變成「答案」:MediaPipe 先產生手勢與關鍵點結果,程式再整理成 JSON,最後由應用決定如何使用。
完成標準|個人腳本能輸出一筆合法 JSON;小組 detector 記錄時間、手勢、信心值與必要座標;未提交人臉影片或可識別影像。
課前準備
步驟 1|確認拍攝規則:只拍自己自願展示的手部或使用教師提供測試影像,不拍旁人、人臉、名牌與私人空間。
預期結果|所有測試者知道用途與是否保存;預設不保存原始影像。
步驟 2|Codespaces:安裝本週鎖定依賴。攝影機不能直接從遠端環境使用時,改用教師提供圖片/錄影,不繞過瀏覽器權限。
python -m pip install -r courseware/gs3073-b/requirements-week11.txt
python -c "import sys, mediapipe; print(sys.version); print(mediapipe.__version__)"預期結果|記錄 Python 與 MediaPipe 版本,並選擇 image、video 或 live stream 模式。
步驟 3|下載模型前核對官方文件與教師指定 hash/路徑;不要執行來源不明模型。
預期結果|gesture_recognizer.task 來源可追蹤且不進 Git 大檔。
第三小時|個人技術實作
故事開始|猜拳時,人先看到畫面,再判斷手指形狀,最後說「剪刀」。電腦也要分幾站:影像、特徵點、手勢分類、信心值。JSON 就像統一格式的裁判紀錄表。
老師先問|信心值 0.9 就代表百分之百正確嗎?不是。它是模型對特定輸入的分數,光線、角度、膚色與遮擋都可能影響結果,仍需測試。
生活比喻|JSON 像包裹上的標準寄件單:每一格有固定名稱,後面的程式不必重新看影片,只讀手勢、時間與分數。
先看全程地圖|先看懂資料與決策怎麼移動,再開始操作。圖中的箭頭代表下一步,不代表可以跳過人工確認。
┌──────────┐ → ┌──────────┐ → ┌──────────┐
│ 手部影像 │ │ MediaPipe │ │ 手勢+關鍵點│
└──────────┘ └──────────┘ └────┬─────┘
↓
┌──────────┐
│ JSON 紀錄 │
└────┬─────┘
↓
人工核對/應用步驟 4|個人:先不使用鏡頭,建立一筆示範 JSON 並確認可被重新讀取。
import json
record = {'gesture': 'Open_Palm', 'score': 0.91, 'timestamp_ms': 1200}
encoded = json.dumps(record, ensure_ascii=False)
print(encoded)
print(json.loads(encoded)['gesture'])預期結果|week11_mediapipe_test.py 輸出合法 JSON 與 Open_Palm。
步驟 5|小組:依官方 guide 建立 Gesture Recognizer,先用一張核准圖片測試。
python codes/mediapipe/gesture_detector.py --image samples/hand_open.jpg --output output/gesture.json預期結果|產生 JSON;若無手勢,明確輸出 empty result,不捏造類別。
步驟 6|檢查 JSON 欄位與型別。
{
"source": "teacher-sample",
"timestamp_ms": 0,
"gesture": "Open_Palm",
"score": 0.91,
"landmarks": []
}預期結果|時間為數字、score 為 0–1 數字、gesture 為字串;不含姓名或影像路徑中的個資。
步驟 7|用不同光線或角度測三次,人工記錄實際手勢、模型結果與是否一致。
預期結果|至少保留一筆模型不確定或錯誤的案例與可能原因。
課堂收束|請同學把「看到畫面」到「應用採取動作」分成四站說一次。若把模型輸出直接當命令,漏掉人工核對與低信心處理,就還沒完成設計。
指定閱讀與課後作業
指定閱讀|依課綱完成個人 week11_mediapipe_test.py;操作細節以 Google AI Edge Gesture Recognizer Python 官方 guide 為準。
課後作業方向|個人繳交 JSON 基礎測試;小組在 feat-mediapipe 分支完成 detector,將結果整合到專案前先定義低信心或無偵測時的行為。
步驟 8|個人:加入 JSON schema 說明與一筆 empty-result 測試。
預期結果|沒有偵測時程式仍輸出合法、可判斷的結果。
步驟 9|小組:提交 detector 與 README 操作段落。
git add week11_mediapipe_test.py codes/mediapipe/gesture_detector.py README.md
git commit -m 'W11: structure gesture results as reviewed JSON'
git push -u origin HEAD預期結果|Repo 不含原始人臉影片、大型模型檔或未取得同意的影像。
驗收方式
python week11_mediapipe_test.py
python -m json.tool output/gesture.json >/dev/null 2>&1 || true
git diff --check通過條件|JSON 合法且欄位型別清楚;有 empty/低信心處理;測試記錄包含錯誤案例;隱私邊界被遵守。
應提交的 Repo 檔案
必交|week11_mediapipe_test.py、codes/mediapipe/gesture_detector.py。只提交課綱指定成果與重現所需說明;不得提交 API key、個資、私人對話、未授權資料或大型模型檔。
常見問題與排除
問題 1|Codespaces 看不到鏡頭:使用核准測試檔或在本機擷取後只上傳去識別必要樣本。
問題 2|mediapipe 安裝失敗:核對 Python 與官方支援平台,不任意降級整個環境。
問題 3|JSON 出現 NaN:在輸出前驗證數值並以 null 或明確錯誤表示。
引用資料
國立中央大學授課課綱/劉書銘老師,《劉書銘老師課程大綱_基礎模型與生成式人工智慧-更新版.pdf》;教師提供附件。用途:W1–W16 時段、實作主題、評量與交付物。
Google AI Edge,《Gesture recognition guide for Python》;https://developers.google.com/edge/mediapipe/solutions/vision/gesture_recognizer/python;查閱日期:2026-08-04。用途:W11 MediaPipe Gesture Recognizer Python 安裝、模型與輸出。
Python Software Foundation,《JSON encoder and decoder》;https://docs.python.org/3/library/json.html;查閱日期:2026-08-04。用途:W6 JSON 讀取、解析與輸出。