董旭德,許源平,舒紅平,張朝龍,2,盧麗,黃健
(1. 成都信息工程大學 軟件工程學院,四川 成都 610225; 2. 英國哈德斯菲爾德大學 計算與工程學院,西約克郡 哈德斯菲爾德 HD1 3DH)
近年來,隨著計算機的發展和普及,人機交互(human-computer interface,HCI)應用正逐漸以更加多樣化的形式全面融入到人們的學習、工作和生活中。其中,由于手勢是一種出現較早,使用廣泛且較為統一的人類日常交流手段,所以基于手勢的HCI技術得到了越來越多的關注,特別是在難以基于統一的語言進行交流的相關應用場景。手勢交互包括靜態手勢和動態手勢兩種類型[1],其中靜態手勢是指在某一時間點手勢的形態所表達的意義,而動態手勢是指在時間序列中一段手勢的運動軌跡所表示的含義。傳統的手勢識別需要借助于特殊的硬件設備(如數據手套),通過各種傳感器來獲取用戶關節的位置信息,進而進行手勢識別。這樣的方式雖然較為準確但同時增加了手勢識別的成本,也大大降低了用戶的應用體驗,限制了手勢識別的應用場景。另一方面,近幾年來,基于機器視覺的手勢識別解決方案因其低廉的硬件成本、方便性和易獲取性等優點得到了快速的發展,成為了當前的研究熱點。它的研究涉及到模式識別、計算機圖形學、計算機視覺和人工智能等多個領域,在人機交互方面有著更廣闊的應用前景,主要包括:1)手語識別,例如,普通人與聾啞人之間的交流存在障礙,而自動手勢識別可以提供良好的手語智能交流平臺,使得雙方可以進行無障礙交流;2)在線教育,通過精準的手勢識別,可以操控圖像顯示,使得教學課程更具吸引力;3)機器控制,在復雜的背景環境下,可以通過手勢實現對智能機器人或智能家電的便捷控制。因此,此課題的研究目標是設計并開發一套高效、準確的靜態手勢智能識別系統并將其應用于機器人智能控制領域。
依據前期相關研究工作的總結,當前智能靜態手勢識別的核心研究點包括手勢定位、手勢分割、特征提取和分類識別[2-4]。其中,手勢分割是自動地將定位后的手勢從背景中提取出來的圖像分割方法,手勢分割的效果(完整度和準確率)對后續處理過程的識別率和計算效率起到至關重要的影響。因此,手勢分割是整個智能手勢識別過程中的關鍵處理步驟。Tara等[5]學者提出了一種基于深度圖像的手勢分割方法,利用閾值分析技術求得手勢在圖像中的位置,但深度圖像設備價格過于昂貴無法普及使用。王先軍等[6]學者運用Hu特征矩描述手勢的輪廓特征,進而用BP(back propagation)神經網絡進行手勢分類。但是,僅基于Hu特征矩的特征描述包含大量的冗余信息,所以其后續識別的實時性無法保證。同一時期,Patel等學者利用SIFT(scale invariant feature transform)特征點匹配算法對美國手語(ASL)的26個英文字母A-Z和10個數字0-9對應的靜態手勢進行了匹配識別[7]。
綜上所述,當前手勢分割與識別的主要技術難點為:1)類膚色背景下難以準確進行手勢分割;2)手臂部分的冗余信息難以去除;3)難以降低手勢識別的計算復雜度[8-11]。針對以上問題,本文提出了一種能夠在相對低廉的單目視覺硬件平臺上,基于ICWA算法和集成PCA降維與凸性檢測方法的靜態手勢分割算法模型。本文首先討論如何利用圖像梯度信息和ICWA算法進行類膚色背景環境下的手勢圖像分割與提取,再結合PCA降維算法提取的手勢斜率特征和凸性檢測獲得的手勢凸點信息,說明如何將手掌和手臂部分進行分割,進而有效地減少手勢識別的冗余信息。本文通過展示與文獻[7]中的SIFT算法的對比實驗結果驗證了該模型能夠高效、準確地從類膚色背景環境中分割、提取出手勢圖像并準確地將手掌和手臂的圖像區域區分開來。最后,本文還展示了一個初步的基于卷積神經網絡(convolutional neural network, CNN)的手勢智能識別框架并獲得了良好的識別率,從而進一步驗證了此模型的正確性和實用性。
研發基于ICWA的手勢智能識別系統的主要步驟為手勢定位、手勢分割和手勢識別,其總體工作流程(如圖1所示)為:1)在單目視覺條件下采集圖像數據并進行手勢定位;2)利用ICWA對定位后的圖像進行膚色區域與類膚色背景的分離;3)保留膚色區域并刪除冗余的手臂區域;4)利用深度學習網絡進行手勢識別。

