新闻中心

EEPW首页 > 消费电子 > 设计应用 > 基于Zynq平台硬件加速的体感游戏

基于Zynq平台硬件加速的体感游戏

作者:韦笠 陈锐 毛颖 王曰海时间:2016-10-27来源:电子产品世界收藏
编者按:随着嵌入式系统的发展,我们已经越来越离不开它们。本文设计了一个基于Xilinx ZYNQ平台硬件加速的体感游戏。首先,我们完成了手势方向控制贪食蛇游戏,该游戏通过进行肤色检测、手势跟踪并分析轨迹,来控制贪食蛇的位置。然后,我们实现了用verilog语言编写的运行在FPGA上的肤色学习和识别算法。最后,软件游戏调用基于AXI总线的协议与硬件加速单元通信,肤色识别算法运行时间减少了43.2713%,达到了加速的效果。

作者/ 韦笠 陈锐 毛颖 王曰海 浙江大学 信息与电子工程学院(浙江 杭州 310027)

本文引用地址:http://www.eepw.com.cn/article/201610/311930.htm

摘要:随着嵌入式系统的发展,我们已经越来越离不开它们。本文设计了一个基于Xilinx ZYNQ平台硬件加速的体感游戏。首先,我们完成了手势方向控制贪食蛇游戏,该游戏通过进行肤色检测、手势跟踪并分析轨迹,来控制贪食蛇的位置。然后,我们实现了用verilog语言编写的运行在上的肤色学习和识别算法。最后,软件游戏调用基于AXI总线的协议与硬件加速单元通信,肤色识别算法运行时间减少了43.2713%,达到了加速的效果。

前言

  嵌入式系统发展至今,已被广泛应用在手机、手环、平板电脑等设备上。然而,由于其中央处理器处理性能有限,异构处理越来越受到关注。异构处理是将通用处理器(如ARM芯片)与数字信号处理器(DSP,Digital Signal Process)、现场可编程门阵列(,Field Programmable Gate Array)协同处理。有观点认为,随着应用的变化、需求的增长以及技术的发展,异构多核必将成为未来多核的发展主流[1]

  Xillinx公司推出的Zynq-7000系列全可编程片上系统(SoC, System on Chip)即是这样的异构芯片。它集成ARM Cortex A9双核和芯片,为两者协同处理提供了可能。以为例,使用FPGA+ARM协同处理比单纯使用ARM处理器进行直方图均衡化、Sobel边缘检测和3×3中值滤波分别提高了5.5倍、2.4倍和10.9倍[2]。可见,ARM+FPGA的处理架构在上有很大的潜力。本文以Zynq系列的Zybo开发板为平台,设计了一个手势控制的贪食蛇游戏。

1 硬件部分

  1.1 硬件架构

  本项目的目标在于硬件加速,即让FPGA承担一部分的任务。为了让整个系统协同工作起来,就需要在Cortex-A9核和FPGA逻辑资源之间建立通信的通道,这条通道就是AXI总线。最终我们选择了Xillybus公司的Xillybus Lite总线[3]。在架构上,它是位于AXI总线[4]之下的一个通信协议。系统架构如图1所示,硬件部分整体框架如图2所示。

  从Linux系统到FPGA部分的整体框架图如图2,在Linux系统中分别编写了两个设备的驱动文件:xillybus_write_32 和xillybuf_read_32,用于与xillybus_lite总线进行通信。Linux系统向xillybus_write_32设备中传入数据流,数据流位宽为32bit,通过AXI总线和xillybus_lite总线传入FIFO1,到达肤色识别IP核模块,由肤色识别产生肤色判别结果,并将结果传入FIFO2,然后经过xillybus_lite总线协议和AXI总线协议,到达xillybus_read_32设备文件,在Linux系统中可以从xillybus_read_32设备文件中读出。

  1.2 肤色识别算法

  皮肤模型中有单高斯、混合高斯[5]、贝叶斯模型和椭圆模型等。经过前人学者大量的皮肤统计信息可以知道,如果将皮肤信息映射到YCrCb空间,这些皮肤像素点近似成一个椭圆分布[6]。因此,如果我们得到了一个CrCb的椭圆,下次来一个坐标(Cr, Cb)我们只需判断它是否在椭圆内(包括边界),如果是,则可以判断其为皮肤,否则就是非皮肤像素点[7-8]

  因此,我们采集了肤色的样本点,将其投影到此平面,投影后,进行了相应的非线性变换K-L[9]变换,进而形成统计椭圆模型如图3(a)所示。

  由于在FPGA中实现乘除法器比较麻烦,且会引入较大的时延,因此,我们用一幅图像来存储这个椭圆,而不是直接采用椭圆数学方程。该图像是二值图像,即椭圆区域内部为白色,其它地方为黑色。当其需要判断其它像素点时,只需将该像素点转换成Cr、Cb两个坐标,然后在上面的椭圆中找到该坐标的值,如果非0,则为皮肤,反之亦然。椭圆模型的二值图像如图3(a)所示。在FPGA中,我们使用了一个位宽为1bit,深度为65536bit,地址线宽为16bit的ROM核来存储这张图片。如图4所示。

  1.3 肤色识别算法的实现

  由于肤色识别算法在YCrCb空间中可近似用椭圆模型进行模拟,因此,要先将RGB空间的像素点转化到YCrCb空间。 转换公式如下:

  Y =(0.257 * R) + (0.504 * G) + (0.098 * B) + 16

  Cr=(0.439 * R) - (0.368 * G) - (0.071 * B) + 128

  Cb=-(0.148 * R) - (0.291 * G) + (0.439 * B) + 128

  由于涉及到了浮点数的乘法,现将系数整形化。即在上述公式中左右各乘以1024,即左移10位。

  Y << 10 = (12’d263 * R) + (12’d516 * G) + (12’d100 * B) + 24’d16384

  Cr << 10 = (12’d450 * R) - (12’d377 * G) - ( 12’d73 * B) + 24’d131072

  Cb << 10 = -(12’d152 * R) - (12’d298 * G) + (12’d450 * B) + 24’d131072

  因为这里用到了9次12bit和8bit的乘法,所以就用了9个12bit和8bit的乘法器。

  图5是RGB转YUV部分的仿真图,可以看到,转换基本是正确的,但是从RGB转到YUV有三个时钟的时延。从RGB转到YUV有三个时钟的时延,由YUV从ROM核中得到肤色判决结果有2个时钟的时延,所以从RGB值传入肤色判决IP核到得到肤色判决结果有5个时钟的时延。

  图6是肤色检测模块实测的效果,除了背后的柜子由于比较接近肤色,有一定的误判,可以认为效果还不错。

