由於節點資料是透過 MediaPipe 提取,數據量龐大且結構複雜,希望系統能夠根據不同的運動類型與使用者的個別狀況自動進行調整,以提升判斷的準確率。因此,我們最初決定採用機器學習的方法作為研究的核心方向。
資料預處理
將資料整理的影片,分成正面 (表1)、側面(表2)這兩種類別,並將它們分割成一個動作一個影片後做預處理,有添加標籤、節點挑選、新增特徵值(計算角度、距離、夾角)、將未偵測值(表示為0)轉換為NA值、標準化資料。
表1、正面
表2、側面
模型選擇
選擇一個能認知完整動作並且偵測出動作是否正確的模型,由於資料主要是影像為主,因此想從處理時間序列資料相關的模型做選擇,經過討論後決定使用Bi-LSTM來進行偵測,使用Bi-LSTM在預想的流程中,將完成一個完整動作影片的幀數、節點、特徵和原本影片呈現動作的正確或錯誤方式當作標籤投入訓練,期望最後能判別動作的正確或錯誤。
模型架構
雙向LSTM(BiLSTM)是一種處理序列數據的模型(圖一),常用於分析影片中動作的時序資訊。它同時利用正向(Forward)LSTM和後向(Backward)LSTM來獲取完整的時間資訊。正向LSTM從序列的開頭到結尾進行處理,累積過去時間步驟的資訊來預測當前動作;而後向LSTM則從序列的結尾到開頭進行處理,幫助模型理解未來資訊,從而提升對當前步驟的理解。模型接收輸入(X1, X2...Xn),經過正向與後向LSTM處理後將結果組合,輸出(Y1, Y2...Yn),最終用來判定動作是否正確或錯誤。
輸入:一部影片的幀數、節點、新增特徵值等資料
輸出:正確或錯誤類別
圖一
鏡頭測試
使用了 BILTM 模型來評估使用者的姿勢是否正確。建立了四個不同的模型來檢測各種可能的姿勢錯誤,並根據結果給予即時回饋。 如果所有模型的輸出值都是 0,則表示姿勢良好,顯示 good。若任何一個模型的輸出值介於 1 到 5,則表示存在不良姿勢,並標註具體問題,如 Bad posture - shallow、Bad posture - back warp 等,(圖二)為系統偵測到 "Bad posture - shallow" 和 "Bad posture - back warp",表示該使用者的姿勢有這兩項問題。(圖三)顯示了系統對姿勢的分析結果,包含五個不同的評估模型,每個模型會輸出一個數值來判斷姿勢是否正確。表格中的欄位包含三個部分:模型名稱(左欄),代表系統用來偵測特定姿勢問題的模型,例如 good_bad_shallow(前傾不足)、good_bad_back_warp(過度後仰)等;輸出數值(中欄),若輸出為 0,表示該部分姿勢正確,若為 1 到 5,則代表存在某種姿勢問題;顯示結果(右欄),系統會根據數值顯示「Good」,或標明具體的「Bad posture」類型,以提示使用者需要調整的姿勢問題。
圖二、鏡頭測試
圖三、分析結果對應
實驗反思
在本次機器學習模型的開發與測試過程中,經歷了從模型選擇、架構設計、鏡頭測試到最終結果評估的完整流程。然而,在實際應用測試時,發現該模型在偵測階段無法正確辨識目標,且運行過程中出現明顯的卡頓現象,最終導致該模型未能被採納。因此方法無法進行,所以決定使用判別式來進行測試