圖1 手勢分割與識別流程圖Fig.1 A flow chart of the gesture segmentation and recognition
膚色信息通常被用于人臉識別和手勢識別等研究中[2,4]。對于手勢識別應用,只要在合適的色彩空間中(例如:HSV、HSI、RGB、YUV和YCrCb)對膚色圖像數據進行采樣并計算合適的閾值就可以實現膚色區域和非膚色區域的分割。由于膚色檢測對亮度十分敏感,因而將RGB空間下的圖片轉化到YCrCb空間以減少亮度對膚色檢測的影響。經過理論分析與實踐可知,YCrCb空間是最適合膚色圖像區域分割的顏色空間。RGB空間與YCrCb空間的轉換公式為

為了進一步降低光線對目標分割的影響,需要將亮度分量單獨保存到一個顏色空間[12-13],經過大量實驗證明,YCrCb空間最適合膚色分割且黃種人的膚色區域閾值為:Y>80,133<Cr<173,77<Cb<127[14-15]。因此,將圖像從 RGB 空間轉換到YCrCb空間后,根據此閾值即可以將膚色和非膚色區域分割開。其結果如圖2和圖3所示。

圖2 原始圖像Fig.2 The original image

圖3 膚色分割后的圖像Fig.3 The segmented image
簡單的基于YCrCb空間的膚色分割方法并不能達到準確地分割出手勢的目的,因此需要進行進一步的算法處理,其中首要的任務就是要分離膚色和類膚色區域,從而實現手勢區域的準確提取。首先,圖3所示的結果依然包含了很多粗糙點、空洞點和毛邊等,所以在準確分割、提取前,利用形態學中的開運算(先進行腐蝕操作后進行膨脹操作)和閉運算(先進行膨脹操作后進行腐蝕操作)對原始靜態手勢圖片進行預處理以去除圖像數據噪聲。 腐蝕與膨脹操作的公式為

腐蝕之后圖像會向內收縮,而膨脹之后圖像會向外擴展。如圖4所示,手勢圖片經形態學的開和閉運算之后消除了毛邊和空洞點,圖片中的手勢邊界和類膚色區域邊界均較為圓滑,適合進行下一步的膚色與類膚色區域的精確分割與提取。

圖4 經開閉運算后的手勢分割圖Fig.4 The gesture segmentation image processed by open and close operations
分水嶺算法(watershed algorithm, WA)是一種基于計算機形態學的圖像分割算法,它能夠高效、準確地連通目標區域的邊界,因而被廣泛地應用于數字圖像處理領域[16]。傳統的WA是一種基于拓撲理論的數學形態學分割方法,它將一張圖像看成一幅地形圖,每個像素點坐標(x,y)即成為地形圖中的平面坐標,而該像素點的灰度值即是地形圖中的海拔高度值。每一個局部極小值都被稱為積水盆地且會對其附近的區域產生影響。由于傳統的WA是一種基于圖像梯度的圖像分割方法,所以當圖像中擁有的局部極小值太多時就會形成過多的初始化點,導致圖像的過度分割問題,從而得不到理想的分割結果。因此,需要在傳統的WA上進行改進,以求解決過度分割問題,所以改進的算法必須能夠減少原圖像像素的梯度差,同時減少初始分割點。本文提出的ICWA的總體算法流程如圖5所示。

