王 軻, 王 亞, 段渭軍,, 于 琪
(1.西北工業大學 體育部,陜西 西安 710072;2.西北工業大學 電子信息學院,陜西 西安 710072)
研究發現Kinect傳感器[1,2]的開發和使用能實現非接觸式的動作采集。本文以大學生體質健康測試項目立定跳遠為例,借助微軟Kinect傳感器,進行其動作狀態跟蹤、捕捉和姿態分析,不僅可以解決傳統學生體質健康測試存在的問題,而且可以完成在取得準確測試結果的同時能夠獲取測試過程數據,為高校體育教學及體質健康測試評價提供理論和參考依據。
Kinect 2.0[3]配備紅外發射器,主動投射近紅外光譜,照射到粗糙物體、或是穿透毛玻璃后,光譜發生扭曲,會形成隨機的反射斑點(稱為散斑),進而能被紅外攝像頭讀取版采用。同時,深度(紅外)攝像頭配合紅外發射器使用,對發射回傳感器的紅外光譜利用飛行時間(time of flight,TOF)獲取紅外脈沖由被測物體反射到接收器所用的時間[4]。然后Kinect 根據光速和時間來計算深度信息,從而創建可視范圍內的人體、物體的深度圖[5~7]。
設發射頻率為f,紅外波長為λ,傳播周期為Τ,相位差為Δφ,信號傳播時間為t,則可推得目標點到相機所在平面的距離d為
(1)
(2)
式中 光速c為3×108m/s,n為紅外發射器收發一次信號的波長個數。由于環境和紅外頻率等因素的多重影響,距離Kinect較近位置處獲取到的深度點的密度要大于后方,故距離較近的位置可以獲得比較精確的深度信息。Kinect可以獲得水平57°(以Kinect為中心,左右各28.5°)和豎直43°(以Kinect為中心,上下各21.5°)的偵測范圍。
1.1.1 深度圖像數據
Kinect深度傳感器可以獲取距離Kinect最近的物體到Kinect所在平面的垂直距離。其深度判別范圍中黑白區域為正常工作區域,紅色與藍色區域分別代表無窮近與大于4.5 m的測量區域,綠色范圍內數據判別精度不高,故其可較準確地返回它前方0.5~4.5 m距離的深度值信息。
1.1.2 人體識別
Kinect先識別類似于人體的“大”字形物體的輪廓,然后通過邊緣檢測、噪聲處理等計算機視覺方面的算法進行處理,最終將人體從背景中分離出來[8,9]。該過程中Kinect對深度圖像逐個像素掃描,進行“像素級”評估。Kinect的視野可以同時跟蹤6個用戶,每個用戶都會被分配到一個唯一的ID。如前所述,灰度圖像每一像素點的16位中,高13位記錄深度數據,低3位記錄用戶ID,用來對識別出的人體進行編號,ID的三位都為0表示不是人體,或者骨骼引擎關閉,如圖1所示。

圖1 人體識別分割
通過人體識別分割已經將人體從背景中分離,通過識別人體的25個關節點來對骨骼進行識別。如圖2所示獲得的骨骼關節點的三維坐標信息需要進行坐標轉換[10,11]。

圖2 人體骨骼關節位置示意
通常深度圖像幀的x,y坐標系表示在傳感器上對應的坐標,而不表示實際物理環境的位置坐標。深度圖像坐標系的點,類型為DepthImagePoint(x,y,z) ,(x,y)為深度圖像像素坐標,z(mm)為深度值。而骨骼坐標系的點,類型為SkeletonPoint(x,y,z) , (x,y,z)(m)為空間坐標。
深度圖像坐標系和骨骼坐標系均以Kinect 傳感器的紅外攝像頭為中心,x,y軸分別與圖像的x,y軸平行,z軸為傳感器的方向,與圖像平面垂直。這樣構成的直角坐標系為攝像機坐標系。
測試系統的硬件設備由Kinect、立定跳遠測試儀、IC卡讀卡器、一臺電腦和服務器組成。主要包括三大模塊:讀卡器、Kinect和體重儀組成的信息采集模塊,電腦作為系統的載體組成的處理模塊和數據庫(如圖3所示)。

