建立選手基礎節點座標檔

  使用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檔。