圖5 改進后分水嶺算法(ICWA)流程圖Fig.5 The workflow of ICWA
1)對開閉操作后的灰度圖像進行高斯濾波,以去除噪聲數據。例如,經過高斯濾波后的灰度圖像可以消除大量無效的局部最小值點,以防止過度分割。
2)計算開、閉操作后灰度圖的Hu矩,再由Hu矩特征得到質心坐標。幾何矩和質心坐標的計算式為

式(4)表示圖像f(x,y)的p+q階幾何矩,而式(5)表示圖像f(x,y)的質心坐標。
3)將質心和經過高斯濾波過濾后的圖像梯度的局部極小值作為積水盆地(經過大量實驗驗證,這里選擇梯度值低于22),并開始一點點填充尋找分水嶺。經過ICWA處理結果的對比實驗證明,該算法可以完整地分割、提取出淺藍色的手勢區域,并準確地排除其他類膚色區域,如圖6所示。與之相比,傳統WA會造成嚴重的過分割現象,如圖7所示。此外,如圖8所示,經過ICWA分割、處理得到的圖片周邊會存在很多毛刺,因此還需要對圖8進行中值濾波處理,處理后的結果如圖9所示。

圖6 ICWA算法的處理效果Fig.6 Output results of ICWA

圖7 傳統分水嶺算法(WA)的處理結果Fig.7 Output results of the traditional WA

圖8 ICWA提取的手勢圖片Fig.8 The gesture image of extracted by ICWA

圖9 中值濾波處理結果Fig.9 The processing result median filter
在手勢識別中手掌部分的信息是最重要的,其影響著手勢識別的正確率,而手臂部分則是冗余信息完全可以刪除,所以實現手掌與手臂之間的分割是手勢智能識別之前的關鍵處理步驟,它可以有效地提高手勢識別的計算效率以及手勢識別的準確率。因此,本文提出一種基于凸性檢測[17]和PCA降維算法[18]相結合的手臂分割方法。
凸性檢測是理解物體輪廓的一種有效方法,就是求一組點集的凸包集合。它是計算機幾何學的一個基本問題,其本質就是利用Graham Scan算法來維護一個凸殼(凸包輪廓),通過不斷地對凸殼中加入新點或者刪除影響凸性的點,來不斷地改變凸殼的形狀,最終形成一個穩定的凸包,其算法流程總結如下:
1)對點集的排序,其目的是為了梳理雜亂的點集以提高算法的效率。這里采用極坐標系,找到y坐標最小的點(若y坐標相同則取x小的點)記為 p0,將 p0與{p1,p2,...,pn}中每個點相連,再以p0為極點,進而計算每條連線的極角并按從小到大排列(若極角相等則計算距離由小到大排列)。
2)把p0、p1依次入棧,遍歷剩下的點集PLeft={p2,p3,p4,...,pn}把屬于凸包的點集入棧,其他無關點集出棧。其中,可以根據叉積來判斷入棧和出棧,若依次遍歷PLeft中的每一個點,若當前點為凸包凸點時,則向左旋轉,而沒有向左旋轉的點則是非凸點。 p1與 p2的叉積在物理上可以理解為兩向量所組成的平行四邊形的面積,而數學上可以通過正負來判斷方向。若 p1與 p2的叉積為負,相對于 p0p1,點p2在逆時針方向即左邊入棧,若 p1與 p2的 叉積為正,則相對于 p0p1,點p2在順時針方向即右邊進行棧頂元素出棧操作。依據這個原則繼續判斷棧頂前兩個元素與前點的位置關系,最后棧中的點集就是本文需要找的凸點,連接后就是凸包。凸性檢測實驗判定手勢凸點的輸出結果如圖10所示,其中輪廓為檢測出的凸包輪廓,圓圈為檢測出的凸點,而表1記錄了凸點位置與凸包輪廓之間的距離。

圖10 凸性檢測處理結果Fig.10 A convexity detection result

