馬佳琳,梁 鵬
(沈陽(yáng)師范大學(xué) 軟件學(xué)院,沈陽(yáng) 110034)
隨著動(dòng)作捕捉在影視特效、動(dòng)畫和體感游戲中的廣泛應(yīng)用,運(yùn)動(dòng)數(shù)據(jù)采集技術(shù)在近10年的發(fā)展中取得了明顯的進(jìn)步。Kinect作為微軟旗下的基于體感技術(shù)的數(shù)據(jù)掃描設(shè)備,己經(jīng)被廣泛應(yīng)用在人體運(yùn)動(dòng)檢測(cè)中,其不斷完善的運(yùn)動(dòng)捕捉技術(shù)和語(yǔ)音識(shí)別技術(shù),使人們只需要身體動(dòng)作或聲音就可以輕松地與機(jī)器對(duì)話,不僅增加了人機(jī)交互的樂(lè)趣,同時(shí)也為運(yùn)動(dòng)訓(xùn)練提供了新的訓(xùn)練指導(dǎo)思路[1]:運(yùn)動(dòng)數(shù)據(jù)采集在許多專業(yè)運(yùn)動(dòng)訓(xùn)練和國(guó)家訓(xùn)練中被應(yīng)用于輔助研究人員從多角度觀察教練動(dòng)作,獲得多個(gè)動(dòng)作參數(shù)和生理指標(biāo)的訓(xùn)練數(shù)據(jù),為科學(xué)訓(xùn)練提供可靠數(shù)據(jù)來(lái)源[2]。教練可以通過(guò)各種訓(xùn)練數(shù)據(jù)為每個(gè)訓(xùn)練人員定制科學(xué)的訓(xùn)練計(jì)劃,有針對(duì)性地指導(dǎo)訓(xùn)練,準(zhǔn)確掌握運(yùn)動(dòng)員的身體輪廓和身體位置的掃描數(shù)據(jù)與標(biāo)準(zhǔn)動(dòng)作的數(shù)據(jù)進(jìn)行對(duì)比并反饋錯(cuò)位信息糾正用戶肢體動(dòng)作的錯(cuò)誤[3],從而降低學(xué)員運(yùn)動(dòng)難度來(lái)提高訓(xùn)練效率,使運(yùn)動(dòng)訓(xùn)練在數(shù)字化、參數(shù)化的環(huán)境下擺脫傳統(tǒng)訓(xùn)練的困境,從而有效的降低用戶學(xué)習(xí)難度和提高用戶動(dòng)作學(xué)習(xí)的效率,因此對(duì)于運(yùn)動(dòng)捕捉技術(shù)的研究可以有效提高運(yùn)動(dòng)訓(xùn)練水平。
Kinect最大的優(yōu)點(diǎn)之一就是通過(guò)光編碼技術(shù)獲得深度圖,這與TOF技術(shù)或結(jié)構(gòu)技術(shù),以及傳統(tǒng)的光學(xué)測(cè)量技術(shù)不同,紅外反射鏡連續(xù)向空間發(fā)射光,并進(jìn)行空間編碼[4],然后通過(guò)CMOS感光芯片讀取編碼計(jì)算出空間距離[5]。由于kinect不需要特殊的感光芯片,從而大大降低了成本。它并非通過(guò)紅外線發(fā)射器發(fā)出激光,而是將二者分布在視覺(jué)空間中,當(dāng)鋪向空間物體發(fā)射光時(shí),會(huì)根據(jù)不同的距離和變化的模式形成反射光,形成高度隨機(jī)的反射點(diǎn),相當(dāng)于三維的標(biāo)記[6]。
Kinect技術(shù)的核心是最重要的三維深度信息處理技術(shù),用于接收來(lái)自紅外發(fā)射器和紅外攝像機(jī)的深度信息來(lái)判斷物體的距離。微軟使用的3D深度信息技術(shù)來(lái)自Prime Sense。它提供了運(yùn)動(dòng)檢測(cè)技術(shù)和檢測(cè)芯片PS1080,以及利用光編碼的專利技術(shù)[7]。
動(dòng)作識(shí)別的體系結(jié)構(gòu)如圖1所示。該系統(tǒng)由3個(gè)主要模塊組成:數(shù)據(jù)采集、數(shù)據(jù)處理與特征提取、人體姿態(tài)識(shí)別。在數(shù)據(jù)采集模塊中,Kinect可以采集骨骼不同類型的信息:顏色數(shù)據(jù)流、深度數(shù)據(jù)流和骨骼信息流。數(shù)據(jù)處理和特征提取模塊的目的是根據(jù)需要進(jìn)行數(shù)據(jù)規(guī)范化等處理并計(jì)算姿態(tài)表示的相關(guān)特征[8]。除此之外,Kinect還提供了與傳統(tǒng)相機(jī)相同的彩色圖像,所有針對(duì)傳統(tǒng)相機(jī)提出的特征都可以應(yīng)用于Kinect設(shè)備[9]。系統(tǒng)著重通過(guò)使用骨骼信息進(jìn)行人體的姿態(tài)識(shí)別,如屈伸、躺著等動(dòng)作。
圖1 Kinect識(shí)別主要核心模塊Fig.1 Main core modules of Kinect recognition
圖2 關(guān)節(jié)位置坐標(biāo)軸(右手坐標(biāo)系)Fig.2 Skeleton position axis (right hand coordinate system)
在新版Kinect SDK中,提供了骨骼跟蹤工具。此工具旨在收集關(guān)節(jié)作為相對(duì)于設(shè)備本身的點(diǎn),并在幀中收集關(guān)節(jié)信息。對(duì)于每個(gè)幀,估計(jì)并收集20個(gè)關(guān)節(jié)點(diǎn)的位置[10]。對(duì)于每個(gè)關(guān)節(jié)點(diǎn)有3個(gè)關(guān)鍵點(diǎn)需要注意:首先是關(guān)節(jié)點(diǎn)的索引,每個(gè)關(guān)節(jié)點(diǎn)都有一個(gè)唯一的索引值,在深度傳感器的坐標(biāo)軸中用x、y和z軸表示,原點(diǎn)代表傳感器陣列,z軸沿傳感器陣列指向的方向[11]。關(guān)節(jié)坐標(biāo)如圖2所示。
最后是關(guān)節(jié)狀態(tài)的設(shè)置。通過(guò)Kinect跟蹤關(guān)節(jié)位置,將關(guān)節(jié)狀態(tài)設(shè)置為“已標(biāo)記”,如果無(wú)法跟蹤則根據(jù)算法從其他關(guān)節(jié)進(jìn)行推斷,從而確定關(guān)節(jié)位置,并將關(guān)節(jié)的狀態(tài)設(shè)置為“未標(biāo)記”。
本系統(tǒng)是基于Kinect和實(shí)時(shí)運(yùn)動(dòng)重定向的人體動(dòng)畫合成,最終目標(biāo)是實(shí)現(xiàn)實(shí)時(shí)運(yùn)動(dòng)捕捉數(shù)據(jù)驅(qū)動(dòng)模型,所以首先應(yīng)該將Kinect采集到3D骨骼模型進(jìn)行一定的預(yù)處理操作,然后與骨骼關(guān)節(jié)點(diǎn)進(jìn)行匹配[12],把得出的運(yùn)動(dòng)數(shù)據(jù)在Kincet應(yīng)用平臺(tái)上驅(qū)動(dòng)3D模型,逆重定向于系統(tǒng)中的人體骨骼模型上,用以驅(qū)動(dòng)平臺(tái)中的3D人物模型運(yùn)動(dòng),進(jìn)而引導(dǎo)用戶高效學(xué)習(xí)。整個(gè)系統(tǒng)的合成過(guò)程包括低維數(shù)轉(zhuǎn)換為高維數(shù)據(jù)、三維網(wǎng)格加載、網(wǎng)格骨骼提取、節(jié)點(diǎn)間匹配、實(shí)時(shí)運(yùn)動(dòng)捕捉數(shù)據(jù)驅(qū)動(dòng)的網(wǎng)格模型等[13]。其中低維數(shù)據(jù)轉(zhuǎn)換為高維數(shù)據(jù)的步驟如下:
1) 將數(shù)據(jù)庫(kù)中2個(gè)近期合成的運(yùn)動(dòng)數(shù)據(jù)和根位置進(jìn)行相應(yīng)的局部運(yùn)動(dòng)后建立模型;
2) 通過(guò)平滑運(yùn)動(dòng)建立局部線性模型的數(shù)據(jù)流點(diǎn)陣,實(shí)時(shí)合成運(yùn)動(dòng)數(shù)據(jù)動(dòng)畫;
3) 將實(shí)時(shí)合成的運(yùn)動(dòng)數(shù)據(jù)結(jié)合根節(jié)點(diǎn)合成新的運(yùn)動(dòng)數(shù)據(jù)并使其運(yùn)用于3D動(dòng)畫。
運(yùn)動(dòng)學(xué)習(xí)系統(tǒng)的3D人體實(shí)時(shí)動(dòng)畫設(shè)計(jì)流程如圖3所示。首先利用Kinect設(shè)備捕捉人體運(yùn)動(dòng)數(shù)據(jù),將數(shù)據(jù)進(jìn)行人體合成;然后提取3D網(wǎng)格模型中的3D骨骼模型后與關(guān)鍵的骨骼節(jié)點(diǎn)相匹配、逆重定向于3D人體骨骼模型以及皮膚變形[14]。
圖3 運(yùn)動(dòng)學(xué)習(xí)系統(tǒng)的設(shè)計(jì)流程圖Fig.3 The design flow of The motion training system
為了評(píng)估運(yùn)動(dòng)訓(xùn)練系統(tǒng)的性能,系統(tǒng)需要建立一個(gè)提取骨骼信息的聯(lián)合數(shù)據(jù)庫(kù)來(lái)進(jìn)行測(cè)試:通過(guò)微軟的Skeleton API開(kāi)發(fā)了C++數(shù)據(jù)庫(kù)捕獲工具,輸入窗口顯示的是由RGB相機(jī)捕獲的彩色圖像,“骨骼”視圖窗口顯示了使用紅外熱像儀時(shí)檢測(cè)到的人的骨骼節(jié)點(diǎn)[15]。
在骨骼信息數(shù)據(jù)庫(kù)的建立過(guò)程中,Kinect的高度設(shè)置為100 cm,人體姿態(tài)預(yù)設(shè)為“站立”“坐著”“彎曲”和“躺下”,Kinect擺放角度為0°時(shí),“躺著”的角度為-10°。測(cè)試室使用的是白熾燈界面如圖4所示。
圖4 骨骼信息數(shù)據(jù)采集界面Fig.4 Interface of the skeleton information data collection
系統(tǒng)捕獲了測(cè)試人員的4個(gè)主要姿勢(shì)(站立,坐著,彎曲和躺下)。每個(gè)姿勢(shì)記錄3次,每次持續(xù)時(shí)間大約5~8 s。要求測(cè)試人員按照如下要求做出動(dòng)作:
1) 站立姿勢(shì):測(cè)試人員敞開(kāi)手臂站立,眼睛注視Kinect。在第1次和第2次記錄時(shí)間中測(cè)試人員與Kinect之間的距離為190 cm,在第3次記錄時(shí)間中距離為210 cm。
2) 坐姿:測(cè)試人員坐在椅子上后背伸直,膝蓋垂直折疊,手放在大腿上,眼睛注視著Kinect。第1次和第2次記錄時(shí)間,測(cè)試人員與Kinect之間的距離為190 cm,第3次記錄時(shí)間,距離為210 cm。
3) 躺姿:從Kinect的角度來(lái)看,人體處于水平方向。測(cè)試人員的腿伸直,手沿身體伸展。對(duì)于所有3個(gè)記錄時(shí)間,測(cè)試人員與Kinect之間的距離為190 cm。
4) 彎曲姿勢(shì):測(cè)試人員垂直于Kinect彎曲,手放在膝蓋上。第1次記錄時(shí)雙腿閉合,在第2次和第3次記錄時(shí),測(cè)試人員的雙腿張開(kāi)得與肩膀一樣寬。所有這3遍,測(cè)試人員與Kinect之間的距離均為190 cm。
在錄制過(guò)程中,測(cè)試人員保持在相同位置。圖5給出了骨骼信息數(shù)據(jù)庫(kù)中4個(gè)姿勢(shì)的部分圖像。
圖5 4種姿勢(shì)的骨骼節(jié)點(diǎn)數(shù)據(jù)Fig.5 Skeleton node data of four postures
借助微軟公司推出的Kinect體感設(shè)備進(jìn)行人體姿態(tài)識(shí)別的研究,利用其實(shí)時(shí)追蹤用戶身體輪廓位置的特點(diǎn),通過(guò)結(jié)合3D場(chǎng)景中的3D人物模型追蹤用戶骨骼節(jié)點(diǎn),從而確定動(dòng)作數(shù)據(jù)并和標(biāo)準(zhǔn)數(shù)據(jù)進(jìn)行實(shí)時(shí)對(duì)比;通過(guò)基于Kinect運(yùn)動(dòng)數(shù)據(jù)捕捉設(shè)備來(lái)獲取運(yùn)動(dòng)參數(shù),統(tǒng)計(jì)運(yùn)動(dòng)規(guī)律,克服傳統(tǒng)的體育動(dòng)作學(xué)習(xí)耗費(fèi)時(shí)間長(zhǎng)、動(dòng)作的標(biāo)準(zhǔn)程度差、學(xué)習(xí)效率低的困難,從而點(diǎn)明了體育動(dòng)作學(xué)習(xí)的指導(dǎo)方向,對(duì)有效提高運(yùn)動(dòng)員競(jìng)技水平、提高運(yùn)動(dòng)訓(xùn)練水平提供科學(xué)依據(jù)具有重要的現(xiàn)實(shí)意義。