APP下载

基于OpenCV的人脸特征图像检索系统设计

2018-12-18东北大学计算机科学与工程学院国家级计算机实验教学示范中心孙梦雪

电子世界 2018年23期
关键词:控件直方图人脸

东北大学 计算机科学与工程学院 国家级计算机实验教学示范中心 周 纲 孙梦雪 高 岩

利用VS2010集成开发环境做平台搭建了一个人脸图像特征检索系统。系统设计中首先基于AdaBoost算法的思想,以OpenCV视觉库的Haartraining函数结构为基础,利用OpenCV自带的分类器与libfacedetection库进行人脸检测程序的编写,程序具有读入待检测图片,待检测图片进行预处理,加载分类器,利用分类器检测人脸,输出检测结果,并进一步实现对检测后的图片按照人脸数量进行检索的功能。经过大量图片测试,系统能够达到设计要求,具有一定的实用性和扩展性。

随着多媒体技术和计算机与数字信号处理技术的高速发展,人脸图像在各个领域中起到了越来越重要的作用,而由此衍生的人脸检测技术也在众多领域得到广泛应用。人脸检测主要是基于计算机识别的一项数字化技术,用以准确获取人的脸部大小和位置信息,在进行人脸检测时,突出主要的脸部特征,淡化次要的环境、衣着等因素。作为人脸信息处理中的一项关键技术,人脸检测技术已经超出了其它人脸识别模式的应用范畴,在视频处理、图像处理、身份验证、安全监测等方面有着重要的应用价值,也逐渐成为了人工智能与模式识别两个跨学科领域研究的热门话题。

直到 90 年代,随着实际的人脸识别和视频编码系统开始成为现实,这种情况才有所改变。在过去的十多年里,对人脸检测的极大兴趣开始从几个方面展开。研究者提出了多种分割方法,特别是那些利用运动、肤色和一般信息的方法。统计和神经网络方法的使用也使在复杂背景和多分辨率的人脸检测成为可能。另外,在能够精确定位的跟踪面部特征的特征提取方法的设计(例如弹性模板和活动轮廓)方面也取得了很大的进展。近期人脸检测的研究主要集中在基于数据驱动的学习方法,如统计模型方法,神经网络学习方法,统计知识理论和 SVM 方法,基于马尔科夫随机域的方法,以及基于颜色的人脸检测等。

本文在PC上利用VS2010集成开发环境做平台搭建了一个人脸图像特征检索系统,实现以下功能:对于给定的图像检测出包含人脸的矩形区域以及根据图片中的人脸数目对图片进行分类并按照要求(显示所有含1、2、3张人脸的图片)显示。研究的主要内容包括人脸检测、图像分类检索与MFC界面设计。

1 系统需求分析

人脸检测是一个非常先进的问题,它是人脸研究的一个主要方向,其任务是对于一幅给定的图像,采用一定的策略对其进行搜索,以确定其中是否含有人脸、含有多少个人脸,以及所含人脸的位置、大小和姿态。人脸检测的算法很多,Adaboost算法是其中的一种,Adaboost算法虽然十分复杂,但应用OpenCV提供的函数和分类器进行人脸检测将是十分容易。人脸检测程序主要完成3部分功能,即加载分类器、加载待检测图象以及检测并标示。

程序设计的总体思想是通过VS2010编写一个基于OpenCV视觉库的Windows应用程序,采用MFC设计界面。OpenCV中提供的用于检测图像中目标的函数是cvHaarDetectObjects,该函数使用指针对某目标物体(如人脸)训练的级联分类器在图象中找到包含目标物体的矩形区域,并将这些区域作为一序列的矩形框返回。分类器在使用后需要被显式释放,所用的函数为cvReleaseHaarClassifierCascade。

