邢志恒 黄泽坤
(江苏大学,江苏 镇江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 摄像头,实现了图像采集、肤色检测、图像滤波、手部定位、手势识别等功能,且识别速度快,具有良好的工程应用价值和实用意义。