邵天培,蔣 剛,留滄海
(1.西南科技大學(xué) 制造科學(xué)與工程學(xué)院,四川 綿陽 621010;2.制造過程測試技術(shù)省部共建教育部重點(diǎn)實(shí)驗(yàn)室,四川 綿陽 621010;3.成都理工大學(xué) 核技術(shù)與自動(dòng)化工程學(xué)院,成都 610059)
隨著人類社會(huì)和機(jī)器人領(lǐng)域的不斷發(fā)展,人類與機(jī)器人在各個(gè)方面也在不斷地融合,機(jī)器人逐漸融入到了人類的生產(chǎn)制造過程和生活中,人類與機(jī)器人的關(guān)系日益密切,這就迫切地需要人類與機(jī)器人進(jìn)行交互,從而能夠比較順利地實(shí)現(xiàn)人機(jī)合作與人機(jī)共融[1]。在人機(jī)交互領(lǐng)域中基于視覺的手勢識(shí)別因?yàn)榫哂泻唵?、直觀、表達(dá)能力突出且自然的優(yōu)勢逐漸成為研究熱點(diǎn)[2-5]。Bertsch等人[6]在仿人機(jī)器人平臺(tái)上構(gòu)建了基于視覺的人機(jī)交互系統(tǒng),該研究使用隱馬爾可夫模型識(shí)別動(dòng)態(tài)手勢,但是這種方法準(zhǔn)確率不高且易受光照影響。Thinh 等人[7]在機(jī)器人上安裝手機(jī),利用手勢通過手機(jī)上的攝像頭與機(jī)器人進(jìn)行交互。隨著Kinect的問世,進(jìn)一步彌補(bǔ)了人機(jī)交互方式上硬件的不足[8]。王兵等人[9]基于Kinect采用指尖檢測算法并針對運(yùn)動(dòng)軌跡中運(yùn)動(dòng)方向的變化,提取了動(dòng)態(tài)手勢的特征并識(shí)別各個(gè)手勢。Y.Gu等人[10]利用 Kinect并基于骨骼特征,使用隱馬爾可夫模型訓(xùn)練進(jìn)行測試,但該方法平均識(shí)別率不高且數(shù)據(jù)訓(xùn)練復(fù)雜。本文針對動(dòng)態(tài)手勢識(shí)別準(zhǔn)確率不高且易受光照影響等問題對動(dòng)態(tài)手勢識(shí)別進(jìn)行了研究。
動(dòng)態(tài)手勢識(shí)別通過關(guān)注分析視頻序列中的連續(xù)手勢軌跡信息來判斷手勢語義,而不關(guān)注手型[11]。本文將基于Kinect傳感器進(jìn)行動(dòng)態(tài)手勢識(shí)別,Kinect會(huì)首先采集視頻序列中的用戶手勢,然后依次進(jìn)行手勢分割、手勢質(zhì)心計(jì)算、手勢軌跡特征計(jì)算,最后進(jìn)行手勢軌跡特征識(shí)別。
手勢分割是指將人手準(zhǔn)確地從簡單或復(fù)雜背景環(huán)境中分割出來[12,13],這是極其重要的一步,因?yàn)槭謩莘指畹暮脡臅?huì)影響后續(xù)環(huán)節(jié)。手勢分割部分的難點(diǎn)在于目標(biāo)手勢易受光照和環(huán)境的影響。常用的方法,比如單純利用膚色進(jìn)行手勢分割[14],則會(huì)把類膚色物體包括進(jìn)來,在室內(nèi)不同光照下利用膚色進(jìn)行分割,效果如圖1所示:從圖1(a)可知,膚色分割雖然完整分割出了手勢,但也將人的面部和類膚色物體一起包括。從圖1(b)可知,在室內(nèi)較弱光照條件下,分割出的手勢甚至不完整,所以光照條件的改變會(huì)令手勢分割變得異常困難。
圖1 不同光照下基于膚色的手勢分割結(jié)果
而利用Kinect采集的深度圖像信息則會(huì)在進(jìn)行手勢分割時(shí)有效減少光照條件帶來的影響。這是因?yàn)镵inect采集的深度圖像存儲(chǔ)在一個(gè)二維數(shù)組里[15],數(shù)組中的每一個(gè)像素點(diǎn)表示該像素點(diǎn)到傳感器的距離,由于做一組動(dòng)態(tài)手勢時(shí)人手通常離傳感器最近,所以可從繪制出的深度圖像直方圖中找到較小的灰度級(jí),設(shè)定不同的閾值就可以準(zhǔn)確地從背景中分割出感興趣區(qū)域,再將感興趣區(qū)域轉(zhuǎn)換成二值圖像即可。經(jīng)過上述操作,就可以完整地從背景中分割出目標(biāo)手勢。如圖2(a)右側(cè)所示為較強(qiáng)光照條件下的深度圖像,圖2(b)左側(cè)為深度圖像直方圖,右側(cè)為手勢分割結(jié)果,其中,深度直方圖中圓圈所在橫坐標(biāo)為選定閾值的大概范圍,該范圍根據(jù)不同距離選取不同的值。本文中閾值范圍為35~44左右,下同。
圖2 較強(qiáng)光照下基于深度信息的手勢分割結(jié)果
較弱光照條件下,利用深度信息對目標(biāo)手勢進(jìn)行分割的結(jié)果如圖3所示。
圖3 較弱光照下基于深度信息的手勢分割結(jié)果
在不同環(huán)境條件下,利用深度信息對目標(biāo)手勢進(jìn)行分割的結(jié)果如圖4所示。
圖4 不同環(huán)境下基于深度信息的手勢分割結(jié)果
從上述實(shí)驗(yàn)結(jié)果可知,在不同環(huán)境和不同光照條件下,本文所采用的方法依然可以準(zhǔn)確地分割出目標(biāo)手勢,證明了本文方法的可靠性和優(yōu)勢。
矩代表一幅圖像或一個(gè)輪廓的全局特征,是描述圖像特征的算子[16]。得到手勢分割圖像后,可計(jì)算出圖像和輪廓的矩。
m00表示圖像零階矩,v(i,j)表示圖像在點(diǎn)的灰度,(i,j)當(dāng)圖像為二值圖像時(shí),m00代表圖像中白色區(qū)域的總和,因此可以用來求二值圖像和輪廓的面積。如式(1)所示:
(1)
m10和m01表示圖像的一階矩,當(dāng)圖像為二值圖像時(shí),m10表示圖像所有白色區(qū)域坐標(biāo)的累加,m01表示圖像所有白色區(qū)域坐標(biāo)的累加。如式(2)、(3)所示:
(2)
(3)
再根據(jù)式(5),式(6):
(4)
(5)
就可得到目標(biāo)區(qū)域即手勢的質(zhì)心點(diǎn)坐標(biāo)(x,y)。最后繪制出輪廓的矩形邊界。
利用圖2(b)中的手勢分割結(jié)果得到的手勢輪廓矩形邊界、零階矩和一階矩的值以及手勢圖像質(zhì)心坐標(biāo)如圖5所示。
圖5 矩形輪廓與手勢質(zhì)心坐標(biāo)
當(dāng)每幀手勢圖像傳入時(shí),都按照上述方法操作,得到每幀圖像中的手勢質(zhì)心,這樣便得到了一連串的手勢質(zhì)心點(diǎn)坐標(biāo)。綜上所述,完成手勢質(zhì)心計(jì)算。
前文提到,動(dòng)態(tài)手勢識(shí)別關(guān)注的是手勢軌跡信息,而不關(guān)注手形。本文要做的就是從連續(xù)的視頻幀里得到動(dòng)態(tài)手勢的軌跡信息。當(dāng)一個(gè)動(dòng)態(tài)手勢完成后,假設(shè)相鄰兩幀圖像手勢質(zhì)心點(diǎn)坐標(biāo)分別為(x1,y1)和(x2,y2),則每幀圖像中的手勢質(zhì)心坐標(biāo)結(jié)合在一起可以表示成一個(gè)手勢質(zhì)心軌跡p:
p=[(x1,y1), (x2,y2),…, (xi,yi)]
(6)
同時(shí),每相鄰兩幀手勢質(zhì)心點(diǎn)連成的直線與水平方向都會(huì)形成一個(gè)角度,設(shè)該角度為θi:
(Δxi,Δyi)=(xx+1-xi,yi+1-yi)
(7)
則多個(gè)不同的θi可以組成個(gè)一維向量T:
T=[θi,θi+1,…,θi+n]
(8)
將一維向量T中的每個(gè)角度都利用鏈碼進(jìn)行編號(hào),其中,θi的值決定了θi所在鏈碼編號(hào),依次類推。如此便可得到一個(gè)由鏈碼編號(hào)組成的一維向量X,而X正是動(dòng)態(tài)手勢的軌跡特征。
如圖6所示,鏈碼[17]把一個(gè)平面平均分成了12個(gè)部分,并對這12個(gè)部分進(jìn)行編號(hào),編號(hào)分別為1~12。
圖6 鏈碼示意圖
設(shè)0~180°范圍內(nèi),相鄰編號(hào)所屬直線之間的角度為30°。在0~-180°范圍內(nèi),相鄰編號(hào)所屬直線之間的角度為-30°。
當(dāng)平面被平分的部分越多,通過角度θi的值量化得到的編號(hào)越準(zhǔn)確,則動(dòng)態(tài)手勢的軌跡特征越精確,所以這里將平面劃分成12個(gè)部分。
例如,利用第一幀手勢圖像質(zhì)心坐標(biāo)點(diǎn)與第二幀手勢圖像質(zhì)心坐標(biāo)點(diǎn)計(jì)算出兩點(diǎn)形成的直線與水平方向所成角度為,再比較是否在0~30°范圍之內(nèi),若為0°則添加編號(hào)1到一維向量X中,若在0~30°之間,則添加編號(hào)2到一維向量X中。由此可以得到動(dòng)態(tài)手勢軌跡特征X。
本文選擇其中穩(wěn)定的6個(gè)手勢質(zhì)心點(diǎn)進(jìn)行計(jì)算,則X的長度為5,即每個(gè)完整的手勢軌跡特征由5個(gè)編號(hào)組成。
在完成手勢分割、手勢質(zhì)心與手勢軌跡特征計(jì)算的基礎(chǔ)上就可以進(jìn)行手勢軌跡特征識(shí)別。由于不同的人在做同一手勢動(dòng)作時(shí)速度不一樣,所需的時(shí)間也不一樣,則會(huì)造成每個(gè)人的手勢起終點(diǎn)不確定。若要進(jìn)行手勢起終點(diǎn)判定則會(huì)加大計(jì)算量和復(fù)雜程度,影響效率。
而動(dòng)態(tài)時(shí)間規(guī)整算法(DTW,dynamic time warping)則通過把手勢軌跡特征進(jìn)行延伸或縮短,來計(jì)算比較兩個(gè)手勢軌跡特征之間的相似性,所以采用DTW算法可以省去手勢起終點(diǎn)的判定,并減少不同的人做相同手勢時(shí),手勢軌跡特征不完全相同帶來的影響。
假設(shè)給定兩個(gè)序列:
X=[x1,x2,...xi],Y=[y1,y2,...yj]
(9)
其中:i=j。在本文中,X實(shí)際為得到的手勢軌跡特征,Y為事先設(shè)定好的多個(gè)手勢軌跡特征模板且每一個(gè)模板Y都擁有唯一序號(hào)。當(dāng)X與Y之間的累積距離越小,則代表這兩個(gè)序列越相似,即表示X與Y越吻合。
DTW算法的步驟如下:
1)構(gòu)造一個(gè)i*j的距離矩陣M,M矩陣中元素(i,j)表示xi和yj兩個(gè)點(diǎn)的距離d(i,j);
2)根據(jù)距離矩陣M生成累積距離矩陣N,生成N的方法為:矩陣N中第一行第一列的元素為M矩陣中第一行第一列的元素。矩陣N中其他位置的元素通過:
N(i,j)=Min(N(i-1,j-1),N(i-1,j),
N(i,j-1)+M(i,j)
(10)
計(jì)算得出;
3)矩陣N中最右上角的元素為累積距離Q。
舉例說明:假設(shè)手勢軌跡特征X=[3,5,6,7],模板Y=[4,3,2,6]現(xiàn)在要比較X和Y的相似程度,DTW會(huì)根據(jù)X與Y之間點(diǎn)到點(diǎn)的距離生成一個(gè)距離矩陣M,結(jié)果如下:
(11)
然后根據(jù)距離矩陣M生成累積距離矩陣N,結(jié)果如下:
(12)
由累積距離矩陣N中最右上角的元素可知,累積距離Q=4。
綜上,當(dāng)完成手勢分割,手勢質(zhì)心和手勢軌跡特征計(jì)算后,會(huì)得到一個(gè)一維的手勢軌跡特征向量X,將X作為輸入喂入DTW算法模型并依次與模型中的多個(gè)手勢軌跡特征模板Y進(jìn)行模板匹配,得到多個(gè)累積距離Q,將Q中最小值所屬模板Y的序號(hào)作為輸出結(jié)果,從而完成手勢軌跡特征識(shí)別。
DTW算法[18-20]數(shù)據(jù)訓(xùn)練簡單,結(jié)構(gòu)簡單明了易于實(shí)現(xiàn),同時(shí)也省略了手勢起終點(diǎn)的判定且識(shí)別準(zhǔn)確率高。缺點(diǎn)是模板Y需要事先定義,且計(jì)算量隨著模板的增多而加大。
本文實(shí)驗(yàn)的硬件主要包括:顯卡為GTX1050,內(nèi)存為4 GB和處理器為i7的筆記本電腦、基于Kinect開發(fā)環(huán)境的傳感器、一臺(tái)六足機(jī)器人。
軟件部分主要包括:PyCharm編譯環(huán)境、開源計(jì)算機(jī)視覺庫(OpenCV,open source computer vision library)、開放式的自然交互框架(OpenNI,open natural interaction)以及采用Python編寫的手勢識(shí)別算法。
首先傳感器采集用戶動(dòng)態(tài)手勢視頻序列,將視頻序列傳給上位機(jī)進(jìn)行處理得到與該用戶手勢軌跡特征匹配的模板的序號(hào),將該模板序號(hào)傳給STM32,驅(qū)動(dòng)板根據(jù)STM32計(jì)算得到的舵機(jī)數(shù)據(jù)進(jìn)行六足機(jī)器人舵機(jī)控制,同時(shí)機(jī)器人自身傳感器采集六足機(jī)器人狀態(tài),將狀態(tài)信息發(fā)送至STM32,形成閉環(huán)控制,完成手勢對六足機(jī)器人的控制。
首先設(shè)定人機(jī)交互手勢模板,如表1所示。該模板設(shè)計(jì)了4種動(dòng)態(tài)手勢指令分別控制機(jī)器人4種動(dòng)作。該模板存儲(chǔ)在DTW模型中,其中模板基于鏈碼規(guī)則設(shè)定。
表1 自定義人機(jī)交互手勢模板
現(xiàn)在要使機(jī)器人前進(jìn),則用戶將手在六足機(jī)器人搭載的傳感器前由左向右水平移動(dòng)。
經(jīng)過手勢分割的移動(dòng)過程如圖7所示。
圖7 動(dòng)態(tài)手勢移動(dòng)分割圖
經(jīng)過上位機(jī)處理得到如下6個(gè)手勢質(zhì)心坐標(biāo)和手勢軌跡特征X=[1,2,1,2,1],如圖8所示。
圖8 質(zhì)心坐標(biāo)與手勢軌跡特征
隨后X將被送入DTW模型中與已經(jīng)建立好的多個(gè)模板Y進(jìn)行匹配,匹配結(jié)果如圖9所示。
圖9 匹配結(jié)果
由圖9可知,X與序號(hào)為0的模板累積距離為2,X與序號(hào)為1的模板累積距離為43,X與序號(hào)為2的模板累積距離為13,X與序號(hào)為3的模板累積距離為28。
經(jīng)過篩選最終得到了與X累積距離最小的模板:序號(hào)為0,累積距離Q=2。即手勢軌跡特征X=[1,2,1,2,1]與模板Y=[1,1,1,1,1]最相似吻合。
將該模板序號(hào)數(shù)字0通過無線傳輸設(shè)備傳給STM32分析處理語義信息,再由STM32向六足機(jī)器人傳輸指令控制六足機(jī)器人的行動(dòng)軌跡。以圖10中黑色叉為標(biāo)記,采用前進(jìn)手勢進(jìn)行交互時(shí),六足機(jī)器人完成前進(jìn)動(dòng)作。
圖10 人機(jī)交互結(jié)果
本文在不同環(huán)境和不同光照條件下進(jìn)行了多次動(dòng)態(tài)手勢識(shí)別實(shí)驗(yàn),得出結(jié)果如表2~4所示。
表2 室外光照識(shí)別結(jié)果
表3 室內(nèi)較強(qiáng)光照識(shí)別結(jié)果
表4 室內(nèi)較弱光照識(shí)別結(jié)果
實(shí)驗(yàn)結(jié)果表明,在室內(nèi)較強(qiáng)光照條件下,手勢識(shí)別效果比較弱光照條件下好,最好的識(shí)別準(zhǔn)確率能達(dá)到97.3%。在室內(nèi)較弱光照條件下,準(zhǔn)確率仍然能達(dá)到91%及以上。在室外的手勢識(shí)別效果不如室內(nèi),但準(zhǔn)確率依然能達(dá)到90%左右。由此可知在外部環(huán)境變換的情況下,該方法依然能保持一個(gè)較好的識(shí)別準(zhǔn)確率,也證明了整個(gè)動(dòng)態(tài)手勢識(shí)別方法的魯棒性較好。
綜上所述,本文基于Kinect傳感器對動(dòng)態(tài)手勢識(shí)別進(jìn)行了研究。利用深度信息分割出目標(biāo)手勢,此方法不易受環(huán)境和光照的干擾?;诰睾玩湸a計(jì)算出手勢質(zhì)心和手勢軌跡特征。在手勢軌跡特征識(shí)別部分,傳統(tǒng)方法大多數(shù)采用隱馬爾可夫模型,但該方法訓(xùn)練非常困難和復(fù)雜,同時(shí)要進(jìn)行手勢起始點(diǎn)判定。所以采用訓(xùn)練簡單、結(jié)構(gòu)易懂、識(shí)別準(zhǔn)確率高的DTW算法并且避免了手勢起始點(diǎn)判定,該算法缺點(diǎn)是不能識(shí)別模板中沒有的手勢。最后將手勢識(shí)別結(jié)果與六足機(jī)器人進(jìn)行交互,實(shí)現(xiàn)動(dòng)態(tài)手勢對六足機(jī)器人的控制。