APP下载

Android平台实时人脸检测和性别识别的研究与实现

2014-09-18陆亨立陆小峰李莹娇

电视技术 2014年13期
关键词:人脸分类器嵌入式

余 彧,陆亨立,陆小峰,李莹娇

(上海大学通信与信息工程学院,上海 200072)

Android平台中实时人脸检测和性别识别问题是模式识别领域和嵌入式视觉领域交叉的一个研究问题,既需要通过图像采集设备和嵌入式处理平台模仿人眼和人大脑的辨别功能,智能地定位人脸所在位置并分割出相应的脸部区域图像,为实际性别的判定识别提供实时可靠的数据,同时又需要对分割出的人脸图像提取特征并利用模式分类器进行性别识别。在嵌入式平台中实现人脸检测以及性别识别的两个主要关键点是实时性和有效性,即检测和识别的速率和准确率。

早在20世纪70年代已经有科研人员研究人脸检测问题。人脸检测方法涉及到许多模式识别的经典算法,如人工神经网络(Artificial Neural Network,ANN)、主成分量分析法(Principal Component Analysis,PCA)、支持向量机(Support Vector Machines,SVM)以及 AdaBoost快速人脸检测算法等[1]。不同的人脸检测方法都存在着一定的联系,而随着研究不断地深入,人们开始意识到将多种检测方法结合起来能够达到更理想的检测效果。最近几年,研究人员主要侧重于结合多种检测方法进行人脸检测而不是只针对某一种方法进行改进。

对于性别识别问题的研究始于20世纪80年代,但是真正受到关注是在21世纪初,最主要的研究目标是要得到一个性别识别分类器。十多年来性别识别问题得到越来越多来自计算机视觉、模式识别、人工智能等领域的研究人员的关注,特别是在近几年,更是成为一个热门研究课题。目前,性别识别的分类方法多数都来源于人脸识别相关的分类方法。人脸识别技术在经过几十年的研究和发展后,已经涌现了大量经典的分类方法[2],其中一些方法如人工神经元网络(ANN)、支持向量机(SVM)、Fisher-Face法等经过研究和实验证明同样也适用于性别识别问题。

在嵌入式平台中进行人脸检测相关研究的较多,研究成果较为丰富[3],涉及到各类嵌入式平台,包括了基于ARM或X86构架的Android或嵌入式Linux开发平台、DSP平台以及FPGA平台等。不论是检测速度还是检测率,都取得了比较满意的结果。而对于在嵌入式平台中进行性别识别的研究成果则少的可怜,在国内几乎是空白,究其主要原因应该是受到嵌入式处理设备的约束和限制,在嵌入式平台中进行大量复杂的模式识别分类很难满足实时性的刚性需求。但随着多核时代的来临,嵌入式处理器的性能不断提高,同时伴随着存储设备等其他硬件设备水平的提升,之前留下的空白应该会得到很好的填补。

1 嵌入式快速人脸检测与性别识别

本文主要研究Android平台中的实时人脸检测和性别识别,其实现方法如图1所示,主要包括3大部分:人脸检测、脸部图像处理、性别识别。

图1 Android平台中的实时人脸检测和性别识别实现流程图

1)人脸检测

针对嵌入式平台的处理能力相对比较一般的特点,在人脸检测之前须对从摄像头设备获取的输入视频图像进行预处理,从而最大程度地降低计算量。预处理过程包括了灰度处理、图像等比例压缩以及直方图均衡。灰度处理把三通道的彩色输入图像转化为单通道的灰度图像,图像等比例压缩能够降低输入图像的分辨率,从而减少了人脸检测算法的计算量并有效提高检测速率。而直方图均衡则能够提高图像的对比度和亮度,从而增强人脸检测的可靠性。本文采用Adaboost快速人脸检测算法进行人脸检测,Adaboost算法是首个能够达到实时的人脸检测算法,被广泛运用于嵌入式设备中进行人脸检测。

2)脸部图像处理

由于性别识别的结果好坏易受到光照变化、脸部表情、脸部朝向改变等影响,因此在人脸检测和性别识别之前加入脸部图像处理是极其重要的。本文所采用的脸部图像处理包括以下几个步骤:首先是人眼检测,利用Adaboost算法以及人眼分类器可以较容易地在脸部图像中标定人眼位置。其次是脸部图像的几何变换和剪裁,根据所检测到的人眼位置,通过图像旋转、剪裁、缩放等手段,使得脸部图像中人眼是对齐的且不包含背景、额头、耳朵和下巴,并将处理后的脸部图像缩放到70×70固定大小。再次是分离直方图均衡,这个过程能够使得每一个脸部图像都具有相同的对比度以及亮度。最后是图像平滑,图像平滑能够有效地减少图像的噪声。

3)性别识别

