- 易迪拓培训,专注于微波、射频、天线设计工程师的培养
基于SOPC的人脸检测系统的设计
人脸检测技术是计算机视觉领域非常重要的研究内容,正受到越来越多的关注。但传统的PC机平台上人脸检测系统体积庞大、不易携带、费用高等缺陷。采用通用DSP和多核处理器实现的话,价格昂贵、系统的可拓展性差。本文采用了xilinx公司的Zynq-7000系列芯片作为人脸检测系统实现平台。Zynq-7000系列是Xilinx公司推出的行业第一个可扩展处理All Programmable解决方案平台,旨在为视频监视、汽车驾驶员辅助以及工厂自动化等高端嵌入式应用提供所需的处理与计算性能水平。本设计采用的是Zynq-7000的XC7Z 02SOPC芯片,该芯片集成了Crotex—A9 MPCore双核处理器系统,同时内部集成了丰富的可编程逻辑资源,该部分包含约1.3M个等效逻辑门数和220个DSP Slices。这些资源提供了灵活可拓展的图像处理解决方案。
人脸检测算法有很多,主要可以分为:基于知识的方法、基于特征的方法、基于模板的方法和基于统计的方法。其中以Adaboost为统计的人脸检测算法是无论在检测精度还是检测速度上,在计算机视觉领域被认为已经达到很高的水准。
1 Adaboost人脸检测算法原理
Adaboost人脸检测算法是基于统计模型的方法,该方法给出了一个实时的、稳定的检测架构。此方法会从许多典型的数据信息中获取并进行特定的分析,得出人脸图像,这也是人们普遍使用它进行人脸识别的最根本原因。这一算法主要有3个方面的特点:利用积分图(Integral Image)快速计算Haar特征;利用Adaboost学习算法将Haar特征生成的弱分类器(Weak Classifier)组合成一个强分类器((Strong Classifier);将强分类器串联形成级联分类器(Cascade Classifier)。
1.1 Haar特征及积分图的计算
Haar特征又称矩形特征,指的是一系列矩形构成的结构,这种特征结构简单,利于快速计算。图1(a)是四种基本结构的矩形特征。把矩形特征中自色区域像素灰度值减去黑色区域的像素灰度值就得到该矩形特征的特征值。图1(b)矩形特征在人脸检测中的应用,这些典型的矩形特征能够很好把人脸和非人脸区分开来。
积分图能够快速算出Haar特征的特征值。如图2(a)所示,积分图像的定义;积分图图像的任意一点i(x,y)处的积分图像值ii(x,y)是原图像上该点的左上方所有像素的灰度值之和,即
引入积分图,计算任意矩形特征的区域的灰度值只需要4个参考点即可,图2(b)中灰色部分的矩形特征区域的灰度值可以通过A,B,C,D四个点的积分图来计算,即
sum=ii(AA)+ii(D)-ii(R)-ii(C) (2)
其中sum表示该灰色区域的灰度值。
1.2 Adaboost人脸检测算法
整个Adaboost人脸检测算法如图3所示,首先对图像进行预处理并计算检测图像的积分图,然后扫描其中每个N*N窗口,对于每个N*N窗口需要进入一个层次型检测结构(图示是一个三层结构每一层都是经过Adaboost算法训练得到一个强分类器),计算分类器中的各个Haar特征的特征值,再和阈值α相比较,进而选择得到一个该分类器的影响因子。对于每个分类器的检测中,所有的影响因子累加起来就是该窗口和人脸的相似度,最终把相似度与阈值β比较。若相似度的值小于β,则判定该窗口图像不是人脸图像,将排除该窗口并选择进入下一窗口,若相似度的值大于β,则判定该窗口图像是人脸窗口图像,该窗口可以到下个分类器进行检测。如果该窗口通过所有分类器,则该窗口就是人脸窗口,输出它的位置信息。将图像中所有N*N的窗口都检测完,第一轮的检测也就结束了。
一副图像种人脸的大小是不确定的,为了适应不同大小人脸的图像,在完成第一轮原始图像的检测后,需要放大检测窗口,并重复上述的步骤直到窗口不能放大为止。最后算法需要将所有检测窗口进行合并,将位置和大小相近的窗口合并在一起。
2 人脸检测系统SOPC实现
2.1 硬件设计方案
SOPC(System On Programmable Chip)就是要在单块芯片上搭建出整个系统,其设计的内容不仅包括硬件设计,还包括软件设计。基于SOPC的实现使得处理器、内存控制器等嵌入式系统所包含的硬件组成部分,都嵌入在芯片上。
本系统依赖的硬件平台是Zedboard开发板,系统结构框图如图4所示,Zedboard的核心处理芯片是Xilinx公司的Zynq-7000芯片系列的XC7Z02,Zynq-7000芯片内部主要分为处理器系统PS(Processing System)和可编程逻辑PL(Programmable Logic)。PS部分内部嵌入了ARM Cortex—A9硬核模块,PL部分为FPGA,用户可自由设计自己的硬件逻辑。PS和PL之间的通信通过AXI4高级通信接口,图5显示利用Zynq进行SOPC开发的系统启动流程。
2.2 系统实现
图4给出了系统结构框图,其中PS部分主要负责人脸视频信号的采集、人脸检测等模块;PL负责AXI4总线缓存、VGA驱动、图像预处理等模块。
系统采用现代的V26的USB摄像头进行视频的采集,该摄像头支持最大分辨率为1280*960,同时支持VGA(640*480)模式。图像数据输出格式可以为8位/16位的YCrCb 4:2:2 ITU2656、IR2601GRB 4:2:2或RGB Raw Data。
图像预处理对人脸检测有着很重要的作用,图像预处理主要由图像增强和噪声滤除,本文选用的是中值滤波是进行噪声滤除,中值滤波能有效的滤除图像中孤立的像素点,还能保护像素的边缘信息。图像增强主要采用直方图均衡化处理。本文通过PL调用了Xilinx公司的图像与处理的IP,通过PL对图像预处理能够节省系统的处理时间。
视频显示输出采用的是群创的AT070TN07数字液晶,视频显示输出采用群创AT056TN52数字液晶,其分辨率为640*480,40Pin 16bit的RGB格式输出,可视角:L/R/T/B:70/70/50/70,反应时间:15 ms。
人脸检测模块主要是通过在PC机Linux平台上的QT进行代码的编写,并通过Xilinx公司的交叉编译器xilinx-arm-linux将人脸检测代码编译成Zynq平台可执行的文件,然后通过将QT移植到Zynq平台。下面是本文人脸检测模块一些参数:
3 实验与结果
实现环境如图6所示,输入图像采用动态图像形式,外部USB摄像头将640*480的视频信传送到Zedboard开发板上,经人脸检测系统处理。系统输出采用的方式是开发板外接一个液晶驱动电路和液晶屏,经过处理的图像数据以640*480@60Hz的标准VGA格式输出,从液晶屏幕上可以观察到人脸检测的结果。
本人脸检测系统采用的级联分类器有25级,共有2913个弱分类器。本系统中Zedboard中PS的CPU工作频率为667 Mhz,PL的工作频率为100 MHz。得到的实验结果如图7所示,对于640*480分辨率的视频信号的平均检测时间56 ms,平均每秒的检测17.8帧的图像,基本满足实时性的检测结果。检测率在93%左右,误检率在2%左右。
在资源消耗方面,Zynq中PS的CPU的使用率为20%,内存的使用率为9.4%。PL的使用率如表1所示,可以看出Zynq的资源使用率较小。
4 结论
本文的人脸检测系统利用了Xilinx公司的Zynq-7000上完成设计,减小了系统面积,对于620*480的视频信号基本实现了实时人脸检测,有很强的实用性。本文介绍的人脸检测体现了SOPC技术的灵活性,同时结合了ARM和FPGA各自的优点,克服了传统ARM在图像视频领域开发速度上的劣势,同时减小了硬件设计的难度。