邢志恒 黃澤坤
(江蘇大學,江蘇 鎮江212013)
隨著人工智能大數據的快速發展,對人機交互也有了更高的要求,而手勢識別作為人機交互中一種新興的操作方式,相對于鍵鼠觸摸屏的交互方式,它在虛擬現實、機器控制、手勢輔助駕駛等領域均有很好的應用前景,在未來更多領域會有很好的發展潛力。
然而由于其識別要求較高,在軟件平臺較難實現,可采用FPGA(即現場可編程門陣列)實現,既可以充分利用其硬件特性,也有更廣泛的應用前景。
采用軟件和硬件均可進行手勢圖像算法的處理,一般可以用軟件來實現大部分操作,其結構并不適應某些實時性較強的圖像處理算法。但我們希望有更高的圖像處理速度從而實現實時化,可以改善圖像處理算法和改變算法實現途徑來實現。而大部分常見圖像處理算法非常成熟,再進行改善并保持精度,無疑是非常困難的,所以我們改變算法實現途徑來達到期望,利用硬件來處理算法是很可取的。
總體上有兩種硬件選擇方案,專用集成電路(ASIC)和數字信號處理器(DSP)及現場可編程門陣列(FPGA)。ASIC 設計周期較長,屬于專用硬件芯片,需要數量少成本較高,靈活度不夠。DSP 其體系是串行指令,不適合部分實時性較強的圖像處理算法。FPGA 主要特點是用戶可自主用軟件對其配置編程,可反復擦寫,通過硬件描述語言實現系統設計和改進。實現方式較為靈活且能顯著降低成本。
通過并行和流水技術實現更大的并行度,利用硬件并行的優勢,FPGA 打破了順序執行的模式,在每個時鐘周期內迅速有效的完成更多的處理任務,比數字信號處理器(DSP)的運算性能更好。本文的圖像處理算法并不復雜,對實時性要求更高,所以采用FPGA 來設計實現。
系統硬件由Spartan7 AX7050 開發板和ov5640 攝像頭組成。
FPGA 開發板需要具有較多的I/O 口和邏輯單元才可以滿足系統設計要求。所以選用了AX7050 這款開發板,它是基于XILINX 公司的Spartan 7 系列的XC7S50FGGA484 這款芯片開發的高性能核心板,在高速數據通信,視頻圖像處理,高速數據采集等方面有良好的性能。核心板使用了2 片Micron 公司的MT41J256M16HA-125;2 片16 位 數 據 寬 度 的DDR3 芯 片 和FPGA 芯片的組成總線寬32bit,數據時鐘頻率高達333.3Mhz;其配置可以保證高帶寬數據處理滿足要求。
OV5640 攝像頭模組采用CMOS 芯片圖像傳感器OV5640,支持自動對焦的功能。OV5640 芯片支持DVP 和MIPI接口,OV5640 攝像頭模組通過DVP 接口和FPGA 連接實現圖像的傳輸。

圖1 方案設計
如上圖,清晰的展示了設計方案步驟:
(1)視頻信號預處理:采集攝像頭視頻信號,并對信號進行預處理,主要有噪聲濾除處理,色彩空間的轉換等等;
(2)膚色檢測:視頻信號處理后,對視頻的皮膚區域檢測;(3)手部定位:在得到膚色區域后,加個長方形的框為識別區域;
(4)手勢實時識別:利用手勢區域圖像特征提前設置閥值得到特征值,從而識別攝像頭前手勢。
系統采用50MHz 的晶振,上電后通過SCCB 協議配置OV5640 攝像頭的相關寄存器,配置為RGB565(R[4:0],G[5:0],B[4:0]) 格式,在VSYNC 及HREF 有效時,每個時鐘先發送RGB565 的高8 位,即{R[4:0],G[5:3]},然后發送RGB565 的后8位,即{G[2:0],B[4:0]}。
因此,從HREF 有效開始,我們必須拼接每相鄰的2 個Data,實現完整的RGB565 的讀取。利用板子自帶的兩塊DDR3 SDRAM 進行數據的緩存(延遲之后),然后將緩存之后的RGB565 數據轉化為RGB888 格式再轉化為YCbCr 格式,從而減少亮度對于手部膚色的影響,再利用matlab 根據直方圖統計,利用Cr 和Cb 分量進行手部膚色閥值判斷,接著再用移位ram IP 核構造3*3 的像素點矩陣,依次經過腐蝕算法和膨脹算法,減小噪聲的影響,使得只有手部的區域顯示為白色,其他區域顯示為黑色,利用VGA 輸出行列計數對二值數據進行判斷,確定手部區域的邊界點,從而減少了進行手勢識別的運算范圍,濾除了周圍的雜波,最后利用手部特征值識別手勢。
在對GB,HSV,Ycbcr 空間進行對比后,Ycbcr 和HSV 空間在處理膚色分割方面因為膚色分布較為緊密,不易受光線影響和攝像頭中其他無關物體干擾。Ycbcr 空間與HSV 空間相比其計算簡單,所以我們采用Ycbcr 空間進行手部膚色的建模與分割。YCbCr 其中Y 是亮度分量,Cb 是RGB 輸入信號藍色色度分量與信號亮度值的差異,而Cr 是RGB 輸入紅色色度分量與信號亮度值之間差異。

