基于FPGA的手势识别系统设计与实现
2020-09-03陈振烁陈炯希
陈振烁,陈炯希
(江苏大学,江苏 镇江 212013)
近年来,现场可编程逻辑门阵列(Field Programmable Gate Array,FPGA)从电子设计外围逐渐成为电子设计的核心,应用范围涵盖通信、汽车、航空和国防、消费市场、工业和医疗等。2010年,可编程市场规模已超过40亿美元。排除可编程器件供应商很难触及的手机和PC相关的特定消费类的480亿美元ASIC/ASSP市场,可编程业者可进军并赢取约280亿美元市场规模中的一些机遇,发展空间极其广阔。在此大背景下,本团队用FPGA去完成一个手势识别投影系统的设计。
1 FPGA及手势识别概述
FPGA是在可编程阵列逻辑(Programmable Array Logic,PAL)、通用阵列逻辑(Generic Array Logic,GAL)等可编程器件的基础上进一步发展的产物,作为专用集成电路(Application Specific Integrated Circuit,ASIC)领域的一种半定制电路而出现,既解决了定制电路的不足,又克服了原有可编程器件门电路数有限的缺点[1]。FPGA具有众多的优点,内部拥有非常丰富的逻辑单元和I/O引脚接口,而且ASIC电路使用FPGA来进行开发和设计,相较于其他芯片,其开发周期缩减、金钱投入更低,而且不用承担很大的风险,非常稳定。FPGA采用的CMOS工艺的功耗相比单片机更加低。近年来FPGA在通信领域的应用已经趋于成熟,众多FPGA厂商都在自己的芯片上增加了通信接口,以契合当今科技和社会的发展。比如,Altera公司cyclone V系列芯片已经提供了GTP/GTX接口,可以达到相当高速的传输数据。由于FPGA与单片机所采用的串行数据处理不同,FPGA的并行处理能够到达更高的速度,故常常将FPGA运用到现如今的大数据算法的处理上。
手势识别是计算机科学和语言技术中的一个主题,目的是通过数学算法来识别人类手势。现如今,在机器人、数码产品、手语识别系统、遥控装置、虚拟现实技术上都用到了手势识别。手势可以源自任何身体运动或状态,但通常源自面部或手,当前焦点包括来自面部和手势识别的情感识别。用户可以使用简单的手势来控制或与设备交互,而无需接触,姿势、步态和人类行为的识别也是手势识别技术的主题。手势识别可以被视为计算机理解人体语言的方式,在机器和人之间搭建比原始文本用户界面或甚至图形用户界面(Graphical User Interface,GUI)等更丰富的桥梁[2]。
2 研究目标及主要内容
本项目采用FPGA主控板为硬件平台,配合摄像头OV7725对手势进行实时采集,并通过基于肤色聚类的算法,将图像转换为二值图像,再进行滤波、膨胀和边缘检测,对产生的数据进行手指识别和参考点提取,最后通过显示绘图阵列(Video Graphic Array,VGA)显示器或投影仪对处理后的手势图像进行实时显示,亦可对显示器或投影仪的界面进行一定的操作,起到人机交互的作用[3]。图像采集上,最开始用的是OV5640摄像头,但因为其2 592×1 944的分辨率数据太大,使后续数据采集和分析速度过慢,于是最终选择使用输出数据更小且较适用的OV7725摄像头,其640×480的分辨率与显示设备更加切合。在OV7725的多种图像输出格式中,选择了YCbCr422格式(表示每4个像素有4个亮度分量,4个色度分量(YYYYCbCrCbCr))。考虑到通常使用的RGB格式的数据亮度和色度不可分割,而YCbCr是可以将亮度和色度分开,可以在图像信息处理上占有很大的优势,且YCbCr格式输出的图像数据只有RGB格式输出数据大小的一半,故选择YCbCr格式输出。同时,OV7725摄像头的输出协议是SCCB 跟IIC协议相差无几,就不再赘述。系统框架如图1所示。
3 项目研究技术路线
3.1 图像采集
图像采集的摄像头本团队采用市面上常见的COMS OV7725模块,该摄像头有30 W像素,且其640×480的分辨率也能与终端显示器的分辨率相匹配。该COMS OV7725摄像头模块采用SCCB——IIC通信方式,此种协议与IIC协议的差异仅仅只有SCCB只能单次读、SCCB读操作中间有stop,而其他皆与IIC都相同。数据传输速率为25 MHz,可以达到实验作品的要求,图像输出大小为640×480,而本设计是采用向下1/2采集的方式存储图像信息[4]。图像采集处理模块如图2所示。
图1 系统框架
图2 图像采集处理模块
3.2 肤色识别
RGB(红绿蓝)是依据人眼识别的颜色定义出的空间,可表示大部分颜色,但在科学研究一般不采用RGB颜色空间,因为它的细节难以进行数字化的调整。它将色调、亮度、饱和度3个量放在一起表示,很难分开。YCbCr是在世界数字组织视频标准研制过程中作为ITU - R BT1601建议的一部分,其中Y为亮度,Cb,Cr都指色彩。考虑到RGB色彩空间在处理图像亮度与色度的不易分割的缺点,而YCbCr色彩空间的亮度和色度是分开的,图像信息在处理上有很大的优势,因此,本设计先将RGB转YCbCr色彩,再对亮度和色度分别进行处理,实现在色彩上的高速识别功能,同时也简化了识别算法的复杂性。肤色识别设计思想如图3所示。
图3 肤色识别设计思想
3.3 手指识别
在物体识别上,对图像的滤波是必不可少的关键,图像滤波有二值化、灰度化、边缘检测、角点检测等多种方式。由于本项目背景比较简单,且受到开发板RAM资源的限制,故采用基于肤色分割的原理,实现对视频数据流的二值化,从而将背景与目标物体(手指)分割,使待识别物突显出来,通过对高亮像素点的采样来实现对手指的识别。
3.4 坐标采集与校准
采用向下1/2的数据采集方式,因此在还原实际图像大小时,需要将显示的图像坐标换算到实际图像的坐标。本设计将采集实际物体的几个点作为参考点,并以此建立投影仪平面坐标系,实现对目标物体的坐标校准,如图4所示,进而得到目标在投影仪上的位置。
图4 坐标采集与校准设计思想
3.5 显示模块与时钟管理模块
(1)显示模块中,本设计采用了一个深度为320 000的双口RAM,实现对手指移动过痕迹的存储,并通过一个膨胀算法实现对“笔记”的加粗,后面经过RS232协议将“膨胀”后的手指轨迹的图像数据传输给640×480的显示器上,起到人机交互的作用。
(2)时钟管理模块中,本设计为跨时钟域设计,外部输入时钟为100 MHz,通过时钟管理模块(pll)将100 MHz的系统时钟频率分为25 MHz,50 MHz,75 MHz,250 MHz四路时钟信号,实现对整个工程的时序约束。
4 设计结果
FPGA主控板通过处理摄像头识别人的手,在对人的手势进行分析,并通过VGA将手势数据传输到显示器或者投影仪,让显示器或投影仪将手势的信息进行反馈,亦可对显示器或投影仪的界面进行一定的操作,如通过手势让绘画颜色进行改变,让开发板上的LED灯呈流水状运行,起到人机交互的作用。
图5 实验现象