邵天培,蔣 剛,留滄海
(1.西南科技大學 制造科學與工程學院,四川 綿陽 621010;2.制造過程測試技術省部共建教育部重點實驗室,四川 綿陽 621010;3.成都理工大學 核技術與自動化工程學院,成都 610059)
隨著人類社會和機器人領域的不斷發展,人類與機器人在各個方面也在不斷地融合,機器人逐漸融入到了人類的生產制造過程和生活中,人類與機器人的關系日益密切,這就迫切地需要人類與機器人進行交互,從而能夠比較順利地實現人機合作與人機共融[1]。在人機交互領域中基于視覺的手勢識別因為具有簡單、直觀、表達能力突出且自然的優勢逐漸成為研究熱點[2-5]。Bertsch等人[6]在仿人機器人平臺上構建了基于視覺的人機交互系統,該研究使用隱馬爾可夫模型識別動態手勢,但是這種方法準確率不高且易受光照影響。Thinh 等人[7]在機器人上安裝手機,利用手勢通過手機上的攝像頭與機器人進行交互。隨著Kinect的問世,進一步彌補了人機交互方式上硬件的不足[8]。王兵等人[9]基于Kinect采用指尖檢測算法并針對運動軌跡中運動方向的變化,提取了動態手勢的特征并識別各個手勢。Y.Gu等人[10]利用 Kinect并基于骨骼特征,使用隱馬爾可夫模型訓練進行測試,但該方法平均識別率不高且數據訓練復雜。本文針對動態手勢識別準確率不高且易受光照影響等問題對動態手勢識別進行了研究。
動態手勢識別通過關注分析視頻序列中的連續手勢軌跡信息來判斷手勢語義,而不關注手型[11]。本文將基于Kinect傳感器進行動態手勢識別,Kinect會首先采集視頻序列中的用戶手勢,然后依次進行手勢分割、手勢質心計算、手勢軌跡特征計算,最后進行手勢軌跡特征識別。
手勢分割是指將人手準確地從簡單或復雜背景環境中分割出來[12,13],這是極其重要的一步,因為手勢分割的好壞會影響后續環節。手勢分割部分的難點在于目標手勢易受光照和環境的影響。常用的方法,比如單純利用膚色進行手勢分割[14],則會把類膚色物體包括進來,在室內不同光照下利用膚色進行分割,效果如圖1所示:從圖1(a)可知,膚色分割雖然完整分割出了手勢,但也將人的面部和類膚色物體一起包括。從圖1(b)可知,在室內較弱光照條件下,分割出的手勢甚至不完整,所以光照條件的改變會令手勢分割變得異常困難。

圖1 不同光照下基于膚色的手勢分割結果
而利用Kinect采集的深度圖像信息則會在進行手勢分割時有效減少光照條件帶來的影響。這是因為Kinect采集的深度圖像存儲在一個二維數組里[15],數組中的每一個像素點表示該像素點到傳感器的距離,由于做一組動態手勢時人手通常離傳感器最近,所以可從繪制出的深度圖像直方圖中找到較小的灰度級,設定不同的閾值就可以準確地從背景中分割出感興趣區域,再將感興趣區域轉換成二值圖像即可。經過上述操作,就可以完整地從背景中分割出目標手勢。如圖2(a)右側所示為較強光照條件下的深度圖像,圖2(b)左側為深度圖像直方圖,右側為手勢分割結果,其中,深度直方圖中圓圈所在橫坐標為選定閾值的大概范圍,該范圍根據不同距離選取不同的值。本文中閾值范圍為35~44左右,下同。

圖2 較強光照下基于深度信息的手勢分割結果
較弱光照條件下,利用深度信息對目標手勢進行分割的結果如圖3所示。

圖3 較弱光照下基于深度信息的手勢分割結果
在不同環境條件下,利用深度信息對目標手勢進行分割的結果如圖4所示。

圖4 不同環境下基于深度信息的手勢分割結果
從上述實驗結果可知,在不同環境和不同光照條件下,本文所采用的方法依然可以準確地分割出目標手勢,證明了本文方法的可靠性和優勢。
矩代表一幅圖像或一個輪廓的全局特征,是描述圖像特征的算子[16]。得到手勢分割圖像后,可計算出圖像和輪廓的矩。
m00表示圖像零階矩,v(i,j)表示圖像在點的灰度,(i,j)當圖像為二值圖像時,m00代表圖像中白色區域的總和,因此可以用來求二值圖像和輪廓的面積。如式(1)所示:

