先整理且分類資料後,利用函式來計算所需要的部位角度,然後將先前MediaPipe的節點加上OpenCV來畫出人體骨架及角度,最後加上限制條件來判斷動作對錯,最後以影片來顯示出結果。
資料整理
先將我們收集到的資料整理
並分類成各種錯誤(表1)及正確的
後,放進對應的資料夾。
表1、錯誤類別
角度計算
角度計算分為了兩種,第一種 (圖2) 計算的是BA向量和BC向量之間的夾角,範圍是 0° 到 180°。由於只考慮兩個向量之間的夾角,所以無法區分順時針或逆時針方向,因此結果永遠在 0° 到 180° 之間。
第二種 (圖3) 則是在計算BA和BC之間的角度後,再用向量外積 (圖4) 判斷方向,如果外積的結果為負數,表示角度是順時針方向,因此角度變為360 − θ,若為正數則不變。
[圖2]
[圖3]
[圖4]
繪製骨架及角度
使用先前MediaPipe取得的節點,將點跟點之間連線(圖5),之後再將剛剛計算三個點座標的向量內積公式來取得我們所需要的角度,最後將取得的結果以影片(圖6)的方式呈現出來。
[圖5]
[圖6]
做判斷式
接下來,將針對動作判斷中所關注的關鍵部位,預設相應的數值,以便判斷該動作的姿勢是否出現錯誤,詳細數值請見下表(表2)。
表2、各個錯誤對應參數
在最後,為了驗證所設定的值是否可以正確判斷動作,利用迴圈測試準確率並加以調整參數,以確保設定的參數是好的。
深蹲
藉由下圖可以看到所選擇的角度,身體前傾-body forward(圖7)為85°、身體後仰-body back(圖8)為145°,蹲得過低-hip low(圖9)為70°,而膝蓋超過腳趾-toe error(圖10)則是可以知道選擇的d是24。
圖7、身體前傾準確率
圖8、身體後仰準確率
圖9、蹲得過低準確率
圖10、膝蓋超過腳趾準確率
伏地挺身
藉由下圖可以看到所選擇的角度,臀部過高-hip high(圖11)為190°、臀部過低-hip low(圖12)為170°,膝蓋過低-knee low(圖13)為160°
圖11、臀部過高準確率
圖12、臀部過低準確率
圖13、膝蓋過低準確率
棒式
藉由下圖可以看到所選擇的角度,臀部過高-hip high(圖14)為190°、臀部過低-hip low(圖15)為170°,膝蓋過低-knee low(圖16)為170°
圖14、臀部過高準確率
圖15、臀部過低準確率
圖16、膝蓋過低準確率
橋式
藉由下圖可以看到所選擇的角度,骨盆抬起過高-hip high(圖17)為200°、骨盆高度不足-hip low(圖18)為170°,膝蓋夾角過小-knee error 1(圖19)為75°,蓋夾角過大-knee error 2(圖20)為100°
圖17、骨盤抬起過高準確率
圖19、膝蓋夾角過小準確率
圖18、骨盤高度不足準確率
圖20、膝蓋夾角過大準確率