于 蕾
(1.合肥職業技術學院 信息工程與傳媒學院,安徽 合肥 230011;2.中國科學技術大學,安徽 合肥 230011)
現如今,人們對于人機交互技術的需求日益提高,手勢識別便是人機交互的重要的手段之一。人機交互的目標是使人機器即計算機的性能與人-人交互相似。手勢在我們的日常生活中起著重要作用,它們可以幫助人們傳達信息并表達自己的感受[1]。從技術上講,手勢是時空模式,可以是靜態的,動態的或兩者兼而有之的。手勢識別技術可以應用于各個學科和我們的生活領域中了,如智能家居方向就可以使用這種高效的控制方式實現對設備的操控[2]。手勢識別的研究可以分為動態手勢和靜態手勢。其中,靜態手勢是利用模版匹配法進行手勢識別,主要是分析不同特征(HOG特征[3]、Gabor特征[4]、幾何特征[5]、譜圖小波特征[6]以及多特征聯合[7])信息的識別效果。而動態手勢則在靜態手勢的基礎上基于狀態轉移的圖模型方法,檢測和跟蹤手勢目標[8]。例如基于深度卷積網絡的深度學習方法可以通過SSD模型和微調網結構實現目標識別和匹配[9]。本文基于OpenCV(Open Source Computer Vision Library)的進行數字靜態手勢的匹配識別研究。首先,對手勢圖像預處理:對攝像頭提取到的幀圖片進行二值化后,再濾波去噪、開運算以達到去除背景的效果;然后進行手勢圖像提取:預處理后的圖像在HSV顏色模型下分離通道進行膚色分離處理,歸一化后再次中值濾波去噪后對手勢進行輪廓提取并過濾,繪制出手勢輪廓。最后進行手勢圖像分類識別:采用Hu不變矩進行模板匹配從而達到手勢識別的目的。
HSV(HUE色調,Saturation飽和度,Value明度)是根據顏色直觀特性有A.R.Smith在1978年創建的一種顏色空間[10]。H的取值范圍為0°~360°,紅色為0°,按逆時針開始計算;S的取值越大,顏色越飽和;V的取值范圍為0%~100%,由黑到白。一般情況下,RGB模型面向的是工業工程,而HSV模型面向的是用戶。在本文中,HSV顏色模型至關重要,通過該模型直接進行膚色分割,因為黃種人的膚色在HSV顏色模型中各項參數是由取值范圍的。膚色范圍:H(0-30),S(30-170),V(0-200)。
本文所要實現的是實時的手勢識別,所以對于初始的圖像是由視頻中的幀圖像提供的。首先打開攝像頭,利用的是VideoCapture來訪問計算機的攝像頭,如若訪問失敗,便會輸出攝像頭打開失敗的信息,并停止程序。環境需要光線充足,用戶必須穿著長袖衣物以遮擋手腕部分。當攝像頭成功打開,繼續執行程序,將攝像頭獲取的圖片幀儲存到frame中,如若后續過程中攝像頭沒有接收到圖片,便輸出沒有獲取圖片并跳出獲取圖片幀的循環。
1.3.1 H通道分離
為了后續的膚色分割處理,我們首先將圖片轉換為HSV空間,再將其中的H通道圖片分離出來單獨處理。
使用到了OpenCV函數庫中的cvtColor函數。cvtColor函數前兩個參數便是輸入與輸出圖片,第三個參數CV_RGB2HSV表示將輸入圖片從RGB空間轉換為HSV空間。Split函數的作用是通道分離,將圖像分離為H、S、V三個通道并存入channels[0]、channels[1]、channels[2]中。RGB轉換HSV公式如下:
h=0°,(max=min);
(1)
(2)
(3)
(4)
(5)
v=max/255;
(6)
1.3.2 膚色分割
通過上一步對圖片H通道圖像的提取,可以針對原圖H的值將用戶的皮膚提取出來。使用inRange函數,第一個參數即輸入,后兩個元素便是篩選的閾值區間,最后一個參數就是輸出的圖片,其中輸出的圖片是一幅二值化后的圖像。
result=minVal≤frameH≤maxVal;
(7)
即如果frameH某一個像素的灰度值在閾值范圍minVal與maxVal之內,便在result圖像中其灰度值表現為255,否則表示為0。
1.3.3 濾波降噪
通過線性濾波器以減少噪聲,使用中值濾波器來模糊圖像,此方法相較于使用線性濾波器,處理的圖像細節更清晰,圖像的邊緣信息丟失少,但代價是需要更多的處理時間。
1.3.4 形態學處理
本文調用morphologyEX函數對降噪后的圖片進行開運算處理(對圖像先膨脹處理再進行腐蝕。在刪除圖像中細小對象時很好用,同樣還可以放大低亮度區域),從而進一步去除大噪聲,突出手勢對象以便后續的手勢提取。經過多次實驗驗證,采用了MORPH_RECT的構建方式,即矩形的結構元素,大小選擇的是7×7。
1.3.5 手勢輪廓提取
手勢輪廓提取前將上述步驟處理后的圖片所具有的信息進行整理,圖片提取出來,放入一個大小相同的圖片窗口中,并將其中的點存入被定為二位浮點型向量的mContours中,以便后續的輪廓查找。采用Canny圖像邊緣檢測,這是由John.F.Canny開發的,因而以其名稱命名。這個方法錯誤率低,僅在存在的邊緣上檢測;局部化良好,對于檢測到的像素邊緣將其處理至最小;反應簡單,每個邊緣只會有一個檢測結果。檢測步驟大致分為三步:1)用濾波器去除噪聲;2)用離散微分的方法尋找圖像傾斜度的強度;3)采用非極大值抑制,從而刪除非邊緣像素,給對象留下一條細線畫出對象的輪廓。在Canny檢測中,is_using_canny為1時調用Canny輪廓檢測,為0時則不調用;閾值調節范圍定在0-120以內[11]。輪廓提取效果圖如圖1所示。