表1 凸點位置分類及其與凸包輪廓的之間距離Table1 Convex point location classification and the distance between location and its convex hull contour
3)根據已有的凸包輪廓和凸點坐標,可以進一步求得凸點坐標和凸包輪廓之間的距離,將點集分為距離凸包輪廓近的“近點”和距離凸包輪廓遠的“遠點”,一般人的手腕都是凹陷處即遠點,所以尋找手臂分割線可以先從“遠點”入手,若“遠點”集合中沒有再尋找“近點”集合。
PCA即主成分分析,用于圖像和數據的降維,其本質就是將高維數據降維到低維空間。這里探索將PCA降維方法應用于手臂分割線的提取,主要目的是要研究一種方法來便捷地得到手勢的主要方向。基于手臂分割線與手勢方向基本呈現垂直狀態的客觀事實,求得了手勢的方向也就得到了手臂的分割線?;赑CA降維的手臂分割線提取算法的具體步驟如下:
1)求得原始靜態手勢圖片的均值圖片,并以原始圖片減去均值圖片得到均差圖片。
2)求得步驟1)中均差圖片的協方差矩陣,再由協方差矩陣得到靜態手勢圖片的特征值和特征向量,將特征值和特征向量一一對應并按從大到小進行排列。
3)取前k個特征向量,對均差圖片進行降維?;谥幌霃脑摲椒ㄖ械玫绞謩莸姆较?,只要取值meaneigval=1(meaneigval為選取前meaneigval個特征值與其所對應的特征向量,因為一副靜態手勢圖片中,手勢斜率為其主要特征且特征值最大,因此meaneigval取值為1)即可得到原始靜態手勢的斜率k。
4)為了有效降低計算量,此算法先遍歷“遠點”集合中的每兩個點,求得它們之間的斜率k′和距離 d,進而根據 k×k′=-1,取得與-1 最接近的前3條連線和點集,再從中取d最大的作為手臂的分割點,因為手臂間的寬度總是大于手指間的寬度。若在“遠點”集合中沒有尋找到分割線就再在“近點”集合中進行查找。最后,還要以手勢質心方向判斷分割線是否查找正確,若質心點在分割線之上則正確,反之錯誤繼續查找。根據以上步驟進行了基于PCA降維的手臂分割線提取方法的手腕分割實驗,結果如圖11和圖12所示。

圖11 提取的手臂分割線Fig.11 An extracted arm dividing line

圖12 手掌與手臂的分割結果Fig.12 The segmentation between the palm and arm
本文的實驗采用Python3.5和OpenCV3.3實現,測試平臺的硬件環境如表2所示。本文使用的手勢圖片數據集包括Marcel標準手勢數據集和網絡上收集的手勢數據圖片,一共包含了9種手勢,共16 898張圖片。

表2 實驗硬件環境Table2 Experimental hardware environment
本文首先使用傳統的SIFT算法對無類膚色背景的靜態手勢圖片進行了基于特征點匹配的自動識別,其識別結果如圖13所示。其中,手勢圖片為數據集中表示“平鋪”意義的手勢,圖13(a)檢測出了47個特征點,而圖13(b)檢測出了41個特征,連線表示匹配成功的特征點??梢钥闯?,在此SIFT特征點匹配算法中,由于手勢的旋轉或者陰影的干擾,都會造成特征點提取和匹配的誤差,從而導致識別的準確率降低,同時由于手臂的冗余信息無法去除會造成匹配算法的效率大大降低。

