佟喜峰 樊鑫
(東北石油大學計算機與信息技術(shù)學院 大慶 163318)
手勢識別的方法主要有傳統(tǒng)的模板匹配法和人工神經(jīng)網(wǎng)絡(luò)法[1~3]。楊紅玲等通過攝像頭實時采集手勢圖像,采用結(jié)合RGB 和HSV 雙顏色空間的手勢分割方法得到二值化圖像,然后對分割后的手勢圖像提取骨架與邊緣相融合的手勢特征圖,通過手勢特征圖識別手勢[2]。吳斌方等提出了一種基于支持向量機的手勢分割和基于Inception-v3的手勢識別方法,將預先經(jīng)過手勢分割處理后的樣本導入模型訓練,調(diào)整超參數(shù)得到最優(yōu)手勢識別模型[4]。包兆華等使用神經(jīng)網(wǎng)絡(luò)提取關(guān)鍵點,通過關(guān)鍵點判斷手部的位置,在Ycbcr 顏色空間上進行手勢分割,將LeNet5 用于識別手勢[5]。李國友等使用Kinect V2 傳感器,根據(jù)提取圖像數(shù)據(jù)與深度數(shù)據(jù),使用隱馬爾可夫模型實現(xiàn)了手勢識別[6]。任重庚等提出了基于Kinect 骨骼數(shù)據(jù)的手勢識別方法,在Kinect 獲取的關(guān)節(jié)坐標的基礎(chǔ)上,統(tǒng)計各個關(guān)節(jié)在3 個維度上的變化情況并表示為相應(yīng)的權(quán)值,使用DTW 方法識別手部整體運動軌跡[7]。模板匹配法的優(yōu)點是簡單,識別速度快,且不易受到光照的影響,缺點是魯棒性不太強,對于同一種手勢,當手部形狀變化較大時,識別準確率就會變低,誤識的情況就會出現(xiàn)的比較多。人工神經(jīng)網(wǎng)絡(luò)法具有較強的自主學習能力,魯棒性較好,缺點是訓練時間較長,需要學習較大數(shù)量的樣本。
手勢識別總體上屬于形狀匹配與識別范疇。在形狀匹配與識別方面,王生生等提出了一種基于特征點分類的融合框架,將全局與局部算法的匹配結(jié)果進行融合,提高了準確率[8]。朱聰斌等利用輪廓段中的高曲率顯著點將輪廓分割為若干部分,并設(shè)計了針對角度描述符和長度描述符的匹配算法[9]。劉硯菊等先對幾何形狀提取骨架,然后通過形狀上下文對骨架提取特征,最后通過形狀上下文距離度量兩個形狀的相似度[10]。王峰等提出了基于主曲率增強距離變換的形狀相似性計算方法,該方法對于部分內(nèi)容遮擋或缺失情況下的目標識別取得了較好的效果[11]。李向軍等提出了基于最小點對成本的二維輪廓精確匹配與分析方法,該方法首先構(gòu)建出列表輪廓原型知識庫,然后通過粗匹配得到形狀的大致類別,再通過細匹配得到具體的類別[12]。實時手勢識別對算法的時間復雜度要求比較高,以上算法在識別準確率指標上比較理想,但是由于時間復雜度的原因,以上算法不適合用于實時手勢識別。
本文提出了基于DTW 算法的手勢識別。DTW即動態(tài)時間規(guī)整(Dynamic Time Warping),該方法基于動態(tài)規(guī)劃算法的思想,用于計算兩個時間序列信號的歐式距離。由于DTW 算法具有魯棒性強的優(yōu)點,已被用于孤立詞語音識別[13]、聯(lián)機筆跡鑒別[14]等。
對手勢圖像提取特征,需經(jīng)過手部區(qū)域檢測、幾何形狀中心點定位、邊緣檢測與特征提取等步驟。
要進行手勢識別首先要獲取手勢區(qū)域,對于手勢區(qū)域的檢測,本文采用膚色檢測法[15]對存在手勢的圖像進行處理,檢測出手勢區(qū)域后,再將除了手部區(qū)域的其它部分全部變?yōu)榘咨珔^(qū)域,然后進行灰度處理,最后再利用圖像二值化實現(xiàn)圖像的分割。
如圖1 所示,假設(shè)黑色區(qū)域為手勢圖形區(qū)域,為比較手勢圖形的相似度,需要計算圖形各個邊緣點到幾何圖形中心點的距離。為求得幾何圖形的中心點,需要統(tǒng)計圖像每一行黑點個數(shù)和每一列黑點個數(shù)。假設(shè)圖像的高為H,圖像的寬為W,假設(shè)Sri代表圖像的第i 行的黑點個數(shù),Scj代表圖像的第j列的黑點個數(shù),則可以通過如下公式計算手勢圖形的中心點坐標(Cx,Cy):
圖1 手勢的一個例子
算法采用各個邊緣點與中心點的距離作為特征,因此,邊緣點的檢測是必不可少的步驟。邊緣點周圍一般既有黑點又有白點,因此,通過如下的方法進行邊緣檢測:對源圖像的各個像素點(x,y),如果像素點(x,y)為黑點,且像素點(x+1,y)、(x-1,y)、(x,y+1)、(x,y-1)不都是黑點,則將目標圖像像素點(x,y)標記為黑點。
為了比對幾何圖形,需要提取特征。如圖2 所示,假設(shè)A 點為用式(1)和式(2)求得的幾何圖形中心,B 點為由A 點垂直向下的射線與封閉曲線的交點。從B 點開始,沿著逆時針方向,逐步跟蹤曲線上的各個黑點,直至走完封閉曲線又回到B 點。在跟蹤過程中,記錄各個點的坐標(xk,yk)。在得到曲線上各個點的坐標序列之后,計算各個點相對于中心點的坐標(xck,yck):
圖2 特征提取示意圖
曲線長度也是重要的特征,為計算曲線長度,規(guī)定從一個點出發(fā),向上、下、左、右前進一步時,距離為1,向左上、左下、右上、右下前進一步時,距離為,既1.414。圖3 給出了曲線長度計算示意圖。在圖3 的例子中,假設(shè)每個黑點代表一個像素點,從M 點出發(fā),經(jīng)過N、R、S 到達T,則從M 出發(fā)到T點的曲線長度為1+
圖3 曲線長度計算示意圖
提取到的特征包括:
1)幾何圖形中心坐標(cx,cy);
2)幾何圖形邊緣像素點個數(shù)q;
3)按曲線長度遞增次序排列的幾何圖形各個邊緣像素點(xk,yk)的信息,具體包括:
(1)邊緣像素點(xk,yk) 相對于中心的坐標(xck,yck);
(2)從圖2中的起點B到當前像素點(xk,yk)的曲線長度lk。
對于形狀非常相似但大小不一樣的兩個手勢,希望將這兩個手勢判定為同一個類別。此時需要將兩個手勢圖形調(diào)整到相似大小。常見的方法是插值,即保持一個幾何圖形大小不變,通過插值使兩個圖形大小基本一致。但是插值的運算量通常是很大的。本文采用了縮放曲線邊緣點的坐標的方法。假設(shè)圖像的高為H,圖像的寬為W,則對圖像進行插值的時間復雜度為O(HW)。一般情況下,圖像內(nèi)的幾何圖形邊緣像素點個數(shù)與圖像矩形區(qū)域的周長是同一數(shù)量級。因此,縮放曲線邊緣點的坐標的時間復雜度為O(H+W)。顯然,縮放邊緣點坐標的運算量遠遠小于圖像插值的運算量。
采用根據(jù)封閉曲線長度進行縮放的方法。假設(shè)封閉曲線長度的初始值為Dori,即最后一個邊緣像素點(第q-1 個像素點)的曲線長度lq-1。假設(shè)經(jīng)過歸一化后長度變?yōu)镈des,為了實現(xiàn)縮放,首先需計算縮放比例系數(shù):
經(jīng)過線性縮放后,幾何圖形的中心變?yōu)?/p>
接下來,需要對邊緣曲線按等長度間隔的方式選取Ddes個點,并計算經(jīng)過縮放后的坐標。
假設(shè)(xk,yk)為被選取的邊緣點,經(jīng)過線性縮放后,(xk,yk)點的坐標變?yōu)?/p>
所以,經(jīng)過歸一化以后,(xzk,yzk)相對于中心點(czx,czy)的坐標為
假設(shè):
則vk代表長度歸一化后的邊緣點(xzck,yzck)與中心點的距離。在采用DTW 方法匹配幾何圖形時,可以使用vk值(即曲線高度)。
計算曲線各個點與若干鄰近點平均值的差值,對這些差值做DTW 匹配有望取得更好的結(jié)果。由于邊緣曲線是封閉曲線,所以根據(jù)式(12)得到的各個vk計算差值時,如果出現(xiàn)左側(cè)鄰域或右側(cè)鄰域越界的情況,應(yīng)將其看做循環(huán)周期信號進行處理。具體公式如下:
上式中,先對每個vk計算鄰近的2u+1 個點的平均值,其中(k-u)mod q 為鄰域左邊界,(k+u)mod q 為鄰域右邊界,q 為邊界曲線上點的個數(shù),mod q的作用是:把vk看做循環(huán)周期信號進行取數(shù)。圖4給出了對圖2進行相對曲線高度計算的一個例子。
圖4 相對曲線高度的一個例子
利用上面得到的相對曲線高度特征采用DTW算法求取相似度,具體過程如下。
設(shè)模板序列為A 和測試序列為B,他們的長度分別為i 和j,那么首先得建立一個i*j 大小的矩陣,矩陣中的元素(m,n)對應(yīng)兩個序列元素的距離d(m,n),這里我們的特征采用相對曲線高度,求取距離的公式如下:
其中A 和B 分別代表兩個序列中各個點的相對曲線高度,ABS()為求絕對值的函數(shù)。DTW 算法就是要在矩陣中尋找一條最短路徑。按照DTW 算法的規(guī)則,路徑必須從左下角開始右上角結(jié)束,因為曲線上的點都是逐個遍歷,因此先后順序是固定的。再根據(jù)單調(diào)性和約束性,(m,n)的前一個點只能是(m-1,n)、(m-1,n-1)和(m,n-1)三個點中的一個,所以計算距離的公式為
利用該公式就可以求出兩個模板序列的累加距離,從而求出測試序列和所有模板序列的距離。
為驗證本文算法的識別效果,對ASL手勢庫[16]中的‘0’、‘1’、‘2’、‘3’、‘4’、‘5’、‘6’、‘7’、‘8’、‘9’這十個數(shù)字的手勢進行了測試。在ASL 手勢庫part1組,每個數(shù)字的手勢包括25幅圖像,十個數(shù)字共250 幅圖像。測試分為兩組,第1 組選取每個數(shù)字手勢的第1幅圖像為學習樣本,其余24幅圖像為測試樣本。第2組選取每個數(shù)字手勢的第1幅圖像和第11 幅圖像為學習樣本,其余23 幅圖像為測試樣本。得到的識別準確率如表1所示。從表1可以看出,在每個數(shù)字選取1 幅圖像為學習樣本時,總體識別準確率為0.975。在每個數(shù)字選取兩幅圖像為學習樣本時,總體識別準確率為1.0。表明本文的方法對手勢具有較高的準確率。
表1 本文算法識別手勢幾何形狀的準確率
在時間耗費方面,在CPU 為Intel i7-4900MQ,內(nèi)存為8G 時,測得對單幅圖像特征提取的平均時間為0.074s,兩個手勢的特征進行比對時平均時間為0.0011s。假設(shè)識別十種手勢,每種手勢保存兩個特征模板,則識別一個手勢所需的時間大約為20*0.0011+0.074=0.096s,表明本文的算法基本可以滿足實時手勢識別的要求。
本文提出一種基于DTW 的手勢識別算法,該算法能夠?qū)κ謩菪螤畹臅r間序列進行規(guī)整,然后進行相似度計算。實驗結(jié)果表明使用較少的樣本也能取得較好的識別結(jié)果,由于DTW 算法具有魯棒性強的特點,使得文本的算法對有一定形狀變化的手勢也能準確識別。經(jīng)實際測試表明,本文的算法在識別十種手勢時,識別一個手勢所需的時間小于0.1s,可以滿足實時手勢識別的要求。