iT邦幫忙

2026 iThome 鐵人賽

DAY 24
0
Build on Google AI

Build on Google AI :長者照護 —— 口腔機能訓練 與 延緩認知退化系列 第 24 篇

少年,我看你骨骼精奇。Google MediaPipe Pose、Hand、Gesture、Holistic 你聽過嗎?(上)

  • 分享至 

  • xImage
  •  

一、前言

黑熊俠客 Face Landmarker 邀請同門師兄來到府裡。
老爺想藉此機會看看,哪一位俠客最有長輩緣:
最適合帶長輩做暖身操,帶長輩跟著音樂動一動。

今天先來認識四位來自 MediaPipe 的俠客:
Google MediaPipe Pose、Hand、Gesture、Holistic


二、初見四位俠客

同門 看什麼 模型檔(.task) Model Maker 官方指南
Hand Landmarker 每隻手 21 點,分左右手 7.8 MB 官方沒列 Android、iOS、Web、Python
Gesture Recognizer 手的 21 點+7 種手勢 8.4 MB 可以 Android、iOS、Web、Python
Pose Landmarker 全身 33 點 lite 5.8 MB、full 9.4 MB、heavy 30.7 MB 官方沒列 Android、iOS、Web、Python
Holistic Landmarker 臉 478+身體 33+雙手 42,共 553 點 13.7 MB 官方沒列 Android、iOS、Web、Python

Model Maker:Google 提供的工具,讓開發者可以拿自己的資料,
重新訓練 MediaPipe 的模型,例如教 Gesture 認新的手勢。
官方目前已標示不再積極維護(Deprecated)。


三、Hand Landmarker:偵測手部 21 個點

官方說明,Hand 裡面包了兩個模型:

  • 手掌偵測(palm detection):在整個畫面裡找手。
  • 手部特徵點(hand landmarks):在找到的手上,標出 21 個特徵點。


四、Gesture Recognizer:認得 7 種手勢

官方說明,Gesture 是兩組模型疊起來:

  • 手部特徵點模型:跟 Hand 同一套,先找手掌、再標 21 個特徵點。
  • 手勢分類模型:這裡會分兩步,
    先把特徵點轉成一組向量(embedding),再交給內建的分類器判斷是哪一種手勢。

手勢分類這段,只看特徵點的數值,不看圖片。
官方有備註:只需要手的點,用 Hand 就好。

  • 有手、但認不出手勢:手勢名稱回 "None"。
  • 沒偵測到手:結果是空的清單(長度 0),不是 null。

五、Pose Landmarker:全身 33 個點

官方說明,Pose 分兩段:

  • 先找人:人體偵測模型(pose detector),找出畫面裡的人。
  • 再標點:特徵點模型(pose landmarker),標出身體的 33 個特徵點。

VIDEO、LIVE_STREAM 模式會追蹤,不用每一格都重新找人。

跟 Day7 介紹的 Face Landmarker 一樣:
找人(找臉)的偵測模型,只在需要定位、重新定位時才執行。

(一)三個模型

模型 官方寫的大小 下載的 .task 官方寫的速度(機型 Pixel 3 )
lite 3 MB 5.8 MB CPU 約 44 FPS、GPU 約 49 FPS
full 6 MB 9.4 MB CPU 約 18 FPS、GPU 約 40 FPS
heavy 26 MB 30.7 MB CPU 約 4 FPS、GPU 約 19 FPS

三者的差別是「速度」和「準確度」的取捨:
lite 最小、最快,heavy 最大、最準。

官方用手機後鏡頭拍的照片評估「關鍵點正確率」(PDJ,只看 2D 位置):
lite 約 87.0%、full 約 91.8%、heavy 約 94.2%。

(二)官方寫的用途和限制

最新的官方指南(2026 年 10 月更新):

  • 用途:找出身體的關鍵位置、分析姿勢、把動作分類;
    模型是為「在裝置上即時運作的健身應用」最佳化的。
  • 人數:有 num_poses 參數,可以設定最多偵測幾個人。

指南連到的模型說明是 2021 年寫的,目前仍是最新一份,補充了這幾點:

  • 授權:Apache License, Version 2.0。
  • 不適用:
    畫面裡有多人、離鏡頭太遠(例如超過 4 公尺)、看不到頭、
    要精確的公制深度;
    監控或辨識身分則是明確排除,這項技術也沒有提供這種功能。
  • 多人:
    模型說明裡的評估以單人為主,跟現在的 num_poses 不衝突;
    只是多人時準不準,不在這份評估裡。
  • 不做攸關性命的判斷:
    「not intended for human life-critical decisions」,
    主要用途寫的是娛樂(entertainment)。
    跟健口動一動的定位一樣:陪著動,不做醫療判斷。

(三)33 個點

33 個點分三區:臉 0~10、上半身 11~22、下半身 23~32。

手的部分,17~22 每隻手只有各 3 個點:
官方說明:小指、食指、拇指的 knuckle(指根關節)。


六、Holistic Landmarker:一次看臉、身體、雙手

