建立選手基礎節點座標檔
使用CMU - Panoptic Studio(卡內基·梅隆大學的研究單位)在GitHub所提供的OpenPose[16]執行檔,輸出影片中所有人的25個身體節點json檔。

(25個人體節點位置)
0 | Nose | 鼻子 | 13 | LKnee | 左膝蓋 |
---|---|---|---|---|---|
1 | Neck | 脖子 | 14 | LAnkle | 左腳踝 |
2 | RShoulder | 右肩膀 | 15 | REye | 右眼睛 |
3 | RElbow | 右手肘 | 16 | LEye | 左眼睛 |
4 | RWrist | 右手腕 | 17 | REar | 右耳朵 |
5 | LShoulder | 左肩膀 | 18 | LEar | 左耳朵 |
6 | LElbow | 左手肘 | 19 | LBigToe | 左腳內 |
7 | LWrist | 左手腕 | 20 | LSmallToe | 左腳外 |
8 | MidHip | 跨中心 | 21 | LHeel | 左腳跟 |
9 | RHip | 右臀 | 22 | RBigToe | 右腳內 |
10 | RKnee | 右膝蓋 | 23 | RSmallToe | 右腳外 |
11 | RAnkle | 右腳踝 | 24 | RHeel | 右腳跟 |
12 | LHip | 左跨 |
其執行檔的安裝流程和使用方式均有放置在GitHub上。
將須判斷之影片輸入後,其會輸出標示人體關節點的影片,及下圖的json檔樣式。因我們僅需人體關節點的數據檔,因此僅輸出json檔以利後續研究。

(OpenPose 輸出的json檔)
(OpenPose輸出的人物節點影片)
Openpose[16]所輸出的json檔,為了後續使用便利,因此將其輸出的檔案,使用多個自訂義的程式去校正,並輸出CSV檔,主要執行流程如下圖
資料整理
1. 讀取第一個json檔
將json檔中的每個人單獨整理成一個list檔,並利用第一幀的照片套用場地線去辨識兩位選手的座標範圍,並將偵測出的座標當作人物初始座標。

(第一幀所有人25個節點的list)

(偵測出的兩位選手的第一幀座標)
2. 座標比對
利用後減前的X、Y座標距離差,判斷是否為該選手,並用此方式將選手在每一幀的坐標點找出,將每一個節點都單獨整理成一個list檔,所以每位選手都會有25個list去分別對應其節點(請參考人物節點介紹中的25個人體節點位置圖[15])。
3. 資料筆數矯正
會有幾幀因為偵測誤差或是其他干擾因素而導致資料有誤差,所以需要確認資料筆數是否和其幀數一致,若不一致,找出缺少的幀數並將該幀補0,讓資料筆數一致。

(檢查資料筆數是否正確)
資料前處理
1. KNN遺失值插補
將節點檔中的遺失值進行插補,但為了維持資料的可用性,也為了降低資料的偏誤,遺失的幀數只要大於等於10幀,便不進行插補。

(偵測哪一幀需要插補)
2. ARIMA檢查軌跡 & 資料插補
因OpenPose[16]偵測時有可能會因姿勢或是攝影角度……等各項因素,而產生偵測的節點位置誤差,所以導致其運動軌跡不連貫。為避免此情況,故使用ARIMA[13]檢查各點的運動軌跡,並將軌跡異常點列出後歸0,並再次使用KNN進行插補,插補條件同上一步。

(使用ARIMA檢測發現的異常點)
3. 資料輸出
輸出兩位選手在影片中每一幀的25個人體節點CSV檔。