性别识别的过程包括离线学习和在线识别两个部分。本文采用FisherFace方法进行性别识别以及性别分类器的训练,FisherFace方法会将高维图像降低到低维空间,因此能够大大地降低分类开销,相比于其他的性别识别方法最适合在嵌入式平台中运用。

2 AdaBoost快速人脸检测算法原理及实现方法

AdaBoost人脸检测算法是由P.Viola等人提出的[4],它是一种迭代算法,其核心思想是:从人脸图像中抽取大量的简单特征,有些特征具有一定的人脸和非人脸区分能力。随后通过训练从众多特征中选出分类能力较强的特征作为弱分类器,并最终将这些弱分类器进行有效的组合从而构成强分类器[5]。

基于AdaBoost算法的人脸检测流程如图2所示,分为离线训练和在线检测两个部分。离线训练过程对大量的人脸和非人脸样本图像进行训练,对每个样本提取特征,并通过Adaboost算法最终生成强分类器,在线检测过程中,运用离线过程生成的人脸分类器对输入图像进行分类检测,从而得到人脸图像结果。

图2 基于AdaBoost算法的人脸检测流程图

本文利用 JNI(Java Native Interface)接口、Android NDK(Native Development Kit)以及OpenCV AdaBoost算法API来实现Android平台中的人脸检测。封装了两个主要的native方法,分别是JNIEXPORT void JNICALL Java_com_example_gender_MainActivity_LoadFaceCascade(JNIEnv*env,jobject obj,jstring filename)用于加载离线训练好的人脸分类器,以及JNIEXPORT void JNICALL Java_com_example_gender_MainActivity_Detect(JNIEnv* env,jobject obj)用于在线实时人脸检测。利用NDK对native方法进行编译并生成共享库文件libfacedetect.so,在java源代码中对动态库进行调用。

针对嵌入式平台对实时性要求较高的特点。本文采用Android中的多线程技术使整个人脸检测过程在后台完成,避免了前台的预览摄像头图像UI出现卡顿的现象。在新建的子线程中执行耗时比较多的人脸检测算法,并利用Handler,Looper和MessageQueue进行线程间的通信。子线程在检测到人脸之后通过sendMessage方法将人脸位置信息传递给主线程,主线程在收到数据之后实时地更新UI。

3 基于FisherFace算法的性别识别原理及实现方法

3.1 FisherFace算法

FisherFace方法也称为Fisher线性判别分析(Fisher Linear Discriminant Analysis,FLDA),是由P.N.Belhumeur等人在1997年提出的[6]。Fisherface算法的核心思想是以样本的可分性为目标,寻找一组线性变换使每类的类内离散度最小,同时使类间的离散度达到最大,即选择使样本类间离散度和类内离散度的比值最大的特征值。由于FisherFace算法引入了类别信息,最小化了类内距离,因此该算法比较适合于模式识别问题[7]。

对于性别识别问题,有M=2个模式类别,即男性和女性,样本的类内散布矩阵Sw和Sb类间散布矩阵定义为

式中:N表示所有样本集的总数;Ni表示第i类样本集的数量;μi表示第i类样本的均值;xij表示第i类中第j个样本;μ表示所有样本的平均值。

Fisher判决准则函数定义为

Fisher判决准则函数将样本的类间离散度和类内离散度非常巧妙地结合在一起,取极大化目标函数J(W)的矩阵Wm作为投影方向。其物理意义是:特征样本在Wm上投影后,类间离散度和类内离散度之比达到最大,从而达到性别分类的目的。

本文同样采用JNI接口、Android NDK以及OpenCV FisherFace算法来实现Android平台中的性别识别。与人脸检测相同,同样封装了两个native方法,分别实现加载离线性别识别分类器和在线实时识别。整个性别识别过程同样在后台独立的线程中完成,具体实现方法与人脸检测过程类似。

3.2 性别识别分类器的训练

本文所选择的人脸样本图像来自于多种途径,包括知名的人脸库(如FERET,Yale,AT&T)、自行采集的人脸样本库以及来自互联网的各类明星照片。所有收集的人脸样本图像并不只局限于正面脸的图像,也包括了不同种族、不同年龄段、不同脸部表情以及脸部旋转在以内的人脸图像,从而增强了系统的鲁棒性。

性别识别分类器的训练过程同样也需要对样本图像进行处理,所采用的处理方法与本文第二部分介绍的脸部图像处理方法相同。如图3所示,对所有样本图像先利用Adaboost算法进行人脸检测,随后对脸部图像进行进一步处理,得到根据人眼对齐的脸部灰度平滑图像,最后运用FisherFace训练算法进行训练并将生成的性别识别分类器保存到gender.yml描述文件中。

图3 样本图像处理处理示例图

4 实验结果与分析

4.1 实验环境介绍

