基于Android API的人脸检测

时间:2022-07-15 05:09:06

基于Android API的人脸检测

摘 要: 所谓人脸检测就是指从一幅图片或者一帧视频中找出所有人脸的位置和尺寸并进行标定。人脸检测是人脸识别系统中的一个重要环节,也可以独立应用于视频监控。在数字媒体日益普及的今天,利用人脸检测技术还可以帮助我们定位人脸位置,应用于数码照相,海量数据筛选等领域。最新的Android 4.0 SDK中提供根据弹性图匹配的人脸检测API。

关键词: Android;人脸检测;移动应用

0 前言

人脸检测的任务是在复杂的背景下检测图像中有无人脸,从而判断人是否存在,并提取出人脸面部图像信息。人脸检测方法的分类,根据研究角度的不同,可以有不同的分类方法。下面介绍主要的两种检测方法:

1)隐马尔可夫模型(Hidden Markov Model,简称HMM)的方法。

2)弹性图匹配(Elastic Bunch Graph Matching简称EBGM)的方法。

在Android 4.0 SDK通过两个主要的API提供了一个弹性图匹配的方法,这两个API分别是android.media.FaceDetector

和android.media.FaceDetector.Face,它们都已经包含在Android官方API中。需要注意的一点是,人脸检测是通过计算机技术来确定人脸在任意图像的位置和大小,不要把它和人脸识别的概念混淆。简单地说,人脸检测是从照片中提取人的面孔,而人脸识别是从照片中试图找出其中的人是谁。

1 如何安装Android人脸检测的APIs

如前所述,主要有两个在本中所介绍的API:

android.media.FaceDetector:从一个位图对象中检测人脸。

android.media.FaceDetector.Face:包含了从位图中检测出的人脸的所有位置信息。

这两个API都包含在Android 4.0开发包中,不需要在开发环境中另外选装。

2 构建一个人脸检测的Android Activity

首先要构建一个通用的Android Activity。先实例化一个ImageView并定义它为MyImageView。而我们需要进行检测的包含人脸的位图文件必须BitMap RGB565格式,API才能正常工作。被检测出来的人脸需要一个信任测度(confidence measure),这个方法是定义在android.media.FaceDetector.

Face.CONFIDENCE_THRESHOLD中的。

其中最重要的一步是调用setFace()方法,它将FaceDete

ctor对象实例化,同时调用findFaces()方法,把结果保存在faces对象中,人脸的中点位置转移到MyImageView。

在下面的代码里,需要往MyImageView中添加setDisplay

Points()方法,用来在被检测出的人脸上标记渲染标识。图1展示了一个标识在被标记在被检测的人脸中心位置。

3 检测多个人脸

可以使用FaceDetector来定义要检测的人脸数量。下例就是更改MAX_FACES变量来实现定义要检测的人脸数量。

private static final int MAX_FACES = 10;

在Android API文档中,它没有明确人脸的数量指定是否存在一个上限,所以我们可以尝试检测尽可能多的人脸。

然后,可以使用从findFaces返回的变量count来获得人脸列表中的所有结果。图2展示了以检测出的多个人脸的中点为中心的多个标记。

4 定位眼睛的中心位置

Android的人脸检测API还可以返回给我们一些其他有用的信息,用它们可以对检测出的人脸做一些微调。例如,它返回eyes Distance,pose和confidence等变量。我们可以使用eyesDistance的值来估计眼睛的中心的位置在哪里。

接下来我们把setFace()方法放入后台线程中的doLengthy

Calc()方法里,因为人脸检测在处理比较大的照片,或者照片中的人脸数量较多时,计算所需时间会比较长,从而导致“应用程序没有响应”的错误,放在后台线程中处理可以避免这样的错误产生。图3展示了以检测出的多个人脸的眼睛为中心的多个标记。

5 彩色和灰度

一般来说,人脸检测主要是通过寻找类似的面部特征高对比区域来实现,所以通常灰度图像的处理结果和彩色图像的处理结果相差不会太大。然而,一些研究人员仍在努力改善彩色图像中的脸部检测的准确性。在现实中,如灯光和遮挡物等因素,将会较大地影响到人脸检测的准确性。

我们另外写了一些程序来处理灰度图像和彩色图像,从Android的API得到的结果来看基本一致。因此,Android API对人脸检测处理的结果可以基本忽略不同的色彩通道。图4所示的是灰度照片处理的结果。

6 结论

在本文中,通过一个实例介绍了如何利用Android APIs如何进行简单的人脸检测。通过Android的人脸检测特性,我们可以得到更多有用的应用解决方案:

很多应用可以利用人脸检测达到更好的用户体验,如使照相对焦更准确,自动统计人数。

可以利用创建人像数据库更好地管理你的联系人或客户名片。

通过脸部检测,实时的视频对话可以达到更好的通话效果。

参考文献:

[1]/reference/android/media/FaceDetector.html.

[2]Viola P.,Jones M. J.、Robust Real—Time Face Detection、International Journal of Computer Vision 57(2), 137—154,2004.

[3]李刚、高政,人脸自动识别方法综述,计算机应用研究,2003,8:4—9.

上一篇:天门冬组织培养条件的优化 下一篇:龙王沟铁路专用线与大准铁路点岱沟车站接轨方...