系统功能需求分析。人脸检测是一个复杂的具有挑战性的模式检测问题,其主要的难点有两方面,一方面是由于人脸内在的变化所引起:(1)人脸具有相当复杂的细节变化,不同的外貌如脸形、肤色等,不同的表情如眼、嘴的开与闭等;(2)人脸的遮挡,如眼镜、头发和头部饰物以及其他外部物体等;另外一方面由于外在条件变化所引起:(1)由于成像角度的不同造成人脸的多姿态,如平面内旋转、深度旋转以及上下旋转,其中深度旋转影响较大;(2)光照的影响,如图像中的亮度、对比度的变化和阴影等;(3)图像的成像条件,如摄像设备的焦距、成像距离,图像获得的途径等等。

这些困难都为解决人脸问题造成了难度。如果能找到一些相关的算法并能在应用过程中达到实时,将为成功构造出具有实际应用价值的人脸检测与跟踪系统提供保证。

2 系统设计与实现

程序设计的总体思想是通过VS2010编写一个基于OpenCV视觉库的Windows应用程序,采用MFC设计界面。首先基于 AdaBoost算法的思想,以 OpenCV 视觉库的 Haartraining 函数结构为基础,利用OpenCV自带的分类器与libfacedetection库进行人脸检测程序的编写,具有读入待检测图片,待检测图片预处理,加载分类器,利用分类器检测人脸,输出检测结果,对检测后的图片按人脸数量进行分类检索的功能。

2.1 图像预处理

由于待检测的图像一般在尺寸,色彩,分辨率等方面不同于训练集中所用到的图像,质量可能不够高达不到系统检测的要求,如在不好的光照条件下采集的图像需要进行光照补偿,因此需要先对图像进行数字图像处理。

对图片做过灰度化处理以后,还需要考虑所有待检测图像间的差异,为确保检测结果的准确,特别是面对一些明显偏暗或偏亮的图片时,如果不对待检测图片做出调整图像的局部特征会直接影响检测的结果,因此需要对待检测的图像在预处理阶段做出对比度调整或直方图调整。由于待检测的图像一般在尺寸,色彩,分辨率等方面不同于训练集中所用到的图像,这些图像的来源不同,背景不同,光照情况导致的亮度也有明显的差异,因此即使对这些待检测图像做对比度调整也不能够得到像调整训练集图像那样统一化的结果,因此待检测图像的预处理不适合做对比度调整,但对这些图像做灰度直方图均衡却能得到理想的效果,灰度直方图均衡化能够让过亮或过暗的图像灰度分布更加均匀,能够更好的突出图像中的人脸。

因此本文选择在将图片灰度化之后对人脸图像进行直方图均衡,通过直方图均衡的人脸图像可以显示更多的细节。经过直方图均衡的灰度图如图1所示。

2.2 人脸检测

在人脸检测模块中,主要完成的功能是对人脸的检测和查找,对已经过预处理的图像进行检测,经过处理之后可以获取得到人脸的静态的图像数据信息。由于在OpenCV下训练自己的分类器XML文件是个相当复杂和耗时的过程,并且自己没有得到充足的人脸数据库样本和非人脸样本进行分类器的训练,这样训练出分类器的检测率就非常低而且误检率非常高。所以本文就充分利用了OpenCV自带的良好人脸检测分类器haarcascade_frontalface_alt2.xml,采用OpenCV与于仕琪老师所编写的libfacedetection人脸检测库进行检测,按比例逐层缩小待检测图像,形成“图像金字塔”,在“金字塔”中穷举待检测子窗口,子窗口大小固定,图像不断被缩小,把各个待检测子窗口作为分类器的输入。得到检测结果,并对二者的检测进行简单的对比。人脸检测的流程如图2所示。

图1 原始图和经过直方图均衡的灰度图

图2 人脸检测流程图

2.3 图像分类检索

在上一节人脸检测的基础上,在for循环内部对每张图片进行人脸检测之后将检测得到的人脸数量结果存储到数据库内以供进行检索使用。由于数据量较少因此Access数据库即可满足需要。