2 软件部分

  我们先在Zybo上配置从SD卡启动的嵌入式Xilinux系统,并编译了OpenCV2.4.10的源码,这样就可以使用OpenCV的视觉库函数了。

  在软件代码部分,主要利用肤色模型分割手部,并追踪手部运动轨迹,根据手部顶点运动轨迹判断出手势运动方向。步骤如下:

  1)对于每一帧输入的图像,首先进行中值滤波等预处理,然后利用肤色模型分割出手势部分。肤色模型主要是先将图像转换到YCrCb空间,然后根据肤色在YCrCb空间的椭圆分布来判别属于肤色的像素点,并形成肤色二值化图像。

  2)经过一些图像去噪和形态学腐蚀膨胀操作去掉一些较大的噪点。假设图像区域没有头部的干扰,那么面积最大的轮廓即为手部,确定手部轮廓后,找到中心点和顶点(即轮廓中纵坐标最小的点,即最靠上方的点)。

  3)确定轨迹和判断方向,将方向参数传递给游戏部分即可。方向参数的确定主要依据相邻两帧的顶点坐标值。判断逻辑如图7所示。

  游戏部分,如图8(a)所示,每次接收到判断出的手势方向后改变蛇的方向即可。贪食蛇的前进是使用rectangle函数一桢一帧画出来的,画果实使用了circle函数,随机生成果实使用了cvRandInt函数,充分利用了OpenCV的绘图功能。

3 实验结果

  我们使用C语言的time函数库来计算运行肤色识别代码段的时间。以处理480*640的彩色视频流为例,计算运算50帧的平均耗时,并计算了10组,求最终平均数。纯软件肤色识别代码运行的平均耗时为223982.611µs,有硬件加速的肤色识别算法运行时间是127062.454µs,耗时减少了43.2713%,达到了硬件加速的效果。

  有研究者在Zynq平台上设计了一个基于肤色识别的人脸检测算法,使用了硬件加速。仿真结果表明,使用硬件加速可提高80%的效率[10]。可见,设计达到了硬件加速的效果,也还有值得改进的空间。

4 结束语

  本文设计了一个基于Zynq平台硬件加速的体感游戏,内容包括软件程序编写、硬件算法设计和系统硬件加速。我们对肤色识别算法的硬件加速,使这部分运行时间减少了43.2713%,提升了系统效率,达到了加速的目的。

  基于FPGA的异构计算仍有很大的潜力,包括算法在硬件平台上的移植、硬件软件部分的交互、系统性能的提升等。对于嵌入式系统的发展,异构计算有着长远而重要的意义。

参考文献:

  [1]陈芳园,张冬松,王志英.异构多核处理器体系结构设计研究[J].计算机工程与科学,2011,12:27-36.

  [2]刘宏,符意德.基于的图像处理系统平台设计[J].计算机与现代化,2015,08:43-47.

  [3]Lin Z, Chow P. Zcluster: A zynq-based hadoop cluster[C]//Field-Programmable Technology (FPT), 2013 International Conference on. IEEE, 2013: 450-453.

  [4]高伟林,曹峰,佟川,等.基于Zynq的图形生成电路设计与实现[J].液晶与显示, 2014, 29(6): 944-949.

  [5]Vezhnevets V, Sazonov V, and Andreeva A. A survey on pixel-based skin color detection techniques. In Graphicon, Moscow, Russia, 2003: 85–92.

  [6]Bojic N and Pang K K. Adaptive skin segmentation for head and shoulder video sequences. Visual communications and Image Processing, SPIE, 2000, 4067: 704-711.

  [7]Huynh-Thu Q, Meguro M, Kaneko M. Skin-color extraction in images with complex background and varying illumination[C]//Applications of Computer Vision, 2002.(WACV 2002). Proceedings. Sixth IEEE Workshop on. IEEE, 2002: 280-285.

  [8]学习OpenCV——肤色检测:椭圆模型 (&最大连通区域). http://blog.csdn.net/yangtrees/article/details/8269984.2012-12-07/2016-05-01.

  [9]章毓晋.图象工程(上)[M].北京:清华大学出版社.1999: 68-70.

  [10]T. Han, G. W. Liu, H. Cai and B. Wang, "The face detection and location system based on Zynq," Fuzzy Systems and Knowledge Discovery (FSKD), 2014 11th International Conference on, Xiamen, 2014, pp. 835-839.


本文来源于中国科技期刊《电子产品世界》2016年第10期第50页,欢迎您写论文时引用,并注明出处。



评论


相关推荐

技术专区

关闭