圖1 輪廓提取結果
1.4.1 手勢模板制作
本文主要通過程序識別手勢從1到10的數字表示,將進行手勢的輪廓提取再將處理后的圖片作為識別模板,結果如圖2所示。

圖2 數字手勢模板圖
本文中手勢模板由于模板匹配時采用的是Hu不變矩的方法,匹配時會自動調節大小和方向,所以模板中的手勢沒有大小和方向的要求。
1.4.2 Hu不變矩
Hu不變矩實際上是指圖像的Hu矩具有平移、旋轉和縮放不變的性質。將每個圖像看作一個ρ(x,y)的密度分布函數,其分布區間放在[0,255]中。閾值對應的(p+q)階中心矩定義如下[12]:
(8)

平移的不變性:設新的位置坐標為(x1,y1),其中:x1=x+α,y1=y+β。α、β是常數,可見中心矩是不變的。
φ1=η20+η02
(9)
(10)
φ3=(η30-3η12)2+(3η21-η03)2
(11)
φ4=(η30+η12)2+(η21+η03)2
(12)
φ5=(η30-3η12)(η30+η12)[(η30+η12)2-3(η21+η03)2]+(3η21-η03)(η21+η03)[(η30+η12)2-(η21+η03)2]
(13)
φ6=(η20-η02)[(η30+η12)2-3(η21+η03)2]+4η11(η30+η12)(η21+η03)
(14)
φ7=(3η21-η03)(η30+η12)[(η30+η12)2-3(η21+η03)2]+(3η21-η03)(η21+η03)[3(η30+η12)2-(η21+η03)2]
(15)
1.4.3 匹配識別

實驗數據來源于5位志愿者在不同背景下的手勢拍照圖像集,共包含10種手勢,每種手勢有10張圖,合計100張手勢圖。不同手勢圖像存在脖子、干擾手臂、燈光、景深以及復雜背景的干擾,部分實驗圖像如圖3所示。將收集到100張圖像隨機分成訓練集和測試集兩個部分,訓練集和測試集的比例為7:3。

圖3 部分示例手勢圖數據集
為了驗證基于OpenCV的靜態手勢識別技術的識別效果,分別選取30組1-10的手勢數據,通過已設定手勢模板進行測試。輸出結果中hu的值越小,表示匹配度越高,本文將hu小于0.15的視為匹配成功并輸出。圖4為手勢數字識別結果,以箱線圖和正態分布曲線形式表示。其中,箱線圖表示數據的分布區間和均值大小;而正態分布曲線則表示數據結果的局部分布豐度。從圖1可以看出,各個數字識別的結果的正態分布比較均勻,曲線的弧度基本一致。除了數字2和10的hu不變矩特征值的結果分布跨度均在0.12左右,其余數字的hu不變矩特征值的結果分布跨度均在0.1左右。根據各數字的hu不變矩特征值均值結果按大到小的排列順序為:7>5>8>2>6>3>1>10>4>9。

圖4 手勢數字識別結果
從圖5可以看出,數字1的識別共進行了30次,成功次數30,識別成功率100%。數字2的識別共進行30次,成功次數26,失敗次數4,識別成功率86.67%。數字3的識別共進行30次,成功次數20,失敗次數10,識別成功率66.67%。數字4的識別共進行30次,成功次數30,識別成功率100%。數字5的識別共進行30次,成功次數26,失敗次數4,識別成功率86.67%。數字6的識別共進行30次,成功次數28,失敗次數2,識別成功率93.33%。數字7的識別共進行30次,成功次數30,識別成功率100%。數字8的識別共進行30次,成功次數26,失敗次數4,識別成功率86.67%。數字9的識別共進行30次,成功次數30,識別成功率100%。數字10的識別共進行30次,成功次數30,識別成功率100%。本設計共實驗300次,成功次數276,失敗次數24,識別成功率92%。

圖5 各個手勢的識別準確率
本文主要實現了手勢圖片的處理提取工作和處理后圖片的匹配識別工作。在圖像處理工作中主要通過HSV顏色模型的膚色分割,中值濾波器的降噪操作,形態學處理中的開運算,最后再由OpenCV庫中的輪廓查找與繪制函數繪制出初始圖片中的手勢輪廓;在后續的手勢匹配識別工作中主要利用的是圖像的Hu矩不變性,只要提前按照前序的圖像處理操作制作好手勢的模板,再將獲取處理后的圖像與模板的圖像做Hu矩的對比,當返回的比較值較低時,便可認為匹配成功。記錄好匹配成功模板的編號,將其返回到程序之中,由程序將匹配成功的信息反饋給用戶,從而達成手勢識別的效果。然而,該技術仍然存在局限性。如若在采集的圖像中存在除手勢外的人體皮膚,在膚色分割的時候并不能很好的僅將手勢圖像提取出來,這個處理方法還有提升的空間,或者建議將手勢的模板圖形數字化,以尋求手勢的數字特征,從而很好的將手勢識別做得更精準迅速。