將RGB 圖像轉換到YCbCr 顏色空間,對于手勢的圖像,人更加容易察覺其色彩變化,手勢部分區域圖像的像素色彩度比較重要,所以提取Cr Cb 分量圖像。不同人的皮膚顏色有差別,但其在一定區域的膚色空間具有色彩相似性從而具有聚類特征。在光照強度變化不大和背景不變的情況下,其聚類特征則更加明顯。
本文中識別系統也是在背景較為穩定情況下進行設計使用圖像算法并改善效果,所以在手勢圖像灰度化之后,可以采用聚類分析的思想對圖像二值化。
圖像經過膚色分割處理后可以得到二值化的圖像數據,下面介紹如何對二值數據進行濾波。
3.2.1 腐蝕算法模塊設計
腐蝕算法濾波是一種比較常用的二值圖像濾波方式,它是指在圖像上以目標像素為中心的包括其周圍8 個像素,構成一個濾波模板),這9 個像素中如果有任何一個值為0,則這9 個值全部歸0。
以3*3 矩陣來解釋如下:

表1

表2
關于算法的實現,可以用下面的式子來表示

即通過兩個時鐘的算法,就可以實現腐蝕運算的結果。
3.2.2 膨脹運算模塊設計
膨脹運算與腐蝕運算相對,即在3*3 矩陣中只要有一個1,就9 個數值全部變為1。
以3*3 矩陣為例如下。

表3

表4
關于算法的實現,可以用下式來表示

在HDL 中,同樣以面積換速度的方式,將上式改寫如下:

同樣,經過兩個時鐘,便可實現膨脹運算的結果。
使用xilinx 自帶的移位寄存器來實現3*3 矩陣,下圖為移位寄存器的移位示意圖。

圖2 移位示意圖
由于vivado 的shift ram 只能緩存一行數據,所以我們使用兩個移位寄存器IP 核和正在輸入的一行數據來組成三行數據。代碼如圖所示

圖3 代碼
數據從row3_data 輸入,從圖像第三行輸入直到最后一行,可在row_data 得到所需完整的3 行數據。
得到了二值化后的圖像后,考慮到較強光照會影響雜波,所以識別條件為室內光穩定的情況下。經前邊的濾波后,已經可以得到較清楚的手勢圖像,但邊緣部分受光照會出現不穩定跳動的雜波,我們用高斯概率分布模型確定手部所在的區域,并且把圖像中手部所在區域加框,從而實現跟蹤效果,也方便確認閥值。識別主要在確定手勢出現的長方形區域內識別。預定識別的手勢有一二三四和剪刀石頭布七種手勢,因為識別的剪刀石頭布手勢特征明顯且較為簡單,所以采用規定閥值的方法來確認這幾種手勢。剪刀石頭布在手勢區域加框形成的長方形區域內長寬占比和手掌中心所在位置比例顯著不同,通過簡單的確定閥值后,再跟據識別情況進行長時間的調試,更改選擇合適的閥值即可做到高精度的判斷石頭剪刀布。一二三四手勢的識別主要利用不同手勢的圖形特征,在長方形區域長偏上3/10 部分提取手勢區域水平方向手指部分黑白像素點占比確定手指個數作為一個特征值,同時在長方形區域2/5 處根據水平方向手指間像素點的黑白比例確定有指縫,從而確定指縫的個數為另一個特征值,通過兩個特征值同時來識別一二三四。
手勢識別廣泛應用于虛擬現實智能控制等方面。本系統以Spartan7 AX7050 開發板為核心,利用其視頻圖像處理,高速數據采集方面良好的性能,加上ov5640 攝像頭,實現了圖像采集、膚色檢測、圖像濾波、手部定位、手勢識別等功能,且識別速度快,具有良好的工程應用價值和實用意義。