APP下载

基于特征分析的人脸检测算法的DSP实现

2013-12-29刘纪红李中帆

电子器件 2013年6期
关键词:肤色像素点人脸

刘纪红,刘 祚,李中帆

(东北大学信息科学与工程学院,沈阳110819)

在智能监控系统中涉及人脸检测、人脸跟踪、人脸识别、表情识别等技术,其中人脸检测是最为关键的一个步骤,是后续处理过程的基础[1]。起初的人脸研究工作主要体现在人脸识别范畴,并且大都是假设已经获得一个正面的人脸或者是人脸很容易获取的前提情况下。但随着人脸应用领域的逐渐扩大和实际要求的逐渐提高,这种假设前提下的研究工作不能够继续满足需求了,进而复杂背景下,满足多角度、多尺度人脸的实时检测渐渐成为独立的研究课题并且发展起来[2-3]。

数字信号处理器是适合高速运算的电子器件,可以实现实时图像处理和分析。系统使用了适合做监控的CCD摄像头做图像传感器,获取有效的数字图像信息[4]。本文将在分析人脸肤色和形状特征的基础上,讨论在DSP系统中实现人脸的实时监测算法。

1 人脸检测DSP硬件平台

人脸检测的硬件平台采用以TI达芬奇系列单核DSP TMS320DM6437为核心芯片的ICETEKDM6437-B评估板。ICETEK-DM6437-B评估板是专为视频和图像应用开发的处理平台,DM6437是一款专用于数字图像处理的高性能32 bit定点DSP处理器,工作主频高达600 MHz,处理性能(每秒处理指令数)可达 4 800 MIPS(Million Instructions per Second)[5]。板载DDR2存储器通过32 bit专用总线与DM6437相连。板载视频编码芯片TVP5146把视频流接入到DM6437。DM6437通过片上视频输出接口输出视频流。DM6437可以通过板载JTAG接口与仿真器相连进行调试。ICETEK-DM6437-B评估板提供屏幕显示功能[6]。

本文中人脸检测硬件系统结构框图如图1所示,其中包括:图像采集模块、DSP核心处理模块和显示模块:

(1)图像采集模块:CCD摄像头采集图像,经过板载视频解码芯片TVP5146解码,送到DSP核心处理模块。

(2)DSP核心处理模块:接收解码后的图像,实现人脸检测,将人脸区域在图像中标定并输出到显示模块。

(3)显示模块:用于显示处理后的图像。

图1 人脸检测硬件系统结构框图

2 人脸检测DSP实现软件流程

本文设计的人脸检测算法在DSP上的实现流程如图2所示,其中人脸检测算法主要流程包括3部分:(1)预处理 获取待检测人脸图像的YUV图像数据;(2)肤色区域的分割 对YUV图像进行肤色提取,确定肤色连通域以及最小外接矩形;(3)人脸区域的定位 通过判别条件排除不规则但与肤色色调接近的物体和人体其他非人脸部分(如弯曲的四肢等)以及实现脖子部分的排除。下面将详细讨论人脸检测算法的DSP实现。

图2 人脸检测算法流程图

2.1 预处理

将RGB图像数据转换为YUV图像数据,这是因为在RGB色彩空间里人脸的肤色受亮度影响相当大[7],肤色像素很难从非肤色像素中分离出来,处理后肤色点是离散的点,中间嵌有很多非肤色,这为肤色区域的标定(人脸标定、眼睛等)带来了难题,而如果把RGB色彩空间转换为YUV色彩空间的话,可以忽略Y(亮度)分量的影响,肤色会很好的类聚[8-9]。

在本文中待识别人脸图像采用了两种方式送入:在DM6437内存中存入一幅图像和通过CCD摄像头采集一幅图像。若在DM6437内存中存入一幅图像则需要将RGB图像数据转换为YUV图像数据;若为CCD摄像头采集,则不需要RGB到YUV色彩空间变换,因为DM6437支持YUV422格式。

RGB色彩空间到YCbCr色彩空间的转换公式[10]如式(1):

2.2 肤色区域的分割

2.2.1 肤色区域的提取

肤色区域的提取是根据大量实验得出肤色范围的 Cb、Cr值:100≤Cb≤130,140≤Cr≤170 来判定的。若像素点Cb、Cr范围在此区域内,则该像素点为肤色像素点。然后进行二值化,将肤色区域像素点在相对彩色空间位置的像素置为白色,将非肤色区域像素点在相对彩色空间位置的像素置为黑色,由此可以得到肤色区域的二值图像。

图3 人脸检测算法流程图

2.2.2 肤色区域连通域及最小外接矩形的确定

连通域及最小外接矩形的确定过程采取分两次对整幅二值图像扫描,第1次确定连通域及其标号,其流程如图3所示,连通域示意图如4所示。第2次再次扫描图像,找出连通域内横纵坐标的最小值和最大值,确定其最小外接矩形,并记录其内白像素点数目。

图4 连通域示意图

对于连通域在DSP实现采用区域增长法[11-13]。

