摘要
本设计选用FPGA硬件处理信号,对图像信号的采集、存储数据同时进行,可以达到高速的并行采集、实时分析和同步存储的目的。我们采用Altera公司的Cyclone II EP2C35F672C6,为保证FPGA的稳定工作,选用 25M的时钟对TRDB-D5M CMOS摄像头的图像信号进行并行采集。将采集到的图像调整到640×480的大小并将数据暂时存入SDRAM中。同时VGA控制模块读取SDRAM中的信息,将视频信息显示在VGA屏上。
本设计利用皮肤检测不断对视频信息中的皮肤进行追踪,从而实现手势追踪,并在左右屏中算出皮肤的中心点作为手部信息的坐标点,以此作为手势信息。根据上述手势信息,产生对小车的控制命令,通过Nrf24L01无线模块发送至小车。小车接受信息后,作出相应行走动作。
本系统提供按键便于用户进进行功能选择,如显示真实视频信息、皮肤信息、虚拟小人等。皮肤信息用于不同背景环境下手势动作的调整,减少了系统的误判。
系统设计
系统方案
该系统主要由FPGA体感识别系统和MSP430小车系统两个部分组成。
在FPGA体感识别系统中,首先通过D5M采集视频信息,因为该摄像头采集到的图像是RAW类型的图像,不便于VGA显示,所以必须把RAW图像转化为RGB模式的图像,存入SDRAM中,以便VGA显示时使用。在SDRAM控制时使用了FIFO的形式,实现了SDRAM的多接口写入和读出。从SDRAM中读出的RGB信息,一方面可以送至VGA控制模块中,当(SW[17]&&~SW[16])==1时,显示视频信息;另一方面送至皮肤检测模块,将检测为皮肤的区域颜色设为白色,中心点为红色,非皮肤区域为黑色,当(~SW[17]&&~SW[16])==1时,显示皮肤信息。皮肤检测获得的手势信息一方面送至虚拟小人显示模块,该模块利用Bresenham算法画出虚拟小人,存于SRAM中,当SW[16]==1时,显示虚拟小人;另外一方面送至小车控制模块,根据手势信息在屏幕上的位置信息,利用无线传感器给小车发送行走命令。
MSP430小车系统由MSP430F499控制器,NRF24L01无线模块、L297+L298组合为小车驱动器和二项四拍步进电机组成。MCU不断读取NRf24L01接收端的信息,根据受到的指令,分别给驱动器不同频率的方波和方向信息。驱动器将不同频率的方波转换成不同频率的PWM波,从而实现了小车的前进、后退、加速、减速、转弯等动作。
皮肤检测模块
在视频信息中,每帧中图像的像素点都有R、G和B三个分量的值,将R、G和B转换成YUV格式,公式如下:
Y=(R+2G+B)/4,U=R-G,V=B-G
经过多次实验得出,当像素点符合100 < U < 500 时属于皮肤的颜色范围。当像素点符合100 < U < 500且R > B时,我们则认为该像素点为皮肤。
利用上述思想,对视频信息处理后,可得出皮肤信息,算出左右区域皮肤像素点位置的平均值,视为左臂和右臂的位置信息。根据左臂和右臂在屏幕上的位置信息,产生小车控制信息,然后对小车进行无线控制。同时根据左臂和右臂的位置信息,利用Bresenham算法从设定好的图表中划出简化的人形。
系统测试与结果图示
当控制者双手摊开,水平朝外时,位于FPGA上的皮肤检测模块检测出双手的位置,绘制皮肤点集,如图4.1中图所示,图中白色标注点为皮肤点,红色标注点为皮肤中心点。同时,系统还会绘制模拟小人以显示控制者的动作,如图1右图所示,控制者并拢双手,动画小人也并拢双手,此外,系统还提供了硬件按键,使得控制者可以在皮肤点集图和模拟小人图之间流畅切换。经过反复测试,系统能成功快速识别出启动动作,识别率达90%,位于小车上的无线模块接收到FPGA发送过来的前进信息后,小车开始启动,实验表明,小车反映速度极快,能迅速对FPGA的控制指令做出反映。
小车前进动作的检测如图2所示,当控制者双手平放并保持向上托举的状态时,位于FPGA上的皮肤检测模块检测出双手的位置,绘制皮肤点集,如图4.2中图所示,图中白色标注点为皮肤点,聚集在屏幕上部分,系统成功检测出托举动作,经反复实验,该动作识别率达98%,无线模块接收到FPGA发送过来的前进信息后,做出前进动作命令,小车前进。
除了控制前进动作以外,系统还创新性的添加进了速度控制机制,控制者双手托举得越高,皮肤检测模块最终计算出的小车行进速度就越快,同时,为了防止小车速度过快带来的前进不稳定的问题,系统设置了最高运行速度阈值1m/s,当计算出的速度值高于阈值时,将按阈值替代处理。
小车的后退动作检测原理类似前进动作,控制者双手摊开,向下平放,如图3所示,FPGA皮肤检测模块检测出皮肤点集,并绘制于屏幕下方,动画小人模拟相应的动作。经反复实验,该动作识别率达92%。
控制者双手摊开并且左手放置高于右手时,代表发出小车左转命令,如图4所示,FPGA皮肤检测模块检测出皮肤点集分别位于屏幕左下角和屏幕右上角,动画小人抬高左手,放低右手,成功模拟出控制者的手势。经实验,该动作识别率达95%。
小车右转实现方法类似左转,控制者双手摊开并且右手放置高于左手,代表发出小车右转命令,如图5所示,FPGA皮肤检测模块检测出皮肤点集分别位于屏幕左上角和屏幕右下角,动画小人抬高左手,放低右手,成功模拟出控制者的手势。经实验,该动作识别率达94%。
小车的刹车与前几个动作较为不同,控制者双手合拢,掌心水平朝外,如图6所示,皮肤检测模块检测出皮肤点集位于屏幕中下方,动画小人作停止状态.