本發(fā)明涉及人體動(dòng)作識(shí)別技術(shù)領(lǐng)域,特別涉及一種基于kinect的人體動(dòng)作識(shí)別算法。
背景技術(shù):
已知的人機(jī)交互體驗(yàn)包括聲音交互、腦電波交互、人體肢體姿態(tài)交互、手勢(shì)交互等。人體動(dòng)作識(shí)別的研究在計(jì)算機(jī)視覺、人工智能等領(lǐng)域都具有重要意義,而人體動(dòng)作識(shí)別面臨的主要問題是動(dòng)作的多變性和時(shí)空的復(fù)雜性。隨著動(dòng)作數(shù)量的增加,誤識(shí)別問題也會(huì)凸顯。目前,可通過穿戴式傳感器,如陀螺儀、加速度傳感器等,采集人體運(yùn)動(dòng)參數(shù)對(duì)人體動(dòng)作進(jìn)行識(shí)別,這種方法準(zhǔn)確性、實(shí)時(shí)性高,但附著傳感器使穿戴者舒適感降低。在基于計(jì)算機(jī)視覺的方法中,當(dāng)前的研究主要是基于2d視覺的動(dòng)作識(shí)別,而系統(tǒng)受到計(jì)算機(jī)圖像處理能力的極大制約,特別是實(shí)時(shí)圖像處理,會(huì)受到光照、遮蔽、陰影等因素的制約,對(duì)最終的識(shí)別結(jié)果造成影響。
技術(shù)實(shí)現(xiàn)要素:
為了克服上述現(xiàn)有技術(shù)的缺點(diǎn),本發(fā)明的目的在于提供一種基于kinect的人體動(dòng)作識(shí)別算法,能夠?qū)崿F(xiàn)對(duì)人體動(dòng)作的識(shí)別,降低人體動(dòng)作識(shí)算法的復(fù)雜度,提高動(dòng)作的識(shí)別率和識(shí)別速度,具有識(shí)別快速、準(zhǔn)確、算法簡單的特點(diǎn)。
為了達(dá)到上述目的,本發(fā)明采取的技術(shù)方案為:
基于kinect的人體動(dòng)作識(shí)別算法,步驟如下:
首先,通過kinect骨架追蹤技術(shù),采用基于java的processing開發(fā)環(huán)境來讀取kinect傳來的人體骨骼數(shù)據(jù),獲取人體20個(gè)關(guān)節(jié)點(diǎn)的三維圖像坐標(biāo)并將其轉(zhuǎn)化為世界坐標(biāo);
其次,采用加權(quán)遞推平均濾波算法對(duì)人體20個(gè)關(guān)節(jié)點(diǎn)的世界坐標(biāo)進(jìn)行濾波,去除世界坐標(biāo)的波動(dòng),然后對(duì)濾波后的關(guān)節(jié)點(diǎn)坐標(biāo)進(jìn)行特征提取,得到關(guān)節(jié)點(diǎn)坐標(biāo)向量所成的角度特征;
最后,制作人體標(biāo)準(zhǔn)動(dòng)作模板并輸入到txt文本中,然后根據(jù)當(dāng)前采集的角度特征與標(biāo)準(zhǔn)動(dòng)作模板進(jìn)行匹配實(shí)現(xiàn)對(duì)人體動(dòng)作的識(shí)別。
所述人體20個(gè)關(guān)節(jié)點(diǎn)具體為:頭部、頸部、脊柱、左肩、左肘、左手腕、左手、臀部、左臀部、左膝蓋、左腳腕、左腳、右肩、右肘、右手腕、右手、右臀部、右膝蓋、右腳腕、右腳。
所述將三維圖像坐標(biāo)換算為世界坐標(biāo)的具體步驟為:
根據(jù)如下變換公式將三維圖像坐標(biāo)(ximage,yimage,zimage)轉(zhuǎn)化為世界坐標(biāo)(xworld,yworld,zworld):
其中,kinect的分辨率w×h為640×480;h=3.5×10-4rad,k=12.36cm,l=1.18rad,o=3.7cm,d′=-10,f=0.0021。
所述進(jìn)行特征提取以得到關(guān)節(jié)點(diǎn)坐標(biāo)向量所成的角度特征的具體操作步驟為:
先由三維世界坐標(biāo)計(jì)算出某一個(gè)關(guān)節(jié)點(diǎn)與兩個(gè)相鄰關(guān)節(jié)點(diǎn)之間的向量,分別用vi、vj表示,然后根據(jù)三維向量角度計(jì)算公式
則角度θi-j就是當(dāng)前某一個(gè)關(guān)節(jié)點(diǎn)的角度特征,依次對(duì)整個(gè)人體關(guān)節(jié)點(diǎn)的角度特征進(jìn)行提取。
所述關(guān)節(jié)點(diǎn)之間的向量具體為:上半身需要計(jì)算九個(gè)向量,分別是:頭部到頸部、頸部到脊柱、左肩到頸部、左肘到左肩、左腕到左肘、左手到左腕、右肩到頸部、右肘到右肩、右腕到右肘、右手到右腕的向量;下半身需要計(jì)算六個(gè)向量,分別是:臀部到左膝部、左膝部到左腳踝、左腳踝到左腳、臀部到右膝部、右膝部到右腳踝、右腳踝到右腳的向量。
本發(fā)明與現(xiàn)有技術(shù)相比的有益效果為:
本發(fā)明利用kinect的骨骼追蹤技術(shù)來獲取操受試者關(guān)鍵點(diǎn)三維坐標(biāo),提取出人體的關(guān)節(jié)向量,并與事先保存在txt文本中的標(biāo)準(zhǔn)模板進(jìn)行模板匹配,實(shí)現(xiàn)對(duì)人體動(dòng)作的識(shí)別,可降低人體動(dòng)作識(shí)算法的復(fù)雜度,提高動(dòng)作的識(shí)別率和識(shí)別速度。本發(fā)明基于kinect的人體動(dòng)作識(shí)別算法不受kinect相機(jī)位置、光照、識(shí)別者的影響,識(shí)別率較高且識(shí)別快速,在相同實(shí)驗(yàn)條件下測(cè)得算法的平均識(shí)別率為95.2%,平均識(shí)別時(shí)間為32.5ms?;趉inect的動(dòng)作識(shí)別算法可以作為模式識(shí)別和人工智能的基礎(chǔ),對(duì)人體動(dòng)作識(shí)別具有重要意義。
附圖說明
圖1為本發(fā)明人體動(dòng)作識(shí)別算法的流程圖。
圖2為本發(fā)明kinect追蹤人體關(guān)節(jié)點(diǎn)的示意圖。
具體實(shí)施方式
下面結(jié)合實(shí)施例對(duì)本發(fā)明做進(jìn)一步詳細(xì)說明。
本發(fā)明的算法流程如附圖1所示,具體實(shí)施步驟如下:
step1、利用kinect骨架追蹤技術(shù),在坐標(biāo)輸出之前追蹤人體的20個(gè)關(guān)節(jié)點(diǎn),形成一副人體骨架系統(tǒng),通過每個(gè)像素中的關(guān)節(jié)點(diǎn)與kinect標(biāo)準(zhǔn)的骨架系統(tǒng)相比較,可以準(zhǔn)確地確定人體的關(guān)節(jié)部位。通過基于java的processing開發(fā)環(huán)境來讀取人體關(guān)節(jié)點(diǎn)的數(shù)據(jù)。
圖2為kinect實(shí)時(shí)追蹤的人體的20個(gè)關(guān)鍵點(diǎn)的示意圖。由圖2可知,這20個(gè)關(guān)節(jié)點(diǎn)覆蓋了整個(gè)人體,可以完成對(duì)人體動(dòng)作的識(shí)別。
step2、通過kinect的骨骼追蹤技術(shù)獲取的坐標(biāo)為深度圖像坐標(biāo),而人體動(dòng)作識(shí)別要在世界坐標(biāo)中進(jìn)行,所以首先要將圖像坐標(biāo)換算為世界坐標(biāo)。圖像坐標(biāo)(ximage,yimage,zimage)到世界坐標(biāo)(xworld,yworld,zworld)的變換公式如下:
其中,kinect的分辨率w×h為640×480;h=3.5×10-4rad,k=12.36cm,l=1.18rad,o=3.7cm,d′=-10,f=0.0021。
利用以上公式就得到了人體20個(gè)關(guān)鍵點(diǎn)的世界三維坐標(biāo),是特征提取和模板匹配的基礎(chǔ)。
step3、通過kinect的骨骼追蹤技術(shù)獲取的坐標(biāo)為深度圖像坐標(biāo),由于kinect每秒鐘獲取30幀圖像,也就是關(guān)節(jié)點(diǎn)的坐標(biāo)每秒刷新30次,再加上人身體的抖動(dòng),所以kinect骨骼追蹤技術(shù)采集到的關(guān)節(jié)點(diǎn)坐標(biāo)會(huì)有波動(dòng),首先采用加權(quán)遞推平均濾波算法對(duì)坐標(biāo)進(jìn)行濾波,去除坐標(biāo)的波動(dòng),公式為:
其中wi為權(quán)系數(shù),yi和yk為濾波前和濾波后的關(guān)節(jié)點(diǎn)坐標(biāo),且
step4、在濾波基礎(chǔ)上計(jì)算角度特征,先由三維坐標(biāo)計(jì)算出關(guān)鍵點(diǎn)之間的向量。將上下半身的向量分開計(jì)算,上半身需要計(jì)算九個(gè)向量,分別是:頭部到頸部、頸部到脊柱、左肩到頸部、左肘到左肩、左腕到左肘、左手到左腕的向量,右肩到頸部、右肘到右肩、右腕到右肘、右手到右腕的向量。下半身需要計(jì)算六個(gè)向量,分別是:臀部到左膝部、左膝部到左腳踝、左腳踝到左腳的向量,臀部到右膝部、右膝部到右腳踝、右腳踝到右腳的向量。
利用這些人體關(guān)節(jié)向量來提取角度特征,例如我們利用肩部坐標(biāo)與肘部坐標(biāo)相減得到向量vi,用肘部坐標(biāo)減去腕部坐標(biāo)得到向量vj,然后根據(jù)三維向量角度計(jì)算公式
那么角度θi-j就是當(dāng)前人體肘部的角度特征。根據(jù)以上公式,對(duì)整個(gè)人體的角度進(jìn)行提取,上半身提取七個(gè)角度特征,下半身提取六個(gè)角度特征。抽取出的角度特征是一個(gè)相對(duì)的特征魯棒性好,只與關(guān)鍵點(diǎn)相對(duì)位置有關(guān),與光照、背景變化、操作者以及操作者的位置無關(guān)。
step5、確定標(biāo)準(zhǔn)動(dòng)作模板,對(duì)10名受試者(5男5女)進(jìn)行數(shù)據(jù)采集。kinect設(shè)備水平放置,距離地面48cm。背景是一面白墻,測(cè)試者面對(duì)著kinect設(shè)備,全身處在視野范圍內(nèi),距離其240cm的位置,按順序做動(dòng)作。對(duì)測(cè)試者每個(gè)動(dòng)作進(jìn)行采集,然后進(jìn)行上述的濾波和特征提取,對(duì)不同測(cè)試者的相同動(dòng)作特征分別取平均值,得到標(biāo)準(zhǔn)的人體動(dòng)作各個(gè)關(guān)節(jié)的角度特征,最后確定動(dòng)作模板和匹配閾值。
step6、進(jìn)行模板匹配,首先提取出當(dāng)前動(dòng)作的特征向量,分為上半身和下半身。判斷上半身特征是否變化,如果變化就匹配上半身模板。然后判斷下半身特征是否變化,如果變化就匹配下半身模板。最終將兩個(gè)結(jié)果結(jié)合,得到識(shí)別結(jié)果。如果兩個(gè)特征都沒有變化,則確定動(dòng)作是站立。模板匹配采用相似度函數(shù)來度量兩個(gè)特征向量的相似度,得到匹配的百分比。若匹配百分比大于85%,則認(rèn)為當(dāng)前動(dòng)作就是模板的動(dòng)作。