實際使用人體姿態估測時,還會遇到一個很現實的問題:人體關鍵點不是每一個瞬間都一定抓得到。
例如做蚌殼式時,使用者是側躺的。
這代表左右兩側的髖部、膝蓋甚至腳踝,可能會在攝影機畫面中互相重疊。
其中一側的身體也可能被另一側擋住。
除此之外,還可能受到很多因素影響,例如:
這時候,如果系統還是直接拿每一個偵測到的座標進行判斷,就可能產生很奇怪的結果。
例如某一瞬間髖部的位置突然跳掉,系統可能就誤以為:
「骨盆發生很大的旋轉!」
但其實只是那一幀的關鍵點估測不穩定。
因此,除了關鍵點的 x、y、z 座標之外,我們還需要注意這些資料本身到底可不可靠。
MediaPipe 的人體關鍵點資料中,也會提供像是 visibility 之類的資訊,可以幫助我們判斷某個關鍵點目前是否有足夠的可見程度。
如果某個重要關鍵點的可信度太低,系統可以先選擇:
暫時不要進行動作判斷。
而不是硬把這一幀算進結果。
另外,也可以利用前後幾個影格一起判斷。
例如某個髖部座標只有一瞬間突然偏移很多,但下一幀又恢復正常,就有可能只是估測誤差,而不是真的發生了一個非常快速的骨盆旋轉。
因此,之後可能還需要加入一些簡單的平滑處理,避免單一影格的異常數值直接影響結果。
這也讓我發現:姿態估測並不是取得座標之後就可以直接使用。
真正做成系統時,還要先確認:「這組座標到底值不值得相信?」
如果連人體關鍵點本身都不穩定,後面的角度、骨盆旋轉、動作次數甚至姿勢判斷,都可能一起受到影響。
所以除了「看懂動作」之外,系統其實還需要先學會一件事:
什麼時候應該判斷,什麼時候應該先不要判斷。