基于ZedBoard的人脸检测的设计与实现
2015-02-05西安邮电大学计算机学院翟社平
西安邮电大学计算机学院 李 威 翟社平
基于ZedBoard的人脸检测的设计与实现
西安邮电大学计算机学院 李 威 翟社平
为了解决传统PC机平台中人体特征检测系统的资源利用率低、检测效果差等问题,采用ZedBoard技术来实现人体特征检测系统的研究与开发,分析Adaboost算法的原理,并将该算法用于人脸检测的设计中。实验结果表明,基于ZedBoard平台的人体特征检测系统提高了资源利用率,Adaboost算法可检测复杂环境下的人体特征元素,从而提高了系统的准确率,这使得人体特征检测系统的应用领域更加广泛,也促进了计算机视觉技术的完善与发展。
ZedBoard;Adaboost;计算机视觉
引言
人脸检测技术是计算机视觉领域的重要组成部分,其中大多数图像处理软件包用C、C++来开发[1]。计算机视觉是借助计算机设备来模拟生物视觉系统的一种研究科学[2],人们对其研究始于20世纪70年代早期,研究者们将它列入人工智能领域的重要感知部分[3]。
传统的人脸检测技术存在一些难题,如图像处理速度慢、效果差等问题[4]。在此背景下,Intel公司开发了OPENCV,其具有较强的可移植性和通用性,它对人脸检测技术的研究与发展起到了重要的作用[5],人脸检测技术的常用方法是训练分类器,其具有较强的鲁棒性[6],但是Adaboost分类器算法也存在训练样本的特征多以及多级分类器的检测费时等缺点[7]。本文在ZedBoard硬件平台上实现人体特征检测算法的设计与开发,ZedBoard内部结构分为处理器系统与可编程逻辑两部分。在处理器系统中,ZedBoard运行的是嵌入式Linux系统,可在此系统上运行有关计算机视觉领域的算法,来实现人脸检测系统的研究与开发。
1 系统设计
1.1 设计流程
一个基于FPGA的图像处理系统应包括四个阶段[8]。它们是问题描述阶段、算法开发阶段、结构选择阶段及系统实现阶段。其之间的逻辑关系如图1所示。
图1 逻辑关系
发现问题并总结问题是问题描述阶段的主要工作,本文中的问题就是如何在ZedBoard硬件平台上实现人体特征图像的检测。算法开发阶段首先需要明确待解决的问题,然后找到解决问题的算法,最后根据实验的要求开发相应的算法。结构选择阶段建立在算法开发之上,根据算法结构、处理顺序,建立系统的层次结构。系统实现阶段是将算法映射到所选的计算结构之上的过程,开发设计最终系统并对其进行测试。
1.2 系统框架
系统设计流程如下,首先确定待解决的两个问题:第一,研究一种的人体特征检测算法。第二,在ZedBoard平台上实现人体特征检测系统的研究与开发;其次,根据系统需求开发一种Adaboost算法,该算法能实现复杂环境下人脸图像的检测;然后根据改进的算法结构确定系统的整体结构;最后在ZedBoard硬件平台上实现人脸图像的检测,并将检测过的图像存储于ZedBoard中。
2 开发与实现
2.1 搭建系统开发环境
下载OPENCV-2.4.10版本的OPENCV库,下载图形界面软件Cmake,该软件辅助安装编译OPENCV库。具体编译步骤如下。
(1)下载安装Cmake,设置Cmake的环境变量:sudo gedit /home/emouse/.bashrc。
(2)在打开的文件后添加:export PATH=$PATH∶/ usr/local/cmake-2.8.10.2-Linux-i386/bin。
(3)下载安装OPENCV,在Linux终端输入#cmakegui命令,该命令打开cmake的gui界面,如图2所示,开始进行配置。
(4)在opencv-2.4.10文件夹中分别执行make和make-install命令,完成编译安装。
(5)安装后需要修改系统环境变量。在Linux终端输入sudo gedit/etc/ld.so.conf.d/opencv.conf命令,打开修改环境变量的界面,在界面最后添加/usr/local/lib。
1896年Nadal提出以脱轨系数(即轮轨横向力Q与垂向力P的比值)为准则判别车辆是否脱轨,不同的国家和学者以此为基础进行车辆脱轨的深入研究,并提出了不同的脱轨系数限值。我国GB5599—85[10]规定脱轨系数第一限度为1.2(合格标准),第二限度为1.0(安全标准),本文取脱轨系数限值为1.0。同时碰撞过程中轮轨间作用力在极小的时间段内会产生较大的波动,导致脱轨系数迅速增大并超过限值,然后又迅速恢复到正常,这样的状态下车辆并不一定有脱轨的危险。因此需要考虑脱轨系数大于限值的最大作用时间,时间越长车辆脱轨的危险性就越大。
图2 cmake界面
(6)配置OPENCV库。输入sudo ldconfig命令,更改环境变量sudo gedit /etc/bash.bashrc。在文件后面添加PKG_CONFIG_PATH=$PKG_CONFIG_PATH∶/usr/local/ lib/pkgconfig export PKG_CONFIG_PATH。
至此,Linux下安装编译OPENCV库的工作已经完成。
编译可执行文件需要配置arm-xilinx-Linux-gnueabi交叉编译环境。
(1)终端输入./xilinx-2011.09-50-arm-xilinxlinux-gnueabi.bin,编译arm-xilinx-Linux交叉编译器。
(2)输入gedit/etc/bash.bashrc,修改环境变量, export ARCH=armexport CROSS_COMPILE=arm-xilinxlinux-gnueabi-export PATH=/root/CodeSource/Sourcery _CodeBench_Lite_for_Xilinx_GNU_Linux/bin/∶$PATH。
2.2 OPENCV在Zedboard上运行
(1)创建文件夹,命名为opencv-2.4.4,用于安装OPENCV库文件,在该文件夹中新建一个build和一个install文件夹,并且创建名为toolchain.cmake文件,输入如下信息。
(2)配置OPENCV库,在进入build文件夹输入cmake -D CMAKE_TOOL CHAIN_FILE=toolchain.cmake -D CMAKE_INSTALL_PREFIX=/home/liwei/opencv_zed/install ../在输入ccmake./命令进行配置,选择所需的配置库选项。
(4)制作OPENCV库镜像文件。
(5)编译生成Linux引导程序,文件系统以及Linux镜像文件系统。
至此,关于OPENCV的移植工作已经完成,接下来就是将编译得到的链接文件以及镜像文件下载到ZedBoard中,在ZedBoard硬件平台中运行得到最终结果。
2.3 ZedBoard硬件平台
ZedBoard集成了ARM Cortex-A9双核以及最多可达相当于500多万逻辑门的可编程逻辑单元,其架构将内部结构分为处理器系统与可编程逻辑两部分[9],ZedBoard结构框图如图3所示。ZedBoard硬件系统分为处理器系统部分和可编程逻辑部分,这两部分协同工作,共同完成设计需求。处理器系统的硬件内核部分是双核Cortex-A9处理器,其运行的是嵌入式Linux。
图3 结构框架
Linux内核首先启动BootROM,BootROM中的代码对基本外设控制器进行初始化,接着启动的FSBL应用程序,其主要完成PS端的初始化,并且对PL进行配置,本文主要对PL部分的外设进行配置,PS与PL之间采用AMBA总线进行通信。接着加载SSBL(U-Boot),U-Boot将为Linux内核初始化内存,初始化必要的外设,本文需初始化USB外设,U-Boot还需设置好启动参数(设备树的地址,文件系统的类型、地址)。然后U-Boot将把系统控制权交给Linux内核,本文根据ZedBoard的硬件特性,配制出相应的Linux内核镜像,Linux内核拥有系统的控制权后,先进行初始化,建立起内核的运行环境。完成在虚拟地址到物理地址的映射,初始化并挂载驱动设备。最后启动应用程序,本文中配置的OPENCV库和编译的连接文件(.O文件)都属于应用程序应用程序部分,该部分用于人脸检测系统算法的设计与实现。
2.4 算法设计
人脸检测常用的方法有基于人体图像分割和基于人体图像的特征。基于特征的人体图像检测算法包括两个步骤:第一,学习和训练分类器的过程;第二,判决过程。常见的提取特征的算法有基于肤色,Haar特征,以及基于启发式搜索[10],分类器有支持向量机(SVM),Adaboost。
2.5 Adaboost算法
Haar特征是矩阵特征,通过相邻矩阵区域的灰度变化反映图像的局部特征。Haar特征是人体特征检测中常用的算法,通过编码特定的区域状态,Haar算法可以提高人体特征检测的速度。Adaboost是一种分类器算法,其基本思想是把大量弱分类器叠加成强分类器,再将若干个强分类器串联成为级联分类器,最终完成图像搜索检测[9]。
Adaboost算法代码是整个系统的核心部分,这两个算法相结合最终训练生成分类器文件,此文件是检测人体特征元素的依据。Adaboost的人脸检测算法的训练过程,实质上是将具有最强分类能力的特征作为最优的弱分类器,接着将弱分类器转化为强分类器的过程。Haar特征用形状、感兴趣区域中的位置以及比例系数来定义。Haar特征值可表示为[9]:
其中ωi为矩形的权重,Rectsum(ri)为矩形所包围的灰度积分,n是组成图像feature的矩形个数。每个矩形框内的像素都可以通过积分图计算得到,这样就可以提高图像检测速度。Adaboost算法中弱分类器h(x)如式(2)所示:
其中f表示特征,θ表示阈值,ρ表示不等号方向。弱分类器在训练过程中,是把所有正确率高于50%的矩形特征找到,然后再将误差最小的作为本次训练最优的弱分类器[11]。最优弱分类器按照式(3)构成级联Adaboost强分类器:
其中α表示每次迭代训练过程中得到的最优弱分类器的权重系数。然后利用样本的Haar特征进行分类器训练,将大量弱分类器叠加起来,得到一个级联的强分类器。进而对输入图片中感兴趣的图片进行检测[6]。两次检测图像如图4(a),图4(b)所示,其中图5(a)为人脸检测结果,图4(b)为人眼人脸检测结果。选取的两张图像均是正面图像。
图4 人脸检测结果
3 结果分析
传统的人脸检测系统完全建立在PC机,但是PC机存在体积大、硬件资源利用率低等缺点,因此设计出基于ZedBoard平台的人体特征检测系统。实验结果表明,处理同一张图像,PC平台和ZedBoard平台的检测结果一致, ZedBoard系统避开了PC机的一些缺点,展示出其强大的优点,具体表现在硬件资源利用率高、携带方便等方面。表1是二者的硬件资源对比情况,根据实验结果分析表明,二者都可实现人体特征检测。由于ZedBoard平台硬件资源相对较少,因此其在处理同样一张图像的过程中,zedBoard要比PC机系统耗时要长,PC机处理一张图片平均耗时21.067ms,ZedBoard平均耗时177.058ms。
表1 PC与ZedBoard硬件资源比较
4 结论
本设计完成了基于ZedBoard硬件平台的人脸检测。ZedBoard内部结构分为PS和PL部分,PS运行的是嵌入式Linux系统,该系统可运行OPENCV库。PL中可设计硬件逻辑电路,该部分可实现算法的并行处理。PS与PL的结合使用能够快速处理视频、音频信息,这项技术解决了传统嵌入式开发板的诸多瓶颈问题。基于ZedBoard硬件平台还可以设计门禁系统、公司“刷脸”系统、智能家居系统等,这些都是后续研究的重点。
[1]Cheng Harry H,Cheng Wayne W,eta .l Interactive Open Architecture Computer Vision[C].15thIEEE International Conference on Tools with Artificial Intelligence(ICTAIp03),Sacr amento,California ,USA,11,2003:406-410.
[2]温李慧.基于计算机视觉的遥控器液晶屏图像检测[D].硕士学位论文,电子科技大学,2013.06:23-36
[3]Richard Szeliski.计算机视觉:算法与应用[M].北京:清华大学出版社,2012:35-47
[4]侯梦华.基于机器视觉的实时目标检测系统研究[D].硕士学位论文,广东工业大学,2008:12-34
[5]黄佳.基于OPENCV的计算机视觉技术研究[D].硕士学位论文,华东理工大学.2013.20-29
[6]Viola P,Jones M J.Robust Real-Time Face Detection[J]. International Journal of Computer Vision. 2004,57(2):137-154
[7]刘琼,彭光正.一种改进的AdaBoost人脸检测算法[J].计算机应用于软件2011,28(6):255-256.
[8]高展洪.多媒体处理器FPGA实现[M].北京:电子工业出版社,2010:57-63.
[9]陆佳华.嵌入式系统软硬件系统设计实战指南[M].机械工业出版社,2013:201-230.
[10]李瑞淇.基于肤色和改进的Adaboost人脸检测算法研究[D].西安电子科技大学,2014:31-37.
[11]何世民.基于Adaboost算法的人脸检测及其在DSP平台上的移植[D].哈尔滨理工大学,2010,15-37.
李威(1990—),男,硕士研究生,研究方向为嵌入式应用。
1.陕西省自然基金项目(项目编号:2012JM8044),项目名称——面向语义Web服务发现的本体协商技术研究;2.陕西省教育厅项目(项目编号:12JK0733),项目名称——基于本体和规则的语义Web推理技术研究。
翟社平(1971—),男,博士,副教授,从事语义Web、智能Agent、Web服务及云计算等方面研究。