楊尊儉,張淑軍
(青島科技大學(xué) 信息科學(xué)技術(shù)學(xué)院,山東 青島 266061)
手勢是非語言交流的重要方式,也是非接觸式的人機交互中的重點研究課題。其在各個領(lǐng)域取得了廣泛的應(yīng)用,如汽車自動駕駛過程中需要能夠識別交警手勢并做出正確響應(yīng),基于手勢交互的車輛控制[1]、智能教學(xué)[2],基于手勢的機器人控制[3-4]、3D模型控制等[5]。其中手勢的識別速度和精準(zhǔn)度是研究和應(yīng)用的關(guān)鍵。
非接觸式交互設(shè)備的出現(xiàn),如Kinect、Leap Motion、HTC VIVE等,推動了基于手勢的交互技術(shù)的進一步發(fā)展。Shotton等[6]從Kinect提供的深度數(shù)據(jù)中評估出3D關(guān)節(jié)點的位置,為人體動作識別提供了重要的數(shù)據(jù)基礎(chǔ)。傳統(tǒng)的手勢識別主要通過數(shù)字圖像處理的方式對手勢進行跟蹤、分割等處理,對圖像進行分類。以骨架研究分為兩大類[7]:一種是將骨架用點來表示,對點的信息進行分析處理;另一種則是將部分骨架表示為剛體片段進行分析[8]。曹國強等[9]使用動態(tài)時間規(guī)整(dynamic time warping,DTW)與樸素貝葉斯分類(naive bayes classification,NBC)相結(jié)合進行模板訓(xùn)練與匹配的方法,對手勢進行分類。石祥濱等[10]通過K-均值聚類算法提取視頻序列中關(guān)鍵幀的關(guān)節(jié)點位置和人體剛體部分之間的骨架角度來對動作序列分類。Ju等[11]結(jié)合RGB-D顏色空間的最大期望對Kinect捕獲的手勢進行分割。王鑫等[12]用LE(laplacian eigenmaps)流形學(xué)習(xí)對Kinect設(shè)備獲取的人體關(guān)節(jié)點信息進行降維運算,提取特征。
隨著卷積神經(jīng)網(wǎng)絡(luò)(convolutional neural networks,CNN)的提出,基于深度學(xué)習(xí)的識別方法得到了迅速發(fā)展。Sanchez-Riera等[13]使用Kinect進行數(shù)據(jù)采集,利用深度學(xué)習(xí)方法對手勢的運行軌跡進行姿勢和方向上的評估。Dardas等[14]對圖像進行尺度不變性特征變換特征提取,使用多分類支持向量機(SVM)進行手勢識別。
本文以仿真駕駛為背景,提出了一種結(jié)合DTW 與深度學(xué)習(xí)的手勢識別技術(shù),使用Kinect進行數(shù)據(jù)采集,以無人車在城市中行駛為背景,利用Unity進行場景搭建及定義交互事件,構(gòu)建無人車駕駛仿真交互系統(tǒng)。
在無人車行駛中,車輛的行進方向與行進速度是研究的關(guān)鍵。車輛需要對交警手勢、用戶自定義手勢等做出及時的反饋,以保證智能化行進。本文提出改進的DTW 算法與卷積神經(jīng)網(wǎng)絡(luò)相結(jié)合的識別方法應(yīng)用于無人車駕駛,并通過虛擬現(xiàn)實技術(shù)對其進行模擬仿真。系統(tǒng)流程如圖1所示。
圖1 系統(tǒng)流程框圖
通常的手勢交互以上肢動作為主,識別需要做到實時才具有可用性。同一個人多次做相同手勢和不同的人做相同的手勢,手勢的速度和細節(jié)都存在差異,因此,適合使用DTW 算法進行識別。又考慮到在識別過程中,不同關(guān)節(jié)點貢獻率不同,所以本文提出了一種加權(quán)的DTW 算法,對手勢進行粗粒度識別。由于背景光照、顏色、遮擋等各種客觀因素影響,部分手勢在RGB圖像中比較模糊,使用傳統(tǒng)方法穩(wěn)定性和魯棒性較差。為此,本文使用基于卷積神經(jīng)網(wǎng)絡(luò)的手勢識別方法與DTW算法相結(jié)合,充分利用Kinect提取的關(guān)節(jié)點信息對手進行局部聚焦,同時識別上肢粗粒度手勢及手部細粒度語義,提高識別的速度與準(zhǔn)確率。
本文通過Kinect獲取用戶的實時圖像并進行人體識別獲取關(guān)節(jié)點信息,改進的DTW 算法利用關(guān)節(jié)點信息進行特征向量的提取和匹配,對手勢進行粗粒度識別。基于深度學(xué)習(xí)的方法使用CNN網(wǎng)絡(luò)對手勢圖像進行細粒度識別。在仿真駕駛系統(tǒng)中,粗粒度識別結(jié)果決定汽車的行駛方向,細粒度識別結(jié)果對行駛速度等進行控制,2種方式同時作用,實現(xiàn)虛擬環(huán)境與用戶的實時無縫虛實交互。
Kinect由RGB攝像頭獲取彩色圖像,由紅外線發(fā)射器和紅外攝像機配合獲取深度圖像。紅外線發(fā)射器作為光源將結(jié)構(gòu)光打在物體上,形成激光散斑,而紅外攝像機作為接收器,對這些激光散斑進行標(biāo)定,計算得到深度數(shù)據(jù),最后使用插值算法得到場景的三維數(shù)據(jù)。
Kinect獲取人體關(guān)節(jié)點的過程包括3個步驟:前景提取、人體骨骼分類和關(guān)節(jié)點定位。前景提取通過深度圖像上的深度信息,設(shè)置相應(yīng)的閾值提取目標(biāo)主體和形狀。人體骨骼分類用機器學(xué)習(xí)的算法對提取的形狀信息進行訓(xùn)練,訓(xùn)練出決策樹分類器依據(jù)形狀信息來匹配人體的各個部位。最后通過計算來匹配關(guān)節(jié)點在人體中的位置。
Kinect傳感器數(shù)據(jù)采集標(biāo)準(zhǔn):Kinect設(shè)備水平放置于桌面上,目標(biāo)面對Kinect傳感器,距離為0.8~2.5 m。獲取的彩色圖像與深度圖像分辨率均為640*480,幀頻為30 fps。傳感器使用的三維坐標(biāo)為:以Kinect為原點,通過右手定則建立空間坐標(biāo)系,x軸的正方向為水平向左,y軸的正方向垂直向上,z軸方向為攝像頭拍攝方向。三維空間坐標(biāo)使用(x,y,z)表示,如圖2所示。
圖2 Kinect空間坐標(biāo)系
通過Shotton等[6]提出的方法從深度圖像中提取人體25個關(guān)節(jié)點,如圖3所示。
圖3 Kinect25個關(guān)節(jié)點示意圖
從圖3中可以看出,左右雙臂和雙手各有不同的關(guān)節(jié)點,這為后續(xù)識別左側(cè)或右側(cè)手勢提供了有利的數(shù)據(jù)支持。
DTW 方法是Sakoe等[15]提出用于判斷時間序列相似性的方法。DTW 可以很好地匹配2個不同時間軸上的時序序列之間的匹配代價[16]。
基于DTW 的手勢識別主要分為3個步驟:建立樣本庫、訓(xùn)練樣本、識別樣本。在識別時首先截取部分手勢幀作為測試樣本,然后與樣本庫中的樣本進行對比,找出與之最匹配的樣本。手勢樣本庫中的樣本表示為R={R(1),R(2),…,R(m),…,R(M)},測試樣本為T={T(1),T(2),…,T(n),…,T(N)},其中m和n為樣本幀的序號,R(m)為第m幀的動作特征矢量,T(n)為第n幀的動作特征矢量,M、N為模板中所包含的動作總幀數(shù)。構(gòu)建一個M×N的矩陣,樣本庫樣本R為橫軸,測試樣本T為豎軸。將測試動作矢量T(n)映射到樣本庫動作矢量R(m),這種映射關(guān)系表示為(Rm,Tn),計算二者映射后對應(yīng)的歐幾里得距離,對R和T中所有對應(yīng)項求和:
式中:K表示該幀特征向量的維數(shù);Rmk表示樣本庫樣本的第m幀的第k個特征值;Tnk表示測試樣本的第n幀的第k個特征值。D越小說明測試樣本T與樣本庫樣本R相似度越大,D越大則相似度越小。
動態(tài)時間規(guī)整默認每個手勢的關(guān)節(jié)點在軌跡上的貢獻度是相同的,對樣本中的所有關(guān)節(jié)點使用相同處理標(biāo)準(zhǔn),而在實際手勢中不同關(guān)節(jié)點的位移變化對手勢識別所起的作用并不相同,某些關(guān)節(jié)點起到?jīng)Q定性作用,因此,本文提出一種改進的DTW 算法,通過對關(guān)節(jié)點進行加權(quán)來進行更優(yōu)的動態(tài)規(guī)劃,更精準(zhǔn)地識別手勢。充分考慮各關(guān)節(jié)在上肢手勢中所起的作用,選取頸椎中部(1)、左肩(4)、左肘(5)、左手腕(6)、右肩(8)、右肘(9)、右手腕(10)、頸下脊椎(20)等8個關(guān)節(jié)(括號中的數(shù)字對應(yīng)圖3中的關(guān)節(jié)點編號)用于連續(xù)手勢識別,可有效減少運算的復(fù)雜度。每一個關(guān)節(jié)由一個三維坐標(biāo)表示,因此,一幀骨骼數(shù)據(jù)可以表示為由8個關(guān)節(jié)點坐標(biāo)組成的24維的動作矢量:
人與攝像頭之間的位置以及骨架的大小等都會造成關(guān)節(jié)坐標(biāo)的改變,因此需要對關(guān)節(jié)坐標(biāo)進行預(yù)處理。以人體頸椎關(guān)節(jié)為原點,將坐標(biāo)系平移到人體,并以脊柱的距離作為標(biāo)準(zhǔn),分別對各關(guān)節(jié)坐標(biāo)進行標(biāo)準(zhǔn)化,以消除干擾因素的影響,獲得較為標(biāo)準(zhǔn)的關(guān)節(jié)數(shù)據(jù)。根據(jù)中國成年人人體尺寸(GB/T 10000—1988),以雙臂平伸站立姿態(tài),左肘(5)、左手腕(6)、右肘(9)、右手腕(10)關(guān)節(jié)點到頸椎中部(1)、左肩(4)、右肩(8)、頸下脊椎(20)4點中心的距離作為權(quán)重標(biāo)準(zhǔn),如左肘的權(quán)重為:
l為關(guān)節(jié)點到中心的距離,整體匹配代價如式(3)所示:
其中λ={wi},通過加權(quán)后的手勢序列匹配,對大幅度手勢動作得到識別結(jié)果。
DTW 算法能夠完成2個手勢序列的整體匹配,但對于手部的細節(jié)動作識別不夠準(zhǔn)確,為此,本文采用基于深度學(xué)習(xí)的方法對動態(tài)手勢中的手部語義進行細粒度識別。深度學(xué)習(xí)方法已成功應(yīng)用于圖像識別領(lǐng)域,并且具有較好的穩(wěn)定性和魯棒性。
卷積神經(jīng)網(wǎng)絡(luò)(convolutional neural network,CNN)由輸入層、卷積層、池化層、全連接層以及輸出層組成。一般有若干卷積層與池化層交替設(shè)置,卷積層的每個節(jié)點通過卷積核與上一層局部信息相連,卷積的結(jié)果經(jīng)過激活函數(shù)得到該層特征圖;池化層中的每個特征面與上一層的一個特征面對應(yīng),對特征信息稀疏處理,獲取具有空間不變行的特征;在全連接層中,每個節(jié)點與上一層的節(jié)點全連接,整合卷積層和池化層中具有區(qū)分性的信息;在輸出層,通過Softmax分類器處理后的數(shù)據(jù)按概率返回分類結(jié)果。
要想通過手部動作表達不同的語義,必須要對手部進行準(zhǔn)確的定位和識別。傳統(tǒng)方法對復(fù)雜背景中的手分割和識別效果較差,本文通過Kinect提取的手部關(guān)節(jié)點來定位手部ROI,使用7層的CNN對手部圖像進行識別。
在Kinect獲取的25個關(guān)節(jié)點中,手部的關(guān)節(jié)點位一共有8個,左右手各4個,分別為腕、手、拇指和指尖,根據(jù)這4個關(guān)節(jié)點與手整體位置之間的關(guān)系,4個點的質(zhì)心即可作為手部ROI的中心點,而ROI的邊長設(shè)定為人體前臂的長度,以保證手部區(qū)域的完整性。人體前臂的長度L可通過手肘到手腕的距離來計算:
式中,(x5,y5)與(x6,y6)分別表示圖3中編號為5的關(guān)節(jié)點ElbowL以及編號為6的關(guān)節(jié)點WristL當(dāng)前幀的坐標(biāo)值。不同手勢情況下手部ROI的部分計算結(jié)果如圖4所示。
圖4 手部ROI的計算結(jié)果
本文使用的CNN模型分為輸入層、卷積層、池化層、全連接層和輸出層。對提取的ROI手部圖像進行歸一化處理,得到90×90大小的圖片,將其輸入到CNN網(wǎng)絡(luò)中。歸一化尺寸的選取是根據(jù)實驗中多次采集到圖像的統(tǒng)計結(jié)果確定的。7層卷積神經(jīng)網(wǎng)絡(luò)對輸入圖像進行特征提取和采樣,再送入全連接層,最后通過Softmax函數(shù)得到分類結(jié)果,如圖5所示。
圖5 基于CNN進行手勢識別的分類結(jié)果
實驗環(huán)境:采用Unity3.6.1f1建立仿真駕駛環(huán)境,使用Kinect采集用戶信息,通過手勢識別與虛擬環(huán)境進行自然交互。軟硬件配置如表1所示。
本文使用3DMax創(chuàng)建虛擬環(huán)境中的模型,導(dǎo)出為FBX場景文件,并在Unity中導(dǎo)入到Scene中,調(diào)整好度量單位、燈光、動畫、嵌入媒體以及骨骼幾何體等,保證導(dǎo)出的場景中包含所有模型的元素,在Unity-Scene中對模型進行合理布局。
所有的貼圖文件在Assets-Material文件夾中保存,F(xiàn)BX等模型文件在Models中保存,在導(dǎo)入好的模型的Inspector視圖中通過“Add Component”查找“MeshCollider”,加入網(wǎng)格碰撞功能。
表1 軟硬件配置
Unity中車輛與場景模型通過坐標(biāo)等修改使得輪胎與道路路面接觸,設(shè)置好車輛動力學(xué)特性、重力場、觸發(fā)器和碰撞器的檢測等各項技術(shù)參數(shù),讓車輛模型能夠與場景的物體進行實時檢測。
構(gòu)建了一個包含道路、車輛、交通信號燈、建筑物、樹木等在內(nèi)的虛擬城市場景,系統(tǒng)交互界面如圖6所示。
圖6 系統(tǒng)交互界面
為了在虛擬環(huán)境中更好地展現(xiàn)無人車對手勢指令的反饋效果,定義5種動態(tài)手勢,分別控制無人車前進、停止、左轉(zhuǎn)彎、右轉(zhuǎn)彎、后退,同時為了交互控制汽車行駛速度,定義4種模式的手部動作,可以疊加在上述5種手勢過程中,構(gòu)成復(fù)合手勢,使無人車同時在行駛方向和速度上有相應(yīng)的反饋。手勢名稱及動作語義如表2所示。
表2 手勢名稱及動作語義
表2中,手勢1—5由DTW 算法識別,手勢6—9由深度學(xué)習(xí)方法識別,二者組合,得到完整的手勢識別結(jié)果。手勢6—7中,每次識別之后速度按1個標(biāo)準(zhǔn)單位變化。
記錄實驗數(shù)據(jù),以備后續(xù)數(shù)據(jù)分析。手勢數(shù)據(jù)按照關(guān)節(jié)點X、Y、Z軸分別存儲,以便于數(shù)據(jù)分析。表3給出了TurnRight手勢的右手腕關(guān)節(jié)點(編號為10)的坐標(biāo)序列值。
表3 TurnRight的右手腕(10)點坐標(biāo)
由此可見,在TurnRight中,X軸數(shù)值逐漸上升,Y、Z軸無明顯變化。對于TurnRight,右手腕(10)關(guān)節(jié)點的X軸坐標(biāo)影響較大,以此作為賦予權(quán)重依據(jù)。
該識別方法分為離線訓(xùn)練與實時識別2個階段。離線訓(xùn)練階段分為2個步驟:
1)數(shù)據(jù)集
數(shù)據(jù)集使用馬德里自治大學(xué)視頻處理與理解實驗室的HGDs數(shù)據(jù)集[17],選取其中的4種:手掌張開、手握拳、剪刀手和食指伸出。每種手勢200幅圖像。每類手勢按9∶1的比例分為訓(xùn)練集與測試集,如圖7所示。
圖7 手勢數(shù)據(jù)集
2)訓(xùn)練網(wǎng)絡(luò)模型
本網(wǎng)絡(luò)由7個帶有relu層的卷積層與一個全連接層組成,使用softmax作為分類器。加載在ImageNet上預(yù)訓(xùn)練的網(wǎng)絡(luò)模型,在上述手勢數(shù)據(jù)集上進行訓(xùn)練,batch_size=64,迭代次數(shù)為2 000次。在測試集上的最終識別準(zhǔn)確率為96.6%。存儲該訓(xùn)練參數(shù)模型用于實時識別階段。
對粗粒度和細粒度手勢識別的結(jié)果及虛擬車輛的交互反饋效果如圖8所示。
圖8(a)~(e)分別展示了舉起左手配剪刀手動作——汽車減速前進、舉起右手配拳頭動作——汽車加速后退、手左揮配手掌動作——汽車勻速左轉(zhuǎn)、手右揮配手掌動作——汽車勻速右轉(zhuǎn)、食指動作——后視鏡開關(guān)變化的交互效果。圖中左上角紅字為手勢識別結(jié)果,分別為DTW 算法識別結(jié)果(運動行進方向)、當(dāng)前行駛速度、深度學(xué)習(xí)方法識別結(jié)果(速度或后視鏡變化)。
圖8 手勢識別及交互結(jié)果
為了進一步驗證本文方法的可行性,對每種手勢在仿真系統(tǒng)中測試其識別的精度,每種手勢分別測試100次,識別準(zhǔn)確率如表4所示。
表4 實驗結(jié)果
實驗結(jié)果分析:從表4中可以看出SpeedUp和SpeedDown識別較為穩(wěn)定,手部的左右移動識別較好,手部細粒度識別整體較好,行進方向控制的平均準(zhǔn)確率為95.8%,平均FPS為27.6 Hz,行進速度控制平均準(zhǔn)確率為95.75%,平均FPS為28.75 Hz,實驗表明本文提出的方法在無人車仿真中的有效性。
隨著社會的進步,智慧城市的發(fā)展,汽車智能化與網(wǎng)聯(lián)化即將到來,無人車自動駕駛是重點研究項目。本文主要面向仿真駕駛場景,將改進的DTW 算法與卷積神經(jīng)網(wǎng)絡(luò)方法相結(jié)合,對用戶的動態(tài)與靜態(tài)復(fù)合手勢進行實時識別,虛擬車輛根據(jù)識別結(jié)果進行交互反饋。