李 順, 郭 星, 吳建國(guó)
(1.安徽大學(xué) 智能嵌入式技術(shù)研究中心,安徽 合肥 230601;2.安徽大學(xué) 計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院,安徽 合肥 230601)
人體動(dòng)作識(shí)別一直是計(jì)算機(jī)視覺(jué)、人工智能和模式識(shí)別等熱門(mén)研究方向[1],包括視頻智能監(jiān)控、康復(fù)訓(xùn)練、虛擬現(xiàn)實(shí)、人機(jī)交互等[2]。目前動(dòng)作識(shí)別主要分為兩類方法:利用穿戴式設(shè)備來(lái)獲取人體運(yùn)動(dòng)信息[3],方法增加人體負(fù)擔(dān)和操作復(fù)雜,且實(shí)際推廣困難;目前主流的利用視覺(jué)捕捉技術(shù)[4],通過(guò)攝像頭采集人體運(yùn)動(dòng)信息,一種是傳統(tǒng)的三原色(RGB)彩色攝像頭采集信息然后分析識(shí)別動(dòng)作,例如Wang L等人[5]提取視頻中每一幀的圖像,根據(jù)圖像處理等相關(guān)算法和彩色視頻行為庫(kù)對(duì)比,實(shí)現(xiàn)動(dòng)作的分類和識(shí)別。普通攝像頭容易受光照以及背景變化等噪聲影響,且獲取圖像信息有限,后期處理相當(dāng)困難,且在識(shí)別速度和準(zhǔn)確率上較差。另外一種是3D深度傳感器,例如微軟Kinect、Intel RealSense 3D等,能克服傳統(tǒng)RGB攝像頭易受光照影響且能提供三維深度信息。微軟的Kinect的上市,使研究人員低成本獲取視頻中人體各關(guān)節(jié)點(diǎn)三維坐標(biāo)信息和場(chǎng)景深度信息等[6]。目前基于關(guān)節(jié)點(diǎn)信息的人體動(dòng)作識(shí)別研究得到關(guān)注,如Xia L等人[7]將獲取的人體關(guān)節(jié)點(diǎn)信息轉(zhuǎn)換為直方圖,然后使用HMM模型對(duì)動(dòng)作分類和識(shí)別,Patsadu O等人[8]將Kinect獲取的關(guān)節(jié)點(diǎn)信息利用反向傳播(back propagation,BP)神經(jīng)網(wǎng)絡(luò)、支持向量機(jī)(support vector machine,SVM)等多種分類器進(jìn)行人體動(dòng)識(shí)別研究。Kinect獲取的骨骼信息視頻中,幀率為30 FPS,并不是每一幀都是關(guān)鍵幀,冗余幀的存在會(huì)在動(dòng)作識(shí)別速度和精度上都會(huì)干擾。個(gè)體的身高和體型差異,不能直接使用骨骼點(diǎn)信息,需要將骨骼信息轉(zhuǎn)換成具有縮放和角度不變性的特征量。
本文利用Kinect v2采集人體骨骼點(diǎn)信息,通過(guò)改進(jìn)的動(dòng)態(tài)時(shí)間規(guī)整(dynamic time warping,DTW)算法解決與動(dòng)作模板庫(kù)中模板動(dòng)作時(shí)間序列長(zhǎng)度不一致的問(wèn)題[9],實(shí)現(xiàn)對(duì)6種常見(jiàn)動(dòng)作的識(shí)別。通過(guò)實(shí)際測(cè)試,以及與其他算法對(duì)比實(shí)驗(yàn),表明本文方法在識(shí)別率和識(shí)別速度上效果顯著。
關(guān)鍵幀是反映視頻中關(guān)鍵的視頻信息[10]。K-means算法常用來(lái)提取視頻中的關(guān)鍵幀,但傳統(tǒng)的K-means算法易受噪聲和孤立點(diǎn)的影響。本文針對(duì)Kinect v2采集的動(dòng)作視頻中25個(gè)骨骼點(diǎn)結(jié)合人體運(yùn)動(dòng)的認(rèn)知,采用加權(quán)K-means算法提取關(guān)鍵幀[11]。
在人體運(yùn)動(dòng)中,不同骨骼點(diǎn)的地位不同,例如脊柱點(diǎn)相對(duì)于手腕點(diǎn)權(quán)重更大,且在動(dòng)作中手腕點(diǎn)擺動(dòng)幅度較大對(duì)聚類中心會(huì)干擾。針對(duì)每個(gè)骨骼點(diǎn)在運(yùn)動(dòng)中不同權(quán)重,骨骼點(diǎn)的權(quán)值定義為
(1)
Kinect v2采集的人體骨架視頻中,每一幀圖像包含25個(gè)骨骼點(diǎn)三維坐標(biāo)值組成75維的向量。一段動(dòng)作序列由N個(gè)幀圖像組成,表示為{f1,f2,…,fN-1,fN},fi∈FN,fi為N幀圖像中第i幀,F(xiàn)N為由每幀75維向量組成的一段動(dòng)作視頻的向量集合。將向量集合FN聚類劃分成K個(gè)簇,每個(gè)簇中幀相似度較高。
1)從幀集合FN中隨機(jī)選取K個(gè)幀作為聚類質(zhì)心,表示c1,c2…ck,k≤N。
2)根據(jù)式(2),計(jì)算每幀fi與K個(gè)聚類質(zhì)心的歐氏距離,并將其歸類到距離最近的聚類質(zhì)心的那個(gè)簇中
labeli=argmin‖fi-cj‖,1≤j≤k
(2)
3)根據(jù)式(3),更新每個(gè)簇的加權(quán)平均值聚類質(zhì)心
(3)
式中Gj為聚類Cj中數(shù)據(jù)對(duì)象的權(quán)值,rij為fi是否屬于j類,如果是,rij為1,否則為0。
4)重復(fù)計(jì)算步驟(2)和步驟(3),直至新舊質(zhì)心相等或差值小于閾值結(jié)束。
通過(guò)上面的方法,將一段動(dòng)作視頻劃分為k個(gè)簇,并獲取到每個(gè)簇的聚類質(zhì)心ci。計(jì)算聚類質(zhì)心ci和動(dòng)作序列中幀fi同一骨骼點(diǎn)的三維坐標(biāo)值的歐氏距離,尋找關(guān)鍵幀。例如,計(jì)算骨骼點(diǎn)1和聚類質(zhì)心的骨骼點(diǎn)1的歐氏距離,以此類推,距離值最小的骨骼點(diǎn)標(biāo)記為1,其他記為0,如視頻中幀通過(guò)計(jì)算結(jié)果為{1,1,0,0,0,0,0,1,1,1,1,1,1,1,1,1,0,0,0,1,1,1,0,0,1}。具體步驟如下:
1)利用加權(quán)K-means算法獲取一段動(dòng)作序的K個(gè)聚類質(zhì)心,Gi={(xi1,yi1,zi1),(xi2,yi2,zi2),…,(xij,yij,zij)},i∈(1,2…,k),j=25。其中,(xij,yij,zi1j)為第i個(gè)聚類質(zhì)心中第j個(gè)骨骼點(diǎn)的三維坐標(biāo)。一段連續(xù)動(dòng)作視頻為Fn={(xn1,yn1,zn1),(xn2,yn2,zn2),…,(xnj,ynj,znj)},n∈(1,2,3,…,N),j=25。其中,(xnj,ynj,znj)為動(dòng)作視頻中第n幀的第j骨骼節(jié)點(diǎn)的三維坐標(biāo)。
2)計(jì)算聚類質(zhì)心Gi和動(dòng)作視頻中幀F(xiàn)n中25個(gè)相對(duì)應(yīng)骨骼點(diǎn)三維坐標(biāo)之間的歐氏距離為
D=Min(Gi,Fn)
={dis((xi1,yi1,zi1),(xn1,yn1,zn1)),
dis((xi2,yi2,zi2),(xn2,yn2,zn2)),…,
(4)
dis((xij,yij,zij),(xnj,ynj,znj))}
式中n∈(1,2,3,…,N),j=25,dis((xij,yij,zij),(xnj,ynj,znj))為第i個(gè)聚類質(zhì)心和第n幀在骨骼點(diǎn)j上的三維坐標(biāo)值的歐氏距離。對(duì)動(dòng)作視頻中的每一幀計(jì)算距離后,將最小值的dis((xij,yij,zij),(xnj,ynj,znj))標(biāo)記為1,否則標(biāo)記為0。通過(guò)式(3)獲取每一幀和K個(gè)聚類質(zhì)心對(duì)應(yīng)關(guān)鍵點(diǎn)的最小歐氏距離,并根據(jù)D中1的個(gè)數(shù)多少,排序選取前K個(gè)幀作為關(guān)鍵幀,再根據(jù)每個(gè)關(guān)鍵幀在原始動(dòng)作視頻的索引排序,就可以保證K個(gè)關(guān)鍵幀和動(dòng)作視頻中幀順序一致。
通過(guò)對(duì)本文中6種常見(jiàn)動(dòng)作實(shí)驗(yàn)對(duì)比,k=10時(shí)準(zhǔn)確度和識(shí)別速度能兩者俱佳。
動(dòng)作視頻的關(guān)鍵幀提取后,需要對(duì)關(guān)鍵幀中的特征向量進(jìn)行提取,個(gè)體的體型差異、距離Kinect遠(yuǎn)近和動(dòng)作的差異性。本文針對(duì)人體動(dòng)作的運(yùn)動(dòng)特征,利用骨骼點(diǎn)數(shù)據(jù)構(gòu)建人體結(jié)構(gòu)向量[12],計(jì)算出向量角度[13]和向量模比值作為描述動(dòng)作的特征量。
根據(jù)人的動(dòng)作行為特點(diǎn),本文構(gòu)建22組人體結(jié)構(gòu)向量表示人體的軀干信息,如GRShoullder_RElbow表示右肩到右肘關(guān)節(jié)部位,GRElbos_Rhand為有右肘到右手部位。
人在做同一個(gè)動(dòng)作時(shí),人體的肢體變化趨勢(shì)幅度相似,如右揮手時(shí),右肘部分關(guān)節(jié)角度變化明顯。因此選取向量角度值作為特征能很好消除個(gè)體差異和Kinect距離等問(wèn)題。設(shè)向量a=(x1,y1,z1),b=(x2,y2,z2),根據(jù)式(5)計(jì)算兩向量的夾角〈a,b〉。
(5)
利用上述式(5)計(jì)算人體結(jié)構(gòu)的向量角度,如根據(jù)GRShoullder_RElbow和GRElbos_Rwrist可計(jì)算出右肘部位的關(guān)節(jié)角度GRShoullder_RElelow_Rwrist,如圖1所示。
圖1 右肘關(guān)節(jié)角度
利用骨骼點(diǎn)三維坐標(biāo)信息,結(jié)合人體動(dòng)作行為分析,從關(guān)鍵幀中提取出跟日常動(dòng)作關(guān)鍵性的16個(gè)關(guān)節(jié)角度組成的關(guān)節(jié)角度特征向量,ANneck_RShoulder_Relbow,ARShoulder_RElbow_Rwrist,ANneck_LShoulder_Lelbow,ALShoulder_LElbow_Lwrist,ANeck_RShoulder_Spine,ANeck_LShoulder_Spine,ARElbow_RWrist_Spine,ARShoulder_RElbow_Spine,ALShoulder_LElbow_Spine,ALElbow_LWrist_Spine,ARShoulder_Spine_RHip,ASpine_RHip_RKnee,ARHip_RKnee_RFoot,ALShoulder_Spine_LHip,ASpine_LHip_LKnee,ALHipt_LKnee_LFoot。
如果使用關(guān)節(jié)角度來(lái)描述所有動(dòng)作,在某些動(dòng)作描述時(shí)往往信息不足。比如頭部與上肢體的相對(duì)位置,僅僅通過(guò)關(guān)節(jié)角度不能提供足夠的信息。因此,本文引入4個(gè)向量模比值來(lái)提供根據(jù)豐富的行為信息。GHead_Rhand,GHead_Lhand,Gspine_Rhand,GSpine_Lhand,分別為頭部到雙手和脊椎到雙手的人體結(jié)構(gòu)向量。根據(jù)式(6)計(jì)算出4組向量模比值
a=(x1,y1,z1),b=(x2,y2,z2),
(6)
4組向量模比值分別為RHead_Rhand,RSpine_Rhand,RHead_Lhand,RSpine_Lhand。
動(dòng)作視頻中關(guān)鍵幀的姿態(tài)特征由16個(gè)關(guān)節(jié)角度和4個(gè)向量模比值組成20維的特征向量組成,即B=(A1,A2…A16,R1,R2,R3,R4),A為關(guān)節(jié)角度,R表示向量模比值。一個(gè)動(dòng)作序列F有連續(xù)的姿態(tài)表示,即F=(B1,B2,…,Bi)。
Kinect采集的動(dòng)作序列與動(dòng)作模板在時(shí)序上存在明顯的不一致。本文采用優(yōu)化后的DTW算法可以很好解決時(shí)序不一致問(wèn)題,判斷兩個(gè)序列的相似度,從而實(shí)現(xiàn)動(dòng)作的識(shí)別。
測(cè)試模板X和標(biāo)準(zhǔn)模板Y是長(zhǎng)度為m和n的序列:X=(x1,x2,…,xi,…,xM),Y=(y1,y2,…,yj,…,yN)。其中,xi和yi在維數(shù)上相同,N和M可以不相同。d(x1,y1)為x1和y1的距離值,可表示為d(1,1),D(X,Y)為由x1和y1的距離值d(x1,y1),經(jīng)過(guò)若干節(jié)點(diǎn)對(duì),直到xM和yN的距離值d(xM,yN)的累計(jì)距離和,即
D(X,Y)=∑d(xi,yi),1≤i≤M,1≤j≤N
(7)
為了確保在X和Y搜索出一條全局最優(yōu)路徑,需要滿足三個(gè)約束條件。第一邊界條件,從左下角(1,1)開(kāi)始到右上角(M,N)終止;第二單調(diào)性,路徑需保證時(shí)間順序上單調(diào)不減;第三連續(xù)性,不能跳過(guò)某個(gè)點(diǎn)去匹配,即(i,j)的下一點(diǎn)必須是(i+1,j),(i,j+1)和(i+1,j+1)的其中之一。為了避免路徑的斜率過(guò)大或過(guò)小,一般限定在0.5~2的范圍內(nèi)。全局最優(yōu)的規(guī)整路徑有且僅有一條,通過(guò)以上的條件,DTW算法的迭代公式如下
(8)
DTW算法采用歐氏距離雖然精度高,但運(yùn)算量較大,空間復(fù)雜度和時(shí)間復(fù)雜度都是O(M×N),對(duì)DTW改進(jìn)的主要方式是:全局路徑限制和放寬端點(diǎn)對(duì)齊。文獻(xiàn)[14]的全局路徑限制方法,通過(guò)將路徑的斜率限制在0.3~3范圍內(nèi),以減少運(yùn)算量,但精確度也相應(yīng)降低。實(shí)際應(yīng)用過(guò)程中,起點(diǎn)和終點(diǎn)的位置會(huì)發(fā)生變化,產(chǎn)生誤差。放寬端點(diǎn)對(duì)齊方法,會(huì)在(1,1),(1,2),(2,1)等中選最小值作為松弛起點(diǎn),相應(yīng)的會(huì)在(N,M),(N-1,M),(N,M-1)中選一個(gè)作為松弛終點(diǎn),該方法增加了精確度,減少了誤差,卻未減少運(yùn)算量。
DTW算法在路徑搜索過(guò)程中,必須滿足三條約束條件,而且部分交匯點(diǎn)的會(huì)冗余計(jì)算,且每個(gè)點(diǎn)的匹配計(jì)算,只和前兩個(gè)點(diǎn)相關(guān),并不需要保存累計(jì)距離矩陣和幀匹配矩陣。
本文實(shí)驗(yàn)中,分別用2×N的數(shù)組dist[][]和pairs[][]表示距離值和幀對(duì)。用指針now指向當(dāng)前幀對(duì),返回兩個(gè)序列當(dāng)前的幀信息和距離,用指針pre指向當(dāng)前的前一時(shí)間。故DTW中的式(8)可改成
(9)
在二維數(shù)組dist和paris中,now和pre指針循環(huán)移動(dòng)確保數(shù)組中元素操作,以減少操作時(shí)間。本文改進(jìn)的DTW算法中,dist和paris都是2×N的數(shù)組。其時(shí)間和空間復(fù)雜度為O(N),相較于傳統(tǒng)O(M×N),速度提升明顯。
本系統(tǒng)的硬件環(huán)境為:PC一臺(tái),CPU是i5—7500、內(nèi)存為16 GB,Kinect v2;軟件開(kāi)發(fā)環(huán)境是:Windows 10,Visual Studio 2017,Kinect for Windows SDK v2.0,C#編程語(yǔ)言。該人體動(dòng)作識(shí)別系統(tǒng)通過(guò)C#編寫(xiě)后臺(tái)和WFC編寫(xiě)界面實(shí)現(xiàn),系統(tǒng)界面如圖2所示。系統(tǒng)中的動(dòng)作模板庫(kù),基于MSRAction3D數(shù)據(jù)集預(yù)處理后制成,也可以錄制自定義動(dòng)作加入動(dòng)作模板庫(kù)[15]。通過(guò)Kinect v2采集2 s內(nèi)動(dòng)作視頻,然后系統(tǒng)進(jìn)行計(jì)算處理,對(duì)動(dòng)作進(jìn)行識(shí)別和顯示。
圖2 人體動(dòng)作識(shí)別系統(tǒng)界面
實(shí)驗(yàn)對(duì)6種常見(jiàn)動(dòng)作揮手、雙手舉起、前推、踢腿、站立、原地踏步進(jìn)行測(cè)試。實(shí)驗(yàn)中,選取20個(gè)在身高和體型具有差異性的被測(cè)試人員,每個(gè)人重置做一個(gè)動(dòng)作20次,每組動(dòng)作具有400個(gè)樣本,共2 400個(gè)動(dòng)作樣本,本文對(duì)6種動(dòng)作分別用wave,raise,push,kick,stand,step表示,實(shí)驗(yàn)結(jié)果如表1所示。
表1 本文人體動(dòng)作識(shí)別混淆矩陣
表2為基于傳統(tǒng)K-means和DTW算法的人體動(dòng)作識(shí)別結(jié)果。
表2 傳統(tǒng)K-menas的人體動(dòng)作識(shí)別混淆矩陣
對(duì)比表1和表2可以看出,改進(jìn)后的識(shí)別算法,動(dòng)作識(shí)別的準(zhǔn)確率提高明顯,且識(shí)別速度較之前提高近37 %。對(duì)比表1和表2發(fā)現(xiàn)采用加權(quán)K-means算法提取關(guān)鍵幀后,在提高準(zhǔn)確度同時(shí)降低誤判的種類。例如在踢腿(kick)動(dòng)作上,利用傳統(tǒng)K-means算法時(shí),誤判動(dòng)作有5種涉及上下半身;而使用了加權(quán)K-means算法后,在準(zhǔn)確率提高的同時(shí)誤判動(dòng)作只有下半身2種。同時(shí)在較復(fù)雜動(dòng)作識(shí)別上,由于采用加權(quán)K-means減少孤立點(diǎn)和噪聲對(duì)聚類精度影響,識(shí)別準(zhǔn)確度更顯著,表明本文加權(quán)K-means算法提取關(guān)鍵幀的有效性以及改進(jìn)DTW算法降低運(yùn)算復(fù)雜度。
同時(shí)本文選取其他兩種動(dòng)作識(shí)別方法與本文方法進(jìn)行比較。方法一基于關(guān)節(jié)點(diǎn)坐標(biāo)信息,通過(guò)預(yù)定義閾值完成動(dòng)作識(shí)別[16],例如腳距離地面達(dá)到預(yù)定義高度即為抬腿動(dòng)作。方法二文獻(xiàn)[17]基于關(guān)節(jié)角度特征向量,使用SVM分類器的動(dòng)作識(shí)別方法。圖3為三種方法在識(shí)別率上的混淆矩陣對(duì)比。
從圖3的結(jié)果可以看出:1)方法一的平均識(shí)別率為79 %,由于直接利用骨骼點(diǎn)的三維坐標(biāo)信息,如果閾值設(shè)置的不合理會(huì)導(dǎo)致不同體型的識(shí)別率差距很大。同時(shí)如果動(dòng)作不標(biāo)準(zhǔn),相似動(dòng)作很難區(qū)分;2)方法二的平均識(shí)別率為84 %,方法對(duì)運(yùn)動(dòng)幅度較大的動(dòng)作識(shí)別相對(duì)穩(wěn)定,但對(duì)區(qū)分小和較復(fù)雜的動(dòng)作準(zhǔn)確率相對(duì)較低,容易受到噪聲干擾;3)本文克服了空間位置和角度的變化,及人體體型差異的影響,使其平均動(dòng)作識(shí)別率為95.6 %。
圖3 三種識(shí)別方法的混淆矩陣對(duì)比
本文的方法不受光照、視角和場(chǎng)景變化等外部因素的影響,同時(shí)克服了傳統(tǒng)方法設(shè)備昂貴和操作復(fù)雜等諸多限制。實(shí)驗(yàn)結(jié)果表明:本文方法在識(shí)別率和速度上提升明顯,且具有良好的魯棒性,具有實(shí)際推廣性。