圖13 SIFT算法特征匹配結果Fig.13 SIFT feature matching results
此外,本文將傳統WA、主動標記的分水嶺算法AMWA(active marker watershed algorithm)和ICWA進行了對比實驗。圖14在展示了在類膚色背景下WA、AMWA和ICWA之間的靜態手勢分割結果對比。其存在的主要問題在于WA算法雖然能夠分割出膚色和類膚色區域,但會出現嚴重的過分割現象,將手勢分割的較為零散,影響后續識別的準確率。而改進的AMWA算法,雖然不會出現過分割現象,但無法區分膚色和類膚色區域,所以同樣影響識別準確率。而本文提出的ICWA算法可以較為準確地分割出手勢區域,原因在于其集成的高斯濾波可以有效地減少圖像的梯度差,并且ICWA算法只由一個質心點作為初始點,有效地減少了傳統靜態手勢分割算法中的過分割和無法完全分割的問題。本實驗將ICWA處理后的圖片(像素為48×48)作為輸入數據,放入LeNet CNN中達到了較好的識別效果。為了驗證該實驗的實用性和正確性,本實驗初步采用了CNN中最經典的LeNet-5模型:首先由6個卷積核為5×5、步長為1的卷積層提取圖像特征,由核為3×3、步長為2的池化層聚合特征,然后由16個卷積核為5×5、步長為1的卷積層提取特征和核為3×3、步長為2的池化層聚合特征,再由2層全連接層平鋪特征進行分類,最后輸出分類信息,具體結構如圖15所示。

圖14 類膚色區域背景下的WA、AMWA和ICWA之間處理結果的對比Fig.14 Comparison of processing results among WA, AMWA and ICWA with skin-like background

圖15 CNN手勢識別結構圖Fig.15 The CNN architecture for gesture recognition
如表3所示,使用傳統SIFT算法識別9種手勢的平均識別率為83.04%,而本文所提出的ICWA+LeNet CNN方法的識別率都高于SIFT算法,且其平均識別率達到了97.85%。其主要原因在于:1)SIFT方法會受到手勢的旋轉和陰影的干擾而導致特征點提取的不一致和相應的匹配錯誤,最終無法正確進行手勢識別; 2) SIFT算法需要進行特征點匹配,若匹配不成功就會出現誤據,而ICWA利用CNN進行分類則不會出現誤據的情況。因此,ICWA算法可以完整地分割出靜態手勢的有效區域,進而能夠準確地提取出靜態手勢的特征。

表3 SIFT算法和ICWA算法準確率與誤據率對比Table3 Comparison of accuracy and error rate between SIFT and ICWA %
利用Marcel標準手勢數據集,在表2所列的硬件平臺上對本文所提出的ICWA和傳統分水嶺算法進行對比實驗。圖16分別展示了ICWA+Le-Net CNN方法和傳統的分水嶺算法+LeNet CNN方法對Marcel數據集中的每張圖片進行分類識別的結果對比(按手勢種類取平均值)。從實驗結果可以看出,ICWA+LeNet CNN方法識別率明顯高于傳統分水嶺算法+LeNet CNN方法。

圖16 傳統分水嶺算法(WA)與ICWA的平均識別率比較Fig.16 Comparison of average recognition rate between traditional WA and ICWA
本文發現基于低成本單目視覺的靜態手勢分割算法依然難以在復雜類膚色背景下進行準確、完整的手勢圖像分割與提取:1)傳統分水嶺算法很容易在類膚色背景和手勢前景中造成嚴重的過分割現象;2)傳統方法沒有考慮將手臂和手掌部分進行高效地分割,以減少冗余信息。為了解決這個難題,本文提出了針對有大量類膚色背景的靜態手勢分割算法模型。其設計并集成了ICWA算法、PCA降維與凸性檢測融合算法。該模型首先由ICWA算法進行膚色區域與類膚色區域的區分,保留膚色區域,然后由PCA降維與凸性檢測相結合的算法求得手臂分割線,排除手臂冗余區域。最后,經過大量實驗驗證了該算法模型的準確性、有效性和實用性。其精確、高效的手掌部分圖像的分割與提取為后續靜態手勢的快速、智能識別打下了堅實基礎。
未來的研究重點是探索一種特征描述算子來描述、記錄動態手勢的軌跡,特別是三維深度信息。此外,需要深入研究并設計出滿足實用要求的深度學習網絡來高效、智能地識別有缺陷的靜態手勢分割圖片和使用動態的手勢軌跡特征進行學習。