张挺飞,樊永生,孙凌云
(中北大学电子与计算机科学技术学院,山西 太原 030051)
随着科学技术的快速发展,推近了城市现代化的进程,智能门控系统的应用越来越广泛,如电梯、商场、酒店等。目前大多数门控系统采用光电控制的方式,但在控制的范围和灵敏度上都存在缺陷。随着图像处理技术的迅猛发展,使得基于图像识别的控制系统成为现实[1-10]。本文提出了基于FPGA+ARM的智能图像门控系统,相比于单处理器的图像控制系统,具有实时性好、图像算法实现简单、扩展性强等优点。
摄像头选用OmniVision公司生产的OV6620数字摄像头,内置2个8位高速A/D转换器,分辨力为356×292。SRAM选用CYPRESS公司的CY62146EV30LL静态RAM芯片,容量为256 kbyte×16。
系统采用FPGA+ARM构架,完成数据采集存储、图像预处理、数据传输和图像处理,如图1所示。首先通过I2C总线对OV6620内部寄存器参数进行配置,数据输出模式设置为GRB 4∶2∶2,摄像头开始工作后,首先经过74LVT16245电平转换芯片将5 V电压转换为FPGA I/O口的3.3 V,然后FPGA对接收到的图像信号进行灰度值预处理,采用2块SRAM乒乓操作实时存储处理后数据,最后通过ARM总线将图像发送给ARM进行实时处理,根据结果对门进行控制。
图1 图像采集存储处理流程图
设计选用Xilinx公司的V2pro开发板,采用XC2VP30处理器,有30816个逻辑单元,136个18位的乘法器,2448 kbit的Block RAM和2个Power PC,完全满足系统硬件需求。FPGA硬件工作流程如图2所示。
1)图像经过电平转换芯片74LVT16245转换为3.3 V电压后,写入FPGA内部FIFO中。
2)FIFO深度设置为1024,位宽16位,当FIFO出现半满信号时,读取512个数据,然后等待下一次半满信号,以此循环。
图2 FPGA硬件流程
3)第1组512个数据进入灰度预处理,摄像头输出模式选用RGB 5∶6∶5,因此一个像素点的数据长度为16位,其中高5位用于R,中间6位用于G,低5位用于B。将高5位值、中间6位值、低5位值都赋值成它们的平均值,所得到的16位数据即为该像素点的灰度值。在硬件实现过程中,采用流水线操作,3个数据相加后,采用Xilinx自带IP核设计除法器模块进行除以3的操作,将结果按照RGB 5∶6∶5格式还原成16位的数据。
4)经过灰度值处理后,数据在FPGA控制下写入SRAM1中,然后等待第2组512个数据。
5)系统采用2片SRAM以乒乓方式工作,可提高后续图像处理系统的实时性。当SRAM1中存储满1帧数据后,ARM产生片选信号,控制总线切换模块将ARM总线连接到SRAM1上,并将SRAM2切换到FPGA上。开启SRAM1的写使能和SRAM2的读使能,将下一帧的数据存储到SRAM2中,同时ARM开始对SRAM1中的1帧数据进行处理。当SRAM2存满第2帧数据后,再通过ARM片选将ARM总线连接到SRAM2上,将SRAM1切换到FPGA上,这时开启SRAM1的读使能和SRAM2的写使能。如此循环,使2个存储单元始终都在读写数据,保证了数据采集的连续性。
CMOS摄像头的帧频率为25 Hz,每帧又分为奇数场和偶数场,每40 ms输出1帧数据,ARM在下一帧数据到来前,已完成前一帧数据的处理,使得系统可以实时对摄像头数据进行处理。
ARM嵌入式系统主要由S3C6410处理器、SDRAM、Flash、TFT液晶屏、调试串口、USB接口、总线接口等几部分组成,如图3所示。ARM嵌入式系统通过总线的方式读取2片SRAM中的图像数据,这2片SRAM地址的切换通过ARM系统的I/O口控制,将得到的1帧图像数据进行处理,根据处理结果控制门的开关,处理结束后再导入下一帧图像,如此循环工作。为了实现图像的实时处理,必须在下一帧图像到来之前处理完毕。
图3 ARM嵌入式系统的硬件结构
图像门控系统是通过检测门附近区域的图像中是否有人存在来控制门的开闭,简单的图像门口系统采用背景差分的算法来实现,但该方法本身误报率很高,且难以区分人与动物,大大降低了系统的准确率。因此,本文选用实时性好、准确率高的基于Adaboost的人脸检测算法,以检测图像中的人脸作为门是否开启的依据。
Adaboost的人脸检测算法是通过Haar特征训练好的分类器来筛选人脸信息,在OpenCV中有专门针对Adaboost算法的库函数,大大缩短了程序的开发周期。此外,OpenCV提供已经训练好的人脸分类器,该分类器精度高、速度快。
图像门控系统程序运行在ARM+Linux平台上,首先通过调用SRAM驱动程序读取1帧图像数据,该图像数据在FPGA已经进行了灰度预处理,接着调用cvLoad()和cvHaarDetectObjects函数装载训练好的人脸分类器并检测人脸目标,如果检测不到人脸目标,控制门关闭,并继续读取下一帧图像,如果检测到人脸目标,则调用cvRectangle()函数框出人脸目标,并控制门开启。图4为基于OpenCV的图像门控系统的流程图。
Opencv视觉图像库在使用之前需要针对运行环境进行编译,生成相应环境下的静态链接库和动态链接库。下面是ARM嵌入式Linux环境下的编译过程。
图4 OpenCV的图像门控系统的流程图
1)解压OpenCV 2.1.1到/usr/Opencv-2.1.1目录下,创建/usr/arm-OpenCV目录,作为CMake编译的工作目录,安装交叉编译器arm-linux-gcc 4.4.1,安装目前为/usr/arm/4.4.1,并添加环境变量/usr/arm/4.4.1/bin。
2)在Windows环境下,运行cmake-gui软件,源代码目录为/usr//Opencv-2.1.1,编译目录为/usr/arm-OpenCV,然后进行配置,配置过程保持generator为Unix Makefiles,并选择 Specify options for cross-compiling 选项,操作系统栏填写arm-linux,C编译器栏填写/usr/armlinux-gcc的路径,C++编译器栏填写 arm-linux-g++的路径,程序库栏的Target Root填写/usr/arm/4.4.1。
3)修改默认安装目录,默认的安装目录为/usr/local,对于交叉编译的库来说并不合适,所以把CMAKE_INSTALL_PREFIX变量改为/usr//arm/lib/OpenCV/,修改CMakeCache.txt,在 CMAKE_EXE_LINKER_FLAGS 后面加上 -lpthread-lrt,点击 Generate 生成 Makefile。
4)运行make install,OpenCV生成的库和头文件就安装到目录/usr//arm/lib/OpenCV/下。
OpenCV图像库编译成功后,在图像门控系统应用程序的makefile文件中添加OpenCV头文件和库文件,编译后生成的二进制文件就可以移植到ARM系统中运行。
摄像头安装在门顶,采用俯角的安装方式,俯角太大,导致头顶面积太大,俯角太小,面部特征太少,通过现场调整比较得到合适的角度,进行实验,实验效果如图5所示。
图5 实验现场效果
实验结果可以看出本系统在智能门控系统中有良好的效果,验证了系统的有效性和可行性。系统硬件采用FPGA+ARM的构架,与PC机相比具有系统体积小、成本低、便于安装等优点,而且在数据的处理速度上满足应用要求。此外,基于Adaboost的人脸检测图像门控系统的实时性好,灵敏度高。
[1]杨学友,李博文,曲兴华.基于FPGA高速智能化视觉传感器的研究[J]. 电子测量与仪器学报,2003(1):76-79.
[2]邓海峰,余慧英,袁可风.一种嵌入式图像处理平台的设计与实现[J]. 计算机应用,2005(S1):225-227.
[3]姚聪,方勇,汪敏,等.基于ARM的嵌入式图像采集处理系统及其无线传输[J]. 电子技术,2003(11):25-28.
[4]王荣本,游峰,崔高健,等.基于计算机视觉高速智能车辆的道路识别[J]. 计算机工程与应用,2004(26):18-21.
[5]赵方鹏,杨建华,赵忠,等.基于嵌入式Linux的网络视频监控系统[J]. 测控技术,2007(5):55-57.
[6]陈育香.基于ARM的无线传感器网络多帧图像采集与处理[D].南京:南京理工大学,2011.
[7]谢平.嵌入式短距离无线音视频监控系统设计[J].计算机测量与控制,2010(8):1813-1814.
[8]张远,张首军,汪俊.基于SOPC的嵌入式网络摄像头的设计[J].西北大学学报:自然科学版,2009(1):44-46.
[9]龚向东,刘春平,黄虹宾,等.一种基于NiosⅡ软核的嵌入式图像采集处理系统设计[J].电子测量技术,2010(2):75-78.
[10]吴平,陈秀宏,张平.基于X264的嵌入式视频监控系统设计[J].电视技术,2011,35(7):108-110.