对于二值图像中所有像素点依次扫描,当发现到某个未被标记的目标像素点时,把它压入堆栈并且从这一点开始反复标记它的邻域,当堆栈为空时停止。在8邻域连通规范下,区域增长法的平均扫描次数能够由8次下降到4次。

先腐蚀后膨胀的过程称为开运算,可以消除细小物体、分离物体、平滑较大物体的边界且不明显改变其面积的左右。开运算定义如式(2)。

先膨胀后腐蚀的过程称为闭运算,可以填充物体内细小空洞、连接临近物体、平滑边界等。闭运算定义如式(3)。

其具体步骤如下:

(1)判断目标点为背景点还是“前景”点,区域增长算法只对“前景”点起作用,如果当前目标像素点的灰度为0,则重复进行步骤(1),顺次扫描下一个目标像素点;如果当前目标像素点的灰度等于255,则跳到步骤(2);

(2)判断该像素点上半部分邻域(即左上邻域、上邻域、右上邻域及左邻域)是否存在前景点,若存在则直接进入步骤(3);否则将其当前点赋予一个新的标号,进行步骤(4);

(3)获取上半部分邻域像素点中存在标号的最小值,将其最小标号赋给当前目标点,进行步骤(4);

(4)判断下一目标点,直到整幅图像都被扫描过。

2.3 人脸区域的定位

在提取出肤色区域后,要想精确定位出人脸,则需要排除一些可能存在的干扰。综合考虑其干扰,可能包含以下3方面:(1)与肤色色调接近的物体;(2)非人脸肤色区域,如四肢等;(3)脖子对精确定位的影响。

考虑到上述3方面对人脸定位造成的影响,下面分别对上述情况进行处理,以达到精确定位人脸的目的。

2.3.1 肤色色调接近物体排除

对肤色区域确定后的图像,根据其连通域内像素点总数,可以排除一些比较小的连通域块;根据连通域内肤色像素点总数与连通域外接矩形的像素总数的比值可以排除掉弯曲的四肢等;根据其外接矩形的高宽比值可以排除一些狭长的肤色及类似肤色区域。

综合考虑各种人脸库图像样本,设定连通域内白像素点总数阈值为2 000,即小于2 000个白像素点总数的连通域将被排除掉。考虑脸部区域内白像素点总数与连通域外接矩形像素总数的比值,设定该阈值为0.6。根据人脸的外观特征,设定满足要求的连通域高宽比值应该在0.8~2.0之间,其中2.0这个值是考虑到脖子的影响,因此设置范围较大。

如图5所示,可以看到原始图像及排除肤色色调相近物体前后对比,其中原图中背景露出的土地为肤色相近物体,经过上述判定,被排除掉。

图5 肤色色调相近物体排除结果

2.3.2 非人脸肤色区域排除

根据先验知识,人脸内部器官(如眼睛、嘴等)进行边缘检测后会存在许多边缘,而手等纯肤色区域边缘会很少。但由于边缘检测计算量相对较大,考虑到DSP内存资源及系统计算速度,根据眼睛、嘴等像素点在连通域内为黑,黑像素点较多,而纯肤色中黑像素点很少,因此采用黑像素点个数设置阈值来进行区分。结果如图6所示,其中原图包含手这样的纯肤色模块,通过该过程被排除掉。

图6 非人脸肤色区域排除结果

2.3.3 脖子部分的排除

对于脖子部分的排除,本文进行了大量的图像实验验证,最后确定将满足上述条件的连通域细化为3类,并设计了对应解决方法:

(1)若连通域外接矩形高宽比范围在0.8~1.3,保持原高度、宽度不变;

(2)若连通域外接矩形高宽比范围在1.3~1.5,高度变为原高度的0.85倍,宽度保持不变;

(3)若连通域外接矩形高宽比范围在1.5~2.0,高度变为原高度的0.7倍,宽度保持不变。

脖子部分的排除如图7所示,可以看到原图与排除脖子部位影响后的结果。

图7 脖子部分的排除结果

2.4 程序优化及误差分析

在DM6437编译器中定义的数据类型如表1所示:long型数据长度为64 bit,因此要避免将int和long型作为相同的尺寸处理。由于C64x+内部寄存器都是32 bit的,而且内核的32 bit的8个执行单元每次处理的数据若也是采用64 bit long型表示数据,就会导致每次使用的不是一个寄存器存取。这不仅对DSP内部寄存器使用而言是极大的浪费,也会占用更多的功能单元,浪费大量的DSP内核处理时间。所以本文在不影响精度的情况下,把程序中的long型全部换成int或short型。

表1 DM6437数据类型

执行一次short×short运算仅用1个指令周期,而执行一次int×int运算需要花费5个指令周期。所以本文对定点乘法输入采用了short型数据。这样可以最有效地利用DSP内部的16 bit乘法器,加快指令执行速度。并且对循环计数器使用int或unsigned int类型,而不使用 short或者 unsigned short类型,来避免不必要的符号扩展指令。

3 测试与结果分析

3.1 测试方案与测试数据