官方說明,Holistic 把 Face、Pose、Hand 的模型包在一起:

  • 臉:臉部偵測+臉部網格,478 點(含 10 個虹膜點),可以加 52 個 blendshape。
  • 身體:Pose 的偵測+33 點。
  • 手:每隻手 21 點,手的位置從身體的點找出來(見下方)。

合起來,最多一次給 553 點。

Holistic 目前只支援一個人;家人一起入鏡時,它只會抓其中一個。

手是從身體找出來的

MediaPipe 在 GitHub 公開的原始碼裡,
有 Holistic 把幾個模型串起來的流程:先偵測、追蹤身體;
找左手時,拿 Pose 的左手腕、左小指、左食指當線索(節錄):

PoseIndices pose_indices = {
    /*.wrist_idx =*/ 
    static_cast<int>(pose_landmarker::PoseLandmarkName::kLeftWrist),
    /*.pinky_idx =*/
    static_cast<int>(pose_landmarker::PoseLandmarkName::kLeftPinky1),
    /*.index_idx = */
    static_cast<int>(pose_landmarker::PoseLandmarkName::kLeftIndex1),
};

手的位置,要靠身體的這幾個點。
我拿同一張照片,把舉起那隻手的手腕遮住,再跑一次 Holistic:

遮住哪裡 舉起的那隻手 另一隻手 身體的手腕點
沒遮 找到 21 點 找到 位置正確,visibility 0.98
只遮手腕 找不到 找到 位置跑掉,visibility 還有 0.94
遮手腕+前臂 找不到 找到 跑得更遠,visibility 0.75

沒有前一格可以參考時(例如第一張畫面),手腕一被遮住,Holistic 就找不到這隻手。

被遮住的手腕,Pose 照樣給一個推測的位置,遮得越多偏得越遠;
跟 Day11 遮住臉的測試一樣。

影片中途才遮住的話,Holistic 會沿用上一格的位置,還是找得到,這部分明天再比。


七、長輩坐著,動作偵測得到嗎?

Day8 介紹過的 Instant Demos,也有 Pose Landmarker,
打開瀏覽器、允許使用視訊鏡頭就能測。

我坐在椅子上,依序做動作(lite,2 倍速):

仰頭、低頭、左轉頭、右轉頭、聳肩、
舉左手、舉右手、張開雙臂、拍手

看什麼 結果
下半身 臀部的點落在畫面底邊,大腿是往下的兩條線
頭部動作 仰頭、低頭、轉頭,臉上的點跟著動
舉手、拍手 手腕的點跟得上,拍手時兩個手腕靠在胸前
抖動 點位穩定,沒有亂跳

三個模型,肉眼看不出差別。
Demo 畫面上會顯示推論時間,從坐著的那一段,每個模型各抽 20 格讀數字:

模型 推論時間
lite 約 13~19 ms
full 約 14~20 ms
heavy 約 30 ms

這是電腦瀏覽器上的數字,手機要另外測。

張開雙臂:手會不會出框

電腦的視訊鏡頭,畫面是橫的;
手機直放時,畫面變成直的,左右窄很多。

所以張開雙臂這個動作,另外用手機的瀏覽器開同一個 Demo,
直放、橫放各錄兩段:

  • 手在畫面裡:點位跟著手臂,方向正確。
  • 手出框:模型會給一個猜測的手腕位置,可能猜錯;
    左圖舉高的那隻手,線往下畫到了腰部。
  • 直放、橫放都出框:
    這次直放、橫放都出現手出框;
    直放的左右比較窄。

關鍵不是直放或橫放,而是手有沒有留在畫面裡。

判斷「張開雙臂」時,可以這樣處理:

  • 先看手腕的 visibility,太低就不用手腕。
  • 改看手肘:手肘幾乎都還在畫面裡。
  • 提醒長輩坐遠一點,讓手留在畫面裡。

八、小結

  • Hand:
    先找手掌、再標 21 個點;0 是手腕,4、8、12、16、20 是指尖。
  • Gesture:
    用 Hand 的 21 點,再加手勢分類,認得 7 種手勢;
    有手但認不出時回 None。
  • Pose:
    先找人、再標 33 個點;lite、full、heavy 三個模型。
  • Holistic:
    一次給臉、身體、雙手共 553 點;手是從身體的點找出來的。
  • 長輩坐著:
    點位都穩;手出框時,模型會用猜的。

坐著也看得到,手要留在畫面裡。


九、預告

明天,四位俠客正式過招:
同一張照片,在實機測試跑一次,
參數怎麼設、拿到的數字怎麼讀,一起來看。

舉左手的「左」,是誰的左邊?
同樣看手,Hand、Gesture、Holistic 給的結果一樣嗎?
手指比幾,哪一位俠客認得出來?

感謝有緣看到這邊的你~
希望佛菩薩也祝福你:🌟平安自在 幸福安心🌟
南無觀世音菩薩🍀 南無地藏菩薩🏠 南無阿彌陀佛☀️


上一篇
Gemini API:師爺正式聘用(下)
系列文
Build on Google AI :長者照護 —— 口腔機能訓練 與 延緩認知退化 共 24 篇
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言