本文使用两个构架截然不同的嵌入式硬件平台进行实验以及算法性能对比,其中一个平台是以基于ARM Cortex-A8构架的Samsung S5PV210为主处理芯片,主频1 GHz,以下简称S5PV210平台。另一个是以基于Intel X86构架的 Intel Atom Z2460为主处理芯片,主频1.60 GHz,以下简称Z2460平台。在这两个平台中都运行Android 4.0操作系统,使用OpenCV2.4.4库来实现所有人脸检测和性别识别算法,并使用交叉编译环境Android NDK r8b进行编译。

为了测试人脸检测和性别识别算法的性能,准备了大量的测试样本图像以及两段分辨率均为640×480视频进行对比分析:1)公共测试视频;2)自己生活中录制的视频。测试样本示例以及公共视频中的关键帧如图4所示。

图4 测试样本示例及公共视频中的关键帧

4.2 实验数据及分析

4.2.1 基于不同特征分类器的AdaBoost人脸检测算法性能对比

OpenCV库中提供了两种已经训练好的AdaBoost人脸分类器,一种是基于Haar-like特征的分类器,保存于haarcascade_frontalface_alt2.xml描述文件中;另一种是基于LBP特征的分类器,保存于lbpcascade_frontalface.xml描述文件中。表1是运用了这两种特征分类器的Ada-Boost人脸检测算法分别运行于S5PV210平台和Z2460平台的性能测试结果,图5是根据表1生成的性能对比柱状图。

表1 基于不同特征分类器AdaBoost算法性能对比

图5 基于不同特征分类器AdaBoost算法性能对比

表1中检测率=实际检测到人脸帧数/总含人脸帧数,误检率=误检到含人脸的帧数/总含人脸帧数。由表1中的测试数据以及图5可知,基于Haar-like特征的人脸分类器可以得到相对更高的检测率(96.35%),而基于LBP特征的人脸分类器检测速率要快了1倍以上,且也可以得到比较高的检测率(87.46%)。鉴于嵌入式设备对实时性的要求较高,本文选择基于LBP特征的人脸分类器进行人脸检测。

4.2.2 Android平台中两种人脸检测方法的性能对比

从Android 4.0 Ice Cream Sandwich版本开始,官方新增了人脸检测的API,本文利用了官方的API实现了一个人脸检测性能对比程序,与采用AdaBoost算法实现人脸检测的方法进行性能对比。表2是基于2种不同方法实现的人脸检测性能测试结果,2种实现方法分别运行于S5PV210平台和Z2460平台,图6是根据表2生成的性能对比柱状图。

表2 基于不同方法实现的人脸检测性能对比

图6 基于不同方法实现的人脸检测性能对比

由表2中的测试数据以及图6可知,运用Android系统自带API实现的人脸检测相比于使用OpenCV实现AdaBoost快速人脸检测,检测速率要更快一些,但其检测率只有接近80%。

4.2.3 基于FisherFace算法的性别识别性能对比分析

表3是基于FisherFace算法的性别识别方法在S5PV210平台和Z2460平台运行的性能测试结果,图7是根据表3生成的性能对比柱状图。图8是对测试样本示例及公共视频中的关键帧进行性别识别的结果。由表3中的测试数据以及图7可知,FisherFace算法在Z2460平台运行时已经能够接近10 f/s(帧/秒)的识别速率,能够比较好地满足实时性的要求。而在S5PV210平台运行时也有接近6 f/s的识别速率。在两个平台中运行的识别准确率均为82.64%。

表3 基于FisherFace算法的性别识别性能对比

图7 基于FisherFace算法的性别识别性能对比

5 总结

本文提出并实现一种Android系统下实时人脸检测和性别识别的方法,并分别在基于ARM和X86构架的两个嵌入式平台中进行了大量实验和测试数据对比,实验数据证明了本文的方法在实时性和准确性方面都取得了比较理想的结果。随着技术的进一步发展,嵌入式平台处理器性能增强及核数增加是一种必然趋势,人脸检测和性别识别技术应该能够更完美地在这些嵌入式平台上实现。

:

[1]赵丽红,刘纪红.人脸检测方法综述[J].计算机应用研究,2004,21(9):1-4.

[2]闫娟,程武山,孙鑫.人脸识别的技术研究与发展概况[J].电视技术,2006,30(12):81-84.

猜你喜欢

人脸分类器嵌入式
有特点的人脸
一起学画人脸
TS系列红外传感器在嵌入式控制系统中的应用
三国漫——人脸解锁
搭建基于Qt的嵌入式开发平台
基于实例的强分类器快速集成方法
嵌入式软PLC在电镀生产流程控制系统中的应用
加权空-谱与最近邻分类器相结合的高光谱图像分类
结合模糊(C+P)均值聚类和SP-V-支持向量机的TSK分类器
长得象人脸的十种动物