本节中对本文设计的人脸检测方法进行综合测试。测试方案如下:按照图片来源其测试内容包括网络图像、FDDB人脸检测数据库图像、实际生活中采集的图像3种类型;按照图像中人脸数目测试内容分为简单背景的单人脸图像和复杂背景的多人脸图像。人脸检测结果统计表如表2和表3所示。其中定义人脸检测率为正确检测出人脸的数目与图像中所有人脸数目的比值;误检率为检测出非人脸数目与图像中所有人脸数目的比值;漏检率为没有检测出来的人脸数目与人脸总数的比值。

同时对MATLAB与DSP的人脸检测程序进行运算速度的测试,测试采用10张单人脸图像以及10张多人脸图像作为测试图像。MATLAB人脸检测程序在MATLAB中利用tic、toc函数直接得到运行时间,DSP人脸检测程序可以在CCS得到系统运行时所需的时钟周期。其中,MATLAB运行环境为Windows 7系统,采用2.8 GHz主频的Intel CPU以及8G RAM,ICETEK-DM6437-B的系统时钟设定为600 MHz。MATLAB与DSP人脸检测程序运算速度对比如表4所示。

表2 不同图像来源人脸检测统计表

表3 不同人脸数目人脸检测统计表

表4 MATLAB与DSP人脸检测程序运算速度对比表

模拟实际监控录像采集图像,对其进行人脸检测。实验地点为宿舍,将照相机支架置放在床铺上,此时照相机与地面的距离大约为2.2 m左右(床高大约1.7 m,支架高大约0.5 m),连续采集图像。其采集原图像与DSP人脸检测结果如图8所示。

图8 DSP人脸检测结果

3.2 结果分析

从上面数据可以看出,网络图像和FDDB人脸数据库中的图像其人脸正确检测率相比生活中采集的图像检测率高,针对DSP优化的人脸检测程序运算速度要强于MATLAB,同时可以得出DSP人脸检测程序很好的满足了人脸检测实时性的要求。通过对测试生活图像和网络图像肤色提取后的结果分析,主要存在两方面原因。一是采集图像本身质量问题,拍摄网络图像如明星合影等所使用的摄像机像素相对较高,同时拍摄过程中会采取补光等一些措施,因此对其进行肤色提取效果较好;二是生活图像的背景比较复杂,可能含有更多的与肤色相近的物体,而且大多数在室外取景的生活照片,其肤色的提取过程受光线影响很大。

4 结论

本文在ICETEK-DM6437-B评估板上实现了实时人脸检测算法。算法首先根据MATLAB环境中统计好的肤色模型确定所有候选肤色区域,依据人脸的形状特征排除非人脸区域,可以实现所有人脸的精确定位;同时采用区域增长的连通域方法来确定人脸候选块,代替了边缘检测等方法,进而减少了DSP的运算量。实验结果表明,经过优化的算法在DM6437上可以很好的满足实时人脸检测的要求。

[1]葛薇.自动人脸识别的关键问题研究[D].北京:中国科学院研究生院,2007.

[2]隋静.基于视频图像的人脸检测方法研究[D].西安:西安电子科技大学,2011.

[3]Yang M H,Kriegman D,Ahuja N.Detecting Faces in Images:A Survey[J].IEEE Trans Pattern Analysis and Machine Intelligence,2002,24(1):34-58.

[4]王珺,彭进业,李丹娇,等.基于DSP的视频人脸监控系统设计与实现[J].计算机测量与控制,2012,20(3):697-701.

[5]Texas Instruments Inc.TMS320DM6437 Digital Media Processor[EB/OL].Product Specifications,http://www.ti.com.cn/.

[6]瑞泰创新科技有限责任公司.ICETEK-DM6437-B实验手册[S].北京:瑞泰创新科技有限责任公司,2011.

[7]Augusteijn M F.Identification of Human Faces through Texture-Based Feature Recognition and NeuralNetwork Technology[C]//Proceedings of IEEE Conference on Neural network,1993:392-398.

[8]姜军,张桂林.一种基于知识的快速人脸检测方法[J].中国图像图形学报,2002,7(1):6-10.

[9]Vidit Jain,Erik Learned-Miller.A Benchmark for Face Detection in Unconstrained Settings[R].Technical Report UM-CS-2010-009,Dept.of Computer Science,University of Massachusetts,Amherst,2010.

[10]Rafael C Gonzalez,Richard E Woods.Digital Image Processing,Third Edition[M].New Jersey:Prentice Hall Publication,2008.

[11]李华胜,杨桦,袁保宗.人脸识别系统中的特征提取[J].北京交通大学学报,2003,25(2):6-10.

[12]高红波,王卫星.一种二值图像连通域标记的新算法[J].计算机应用,2007,27(11):2776-2777.

[13]张莹,李勇平,敖新宇.基于OpenCV的通用人脸检测模块设计[J].计算机工程科学,2011,1(5):97-101.

猜你喜欢

肤色像素点人脸
有特点的人脸
一起学画人脸
基于局部相似性的特征匹配筛选算法
Conversation in a house
人的肤色为什么不同
为什么人有不同的肤色?
基于5×5邻域像素点相关性的划痕修复算法
三国漫——人脸解锁
基于canvas的前端数据加密
基于逐像素点深度卷积网络分割模型的上皮和间质组织分割