(1)
m10和m01表示圖像的一階矩,當圖像為二值圖像時,m10表示圖像所有白色區域坐標的累加,m01表示圖像所有白色區域坐標的累加。如式(2)、(3)所示:

(2)

(3)
再根據式(5),式(6):
(4)
(5)
就可得到目標區域即手勢的質心點坐標(x,y)。最后繪制出輪廓的矩形邊界。
利用圖2(b)中的手勢分割結果得到的手勢輪廓矩形邊界、零階矩和一階矩的值以及手勢圖像質心坐標如圖5所示。

圖5 矩形輪廓與手勢質心坐標
當每幀手勢圖像傳入時,都按照上述方法操作,得到每幀圖像中的手勢質心,這樣便得到了一連串的手勢質心點坐標。綜上所述,完成手勢質心計算。
前文提到,動態手勢識別關注的是手勢軌跡信息,而不關注手形。本文要做的就是從連續的視頻幀里得到動態手勢的軌跡信息。當一個動態手勢完成后,假設相鄰兩幀圖像手勢質心點坐標分別為(x1,y1)和(x2,y2),則每幀圖像中的手勢質心坐標結合在一起可以表示成一個手勢質心軌跡p:
p=[(x1,y1), (x2,y2),…, (xi,yi)]
(6)
同時,每相鄰兩幀手勢質心點連成的直線與水平方向都會形成一個角度,設該角度為θi:
(Δxi,Δyi)=(xx+1-xi,yi+1-yi)
(7)
則多個不同的θi可以組成個一維向量T:
T=[θi,θi+1,…,θi+n]
(8)
將一維向量T中的每個角度都利用鏈碼進行編號,其中,θi的值決定了θi所在鏈碼編號,依次類推。如此便可得到一個由鏈碼編號組成的一維向量X,而X正是動態手勢的軌跡特征。
如圖6所示,鏈碼[17]把一個平面平均分成了12個部分,并對這12個部分進行編號,編號分別為1~12。

圖6 鏈碼示意圖
設0~180°范圍內,相鄰編號所屬直線之間的角度為30°。在0~-180°范圍內,相鄰編號所屬直線之間的角度為-30°。
當平面被平分的部分越多,通過角度θi的值量化得到的編號越準確,則動態手勢的軌跡特征越精確,所以這里將平面劃分成12個部分。
例如,利用第一幀手勢圖像質心坐標點與第二幀手勢圖像質心坐標點計算出兩點形成的直線與水平方向所成角度為,再比較是否在0~30°范圍之內,若為0°則添加編號1到一維向量X中,若在0~30°之間,則添加編號2到一維向量X中。由此可以得到動態手勢軌跡特征X。
本文選擇其中穩定的6個手勢質心點進行計算,則X的長度為5,即每個完整的手勢軌跡特征由5個編號組成。
在完成手勢分割、手勢質心與手勢軌跡特征計算的基礎上就可以進行手勢軌跡特征識別。由于不同的人在做同一手勢動作時速度不一樣,所需的時間也不一樣,則會造成每個人的手勢起終點不確定。若要進行手勢起終點判定則會加大計算量和復雜程度,影響效率。
而動態時間規整算法(DTW,dynamic time warping)則通過把手勢軌跡特征進行延伸或縮短,來計算比較兩個手勢軌跡特征之間的相似性,所以采用DTW算法可以省去手勢起終點的判定,并減少不同的人做相同手勢時,手勢軌跡特征不完全相同帶來的影響。
假設給定兩個序列:
X=[x1,x2,...xi],Y=[y1,y2,...yj]
(9)
其中:i=j。在本文中,X實際為得到的手勢軌跡特征,Y為事先設定好的多個手勢軌跡特征模板且每一個模板Y都擁有唯一序號。當X與Y之間的累積距離越小,則代表這兩個序列越相似,即表示X與Y越吻合。
DTW算法的步驟如下:
1)構造一個i*j的距離矩陣M,M矩陣中元素(i,j)表示xi和yj兩個點的距離d(i,j);
2)根據距離矩陣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)
計算得出;
3)矩陣N中最右上角的元素為累積距離Q。
舉例說明:假設手勢軌跡特征X=[3,5,6,7],模板Y=[4,3,2,6]現在要比較X和Y的相似程度,DTW會根據X與Y之間點到點的距離生成一個距離矩陣M,結果如下:

