基于JavaCV的人脸检测系统

2014-10-21 11:12陶建航张琪
科学与技术 2014年11期
关键词:人脸检测

陶建航 张琪

摘 要:人脸检测是指使用计算机在动态的场景或复杂的背景中检测出人脸的存在,并确定所有人脸的位置与大小的过程。人脸检测技术是人脸识别、表情识别、人脸跟踪等技术的重要前提条件,同时在模式识别、人机交互、智能监控、视频检索等领域也有广泛的应用。

JavaCV在OpenCV基础上提供了进行人脸识别的API。本文介绍了PC上使用Eclipse集成开发环境搭建了基于JavaCV的人脸检测的算法及其系统。

关键词:人脸检测;JavaCV;OpenCV

一、 人脸检测现状分析

人脸检测问题最初来源于人脸识别,任何一个自动的人脸识别系统首先必须对人脸进行准确的定位,因此实时而有效的人脸检测显得尤为重要。跟其他生物特征识别方法相比,人脸识别具有更加直接、方便、友好的特点,因其非侵犯性更容易被用户所接受。而且,通过对人脸的表情、姿势等作分析,还能获得其他识别系统难以获得的信息,因此人脸识别成为最有潜力的生物身份验证手段。早期的人脸识别研究主要针对具有较强约束条件的人脸图像(如无背景的图像),因此假设人脸容易获得或在手工交互下运用,而人脸检测问题并未得到重视。

近年来,随着信号处理理论和计算机的出现及其发展,人们开始用摄像机获取环境图像并将其转换成数字信号,用计算机实现对视觉信息的处理,这就形成了计算机视觉。计算机视觉是当前计算机科学中的一个非常活跃的领域,其基本假设是:可以用计算的方式来模拟人类的视觉机制。

人脸的自动识别是一种重要的生物特征识别技术,与其它身份识别方法相比,人脸识别具有直接、方便、友好等特点,因而人脸自动识别问题的研究不仅具有重要的应用价值,而且具有重要的理论意义。现在,随着科学技术和电子商务的发展,人脸检测的应用背景已经远远超出了人脸识别系统的范畴,在基于内容的检索、数字视频处理、计算机视觉、人机交互等方面都有着重要的应用价值。

人脸识别通过计算机提取人脸的特征,并根据这些特征进行身份验证。人脸与其他生物特征(指纹、虹膜等)一样与生俱来不可改变,它们所具有的唯一性和不易被复制的良好特性为身份鉴别提供了必要的前提,同其他生物特征识别技术相比,人脸识别技术具有操作简单、结果直观、隐蔽性好的优越性。人脸识别一般包括三个步骤:人脸检测、人脸特征提取和人脸的识别与验证。其处理流程如图1所示。

图1 人脸识别的一般步骤

二、 使用JavaCV进行人脸识别的方法

人脸检测一种主流的方法就是类haar adaboost方法,OpenCV中也是用的这种方法。这种方法可以推广到刚性物体的检测,前提是要训练好级联分类器(比如说用类haar特征),一旦训练数据弄好了,直接调用OpenCV中的类CascadeClassifier,用它的几个简单的成员函数就可以完成检测功能。

2.1 Adaboost算法简介

Adaboost是一种迭代算法,其核心思想是针对同一个训练集训练不同的分类器(弱分类器),然后把这些弱分类器集合起来,构成一个更强的最终分类器(强分类器)。其算法本身是通过改变数据分布来实现的,它根据每次训练集之中每个样本的分类是否正确,以及上次的总体分类的准确率,来确定每个样本的权值。将修改过权值的新数据集送给下层分类器进行训练,最后将每次训练得到的分类器最后融合起来,作为最后的决策分类器。使用Adaboost分类器可以排除一些不必要的训练数据特徵,并将关键放在关键的训练数据上面。Adaboost 算法是1995 年提出的一种快速人脸检测算法,是人脸检测领域里程碑式的进步,这种算法根据弱学习的反馈,适应性地调整假设的错误率,使在效率不降低的情况下,检测正确率得到了很大的提高。

Adaboost算法是目前在人脸检测方面检测速度较快、检测效果较好的一种检测方法,它是一种把弱分类器采用级聯的方式训练成为强分类器的方法。这些弱分类器只需要满足比随机猜测好一点,就能通过不断的修正每个弱分类器的权值,即挑选那些比较好的分类器,抛弃不好的分类器,从而最终形成由这些弱分类器组成的强分类器,相比较其他的方法而言,Adaboost方法对每个弱分类器的权值的形成都是无人值守的,完全自动化的,因而Adaboost算法有着比较好的易用性。大量的实验证明,Adaboost算法是有效的将多弱分类器强化成为强分类器的一种方法,经过训练的分类器具有比较好的分类效果,而且速度较快。