人脸计数选择即为对Access数据库中存储的数据按照要求进行筛选,本文设计了可选的三个要求,即显示检测结果中分别含有0、1、3张人脸的图像。仍旧采用最简单的for循环实现对所有结果的检索,其中if语句则判断数据库中存储的每张图片人脸数目是否符合要求,若符合即弹出显示。

图3 人脸检测结果

2.4 用户界面

用户界面部分采用VS2010自带的MFC(微软基础类库)模块进行设计。

配置好开发环境之后即可以进行如BUTTON等各控件的添加。为容易观察与美观起见,将界面分为两个,由图3即可看出,可进行文件夹的选择进而对文件夹内的图片进行检测与分类检索,并对原始图片、检测后的图片与检索结果进行显示。在主界面上点击人脸检索按钮即进入检索界面。

界面部分涉及到了以下六种控件,分别为:Button、List Box、Picture Control、Edit Control、ComBo BOX与Static Text。

对于每个控件都有一个ID,相当于名字一样。ID名是个宏定义,每个ID都对应一个数字。除了静态控件(IDC_STATIC)以外,每个控件的ID都是唯一的。程序中要对某个控件进行操作时,需要指明是对哪个控件进行操作,这时就需要ID了。

3 系统调试

程序开发选用VS2010配置OpenCV2.4.9版本,其具体配置分为以下两个时期:程序初期开发与后期界面设计时期。

程序初期开发:(1)环境变量配置。打开流程如下:控制面板→系统→高级系统设置→高级→环境变量,找到path进行编辑;(2)新建一个Win32控制台应用程序;(3)配置属性管理器;(4)源文件处选择添加新项目即可添加新的.cpp文件。

界面设计时期:(1)新建一个MFC应用程序,命名为FaceDetect-Sys,然后依次点击下一步,直到完成出现资源窗口,即可在对话框处进行控件的添加,控件的添加方法为打开视图中的工具箱,选择所需的控件,进而添加事件处理程序;(2)OpenCV环境配置与程序初期开发时类似,不予赘述;(3)OpenCV中的头文件highgui.h中定义的CvvImage类,可以很好的实现OpenCV和windowsMFC显示接口,但其2.2版本之后取消了这个类,本文使用的是2.4.9版本,因此需要重新添加进去,即将网上下载到的CvvImage.cpp和CvvImage.h分别加入到工程中;(4)由于进行人脸检测之后得到的如人脸数量等数据需要进行存储,因此采用最简单的由微软发布的关联式数据库管理系统Microsoft Office Access2010进行数据的存储。程序运行结果如图4所示。

图4 图像检索(图像中含有3张人脸的图)

4 结束语

人脸检测是一项极具挑战性的课题,人脸作为图像与视频中最重要的视觉图像(visual object)之一,在计算机视觉、模式识别、多媒体技术研究中占有重要的地位。本文在PC上利用VS2010集成开发环境做平台配置OpenCV搭建了一个人脸图像特征检索系统,实现以下功能:对于给定的图像检测出包含人脸的矩形区域,以及根据图片中的人脸数目对图片进行分类并按照要求显示。研究的主要内容包括人脸检测、图像分类检索与MFC界面设计。人脸检测技术虽然已成为一个当代图像处理的一个热门研究话题,取得了巨大的成就,但是整体效果仍不够理想,在实际应用中仍面临困难。如何提高检测的准确率以及检测的速度,仍是一个摆在众多研究者面前的一大难题。

猜你喜欢

控件直方图人脸
符合差分隐私的流数据统计直方图发布
有特点的人脸
一起学画人脸
用直方图控制画面影调
三国漫——人脸解锁
关于.net控件数组的探讨
中考频数分布直方图题型展示
基于空间变换和直方图均衡的彩色图像增强方法
ASP.NET服务器端验证控件的使用
长得象人脸的十种动物