(11)
然后根據距離矩陣M生成累積距離矩陣N,結果如下:

(12)
由累積距離矩陣N中最右上角的元素可知,累積距離Q=4。
綜上,當完成手勢分割,手勢質心和手勢軌跡特征計算后,會得到一個一維的手勢軌跡特征向量X,將X作為輸入喂入DTW算法模型并依次與模型中的多個手勢軌跡特征模板Y進行模板匹配,得到多個累積距離Q,將Q中最小值所屬模板Y的序號作為輸出結果,從而完成手勢軌跡特征識別。
DTW算法[18-20]數據訓練簡單,結構簡單明了易于實現,同時也省略了手勢起終點的判定且識別準確率高。缺點是模板Y需要事先定義,且計算量隨著模板的增多而加大。
本文實驗的硬件主要包括:顯卡為GTX1050,內存為4 GB和處理器為i7的筆記本電腦、基于Kinect開發環境的傳感器、一臺六足機器人。
軟件部分主要包括:PyCharm編譯環境、開源計算機視覺庫(OpenCV,open source computer vision library)、開放式的自然交互框架(OpenNI,open natural interaction)以及采用Python編寫的手勢識別算法。
首先傳感器采集用戶動態手勢視頻序列,將視頻序列傳給上位機進行處理得到與該用戶手勢軌跡特征匹配的模板的序號,將該模板序號傳給STM32,驅動板根據STM32計算得到的舵機數據進行六足機器人舵機控制,同時機器人自身傳感器采集六足機器人狀態,將狀態信息發送至STM32,形成閉環控制,完成手勢對六足機器人的控制。
首先設定人機交互手勢模板,如表1所示。該模板設計了4種動態手勢指令分別控制機器人4種動作。該模板存儲在DTW模型中,其中模板基于鏈碼規則設定。

表1 自定義人機交互手勢模板
現在要使機器人前進,則用戶將手在六足機器人搭載的傳感器前由左向右水平移動。
經過手勢分割的移動過程如圖7所示。

圖7 動態手勢移動分割圖
經過上位機處理得到如下6個手勢質心坐標和手勢軌跡特征X=[1,2,1,2,1],如圖8所示。

圖8 質心坐標與手勢軌跡特征
隨后X將被送入DTW模型中與已經建立好的多個模板Y進行匹配,匹配結果如圖9所示。

圖9 匹配結果
由圖9可知,X與序號為0的模板累積距離為2,X與序號為1的模板累積距離為43,X與序號為2的模板累積距離為13,X與序號為3的模板累積距離為28。
經過篩選最終得到了與X累積距離最小的模板:序號為0,累積距離Q=2。即手勢軌跡特征X=[1,2,1,2,1]與模板Y=[1,1,1,1,1]最相似吻合。
將該模板序號數字0通過無線傳輸設備傳給STM32分析處理語義信息,再由STM32向六足機器人傳輸指令控制六足機器人的行動軌跡。以圖10中黑色叉為標記,采用前進手勢進行交互時,六足機器人完成前進動作。

圖10 人機交互結果
本文在不同環境和不同光照條件下進行了多次動態手勢識別實驗,得出結果如表2~4所示。

表2 室外光照識別結果

表3 室內較強光照識別結果

表4 室內較弱光照識別結果
實驗結果表明,在室內較強光照條件下,手勢識別效果比較弱光照條件下好,最好的識別準確率能達到97.3%。在室內較弱光照條件下,準確率仍然能達到91%及以上。在室外的手勢識別效果不如室內,但準確率依然能達到90%左右。由此可知在外部環境變換的情況下,該方法依然能保持一個較好的識別準確率,也證明了整個動態手勢識別方法的魯棒性較好。
綜上所述,本文基于Kinect傳感器對動態手勢識別進行了研究。利用深度信息分割出目標手勢,此方法不易受環境和光照的干擾。基于矩和鏈碼計算出手勢質心和手勢軌跡特征。在手勢軌跡特征識別部分,傳統方法大多數采用隱馬爾可夫模型,但該方法訓練非常困難和復雜,同時要進行手勢起始點判定。所以采用訓練簡單、結構易懂、識別準確率高的DTW算法并且避免了手勢起始點判定,該算法缺點是不能識別模板中沒有的手勢。最后將手勢識別結果與六足機器人進行交互,實現動態手勢對六足機器人的控制。