2.2 Google识图

本系统采用Google识图技术,Google识图的关键技术叫做感知哈希算法(Perceptual Hash Algorithm),它的作用是对每张图片生成一个"指纹"(fingerprint)字符串,然后比较不同图片的指纹,结果越接近,说明图片越相似。

下面是一个最简单的实现:

第一步,缩小尺寸。

将图片缩小到8x8的尺寸,总共64个像素。这一步的作用是去除图片的细节,只保留结构、明暗等基本信息,摒弃不同尺寸、比例带来的图片差异。

第二步,简化色彩。

将缩小后的图片,转为64级灰度。也就是说,所有像素点总共只有64种颜色。

第三步,计算平均值。

计算所有64个像素的灰度平均值。

第四步,比较像素的灰度。

将每个像素的灰度,与平均值进行比较。大于或等于平均值,记为1;小于平均值,记为0。

第五步,计算哈希值。

将上一步的比较结果,组合在一起,就构成了一个64位的整数,这就是这张图片的指纹。组合的次序并不重要,只要保证所有图片都采用同样次序就行了。

得到指纹以后,就可以对比不同的图片,看看64位中有多少位是不一样的。在理论上,这等同于计算"汉明距离"(Hamming distance)。如果不相同的数据位不超过5,就说明两张图片很相似;如果大于10,就说明这是两张不同的图片。图2给出了Google识图的流程图

图2 Google识图的流程图

这种算法的优点是简单快速,不受图片大小缩放的影响,缺点是图片的内容不能变更。如果在图片上加几个文字,它就认不出来了。所以,它的最佳用途是根据缩略图,找出原图。

本论文就是在此基础上运用人脸识别算法找出静态图片人脸位置后,进行截图,并根据其他静态图片的人脸截图进行相似度比对,判别是否同一人。

三、实验分析和研究

本系统应用JavaCV进行人脸识别,于静态的图片上截取人脸后,使用Google识图的原理,将图片与其他静态图片的头像进行比对,当相似度在一定范围内时,则认为为同一人。

而在视频等动态图中寻找人脸,我们是使用了ffmpeg的软件对视频按时间进行截图,命名方式就是以时间命名,之后的人脸比对就是静态图片之间的人脸比对了,当发现与要求人物所在图片时,根据图片取名字,即可得到当前人物在视频中出现的时间,以此给出结果。

图3给出了本系统进行比对的流程图。

图3 系统人脸识别的流程

本系统可较好地实现人脸的识别和判断,但由于本身的学习数据不足,并不是每个人脸都能检测出来。特别是在图片边界上的人脸,也就是被遮挡了部分的人脸,基本检测不出来。还有,在人眼不是特别正的情况下,也不易检测,这应为训练数据不充分或OpenCV算法的原因。另外,本系統中拍摄图片时的光线强度和人脸的相对倾斜都对系统的人脸识别有一定的影响,这也有待系统算法的改进。

四、结论

本文使用JavaCV进行人脸图像的采集、处理和检验,基本实现了人脸的识别和检验。但系统还存在一些不足,可在下面两点进一步改进,首先需要改进人脸的识别,使得在图片中的人脸搜寻准确率提高。其次,在进行人脸图片比对时,应使用不易被光线影响的计算人脸特征值的算法进行计算,减少某些因素的影响,提高系统识别准确率。

参考文献:

[1] 苏草,林亚明.基于人脸识别的移动终端课堂考勤系统[J].计算机光盘软件与应用, 2014(4):112-113

[2] 秦小文,等.基于OpenCV的图像处理[J], 电子测试,2011(7):51-53

[3] 曹莹,等. AdaBoost算法研究进展与展望[J], 自动化学报,2013(6):89-92

[4] 黑吧安全网. 利用OpenCV实现人脸检测[J/OL].2014-6. www.myhack58.com/Article/68/2014/49692.htm

[5]阮一峰. 相似图片搜索的原理[J/OL].2013-3. www.ruanyifeng.com/blog/2011/07/principle_of_similar_image_search.html

作者简介:

陶建航(1991.10-),男,汉族,浙江温州人,本科学生,研究方向:手机及网络系统开发与应用

张琪(1972.9-),男,汉族,江苏南京人,硕士,副教授,研究方向:物联网及其应用技术等;

猜你喜欢
人脸检测
JNI技术在基于OpenCV的人脸与微笑检测中的应用
基于人脸特征定位的SNS网站应用组件研究与设计
基于Android平台的人脸识别系统设计与实现
基于Matlab的人脸检测实验设计
基于JSeg和显著性检测的服装图像分割方法