圖3 系統構架
身體幀數據由人體25個關節點的集合,每幀包含了關節的3D位置和方向。人體跟蹤的有三種狀態:跟蹤失敗(not tracked)、推測狀態(inferred)、跟蹤狀態(tracked)。跟蹤失敗狀態下,身體數據的Position字段以及相關的節點數組中的每一個位置點值都是0,即x,y,z值均為0;推測狀態探測到了人體對象,但追蹤沒有被激活,身體數據的Position數據有值,相關的關節數據位置點的值都是0;追蹤狀態表示人體骨骼信息正在被追蹤,身體數據的Position信息和相關的節點數據的位置信息都為非0值。Position為一個Camera Space Point類型的字段,代表所有骨骼的中間點(如圖2所示)。
本文在姿勢庫中定義了兩種姿勢,即伸開雙臂呈“T”字形來啟動測量和舉起雙手以清除當前數據重新測量。測試者做出特定的姿勢通過與姿勢庫中模板匹配,就是對關節點進行命中測試來觸發相應的事件。
本方法關節點采用節點三角形法,即計算某些關節點之間的角度(如圖4 所示)。由左肩關節點(shoulderleft) 、左肘關節點(elbowleft) 和左手腕關節點(wristleft) 三點構成的三角形中,可根據距離公式分別求出a,b,c三邊邊長,再根據余玄定理求出夾角。當夾角在規定的閾值范圍內,可以判斷為有效姿勢。

圖4 節點三角形法
首先需確定起跳位置和最終人體的移動距離,根據TOF測距原理,人體景深數據表示從景深(紅外)攝像頭到該物體表面的距離(mm),每一個像素為16 bit,測距范圍在0.5~8 m之間。其所使用的空間坐標系不同一般的空間坐標系,其中z軸坐標零點為景深攝像頭的位置,x軸與y軸的零點與傳統空間坐標系相同,正方向為指向的正前方。值得注意的是,由Kinect獲取的景深值是物體距離傳感器所在水平線的距離,而非至傳感器的直接距離。
測試對象處于離Kinect距離為L的位置上,擺出“T”姿勢,相機標定此時測試對象的位置為起始位置。當起跳之后,通過腳部坐標點的變化,識別出已經處于跳遠運動狀態中并標定用戶落地的位置。通過計算起始點和落地點之間的距離,計算出測試對象的立定跳遠距離(圖5)。

圖5 立定跳遠的測量方法
當測試對象與Kinect距離不斷縮小時,即z軸方向上的值減小,腳部骨骼點y軸方向上的值也會隨之減小。為了解決此問題,通過采集不同距離時多組(z,y),擬合出一條矯正曲線,使得在水平平面上腳部骨骼點坐標值y不會因z的值變化而改變(圖6)。

圖6 矯正曲線
立定跳遠流程設計如圖7所示。

圖7 跳遠測量流程
3.1.1 測試對象
隨機選取12名本科一年級大學生(男女各6名)。
3.1.2 測試方法
1)選用學校立定跳遠測試儀器;2)選用本次實驗的Kinect傳感器測量方法及儀器。考慮到在立定跳遠動作會出現的兩種情況:1)用戶穩穩地保持在落地點位置;2)由于慣性用戶會向前邁步。采取以下解決方法:第一種情況下用戶腳部骨骼點在y軸方向上的坐標值將不再發生變化。計算獲取數據中10組坐標值差值,如果差值在允許誤差范圍內時,則判定用戶已經落地,并將10組坐標值均值作為用戶落地點位置。第二種情況下,通過MATLAB軟件繪制腳部骨骼點y軸方向上的位移圖,會發現在曲線會有多個拐點,這些拐點即為腳部多次落地y軸坐標變化。取10組數據進行變化趨勢分析,當數據中第一次出現拐點,則取該拐點處值為落地點位置。
實驗結果如表1所示。表明,根據方法(1)測試立定跳遠成績的平均誤差約為1.07 %;而根據Kinect方法(2)測試的平均誤差約為0.32 %,驗證了采用Kinect傳感器的TOF測距原理及該方法的準確性。

表1 立定跳遠測量結果
該方法可在多個項目中應用,實現集多項測試于一體的功能,同時Kinect設備可以實現基于視頻動作捕捉,對運動姿態分析有很大幫助。不僅在取得準確測試結果的同時能夠獲取測試過程數據,而且能為體育教學、體質測試評價提供理論和參考依據,具有一定的應用價值。