存包柜厂家
免费服务热线

Free service

hotline

010-00000000
存包柜厂家
热门搜索:
技术资讯
当前位置:首页 > 技术资讯

硅谷杂志基于AndroidAPI的人脸检测新日

发布时间:2020-01-15 10:32:08 阅读: 来源:存包柜厂家

【硅谷网12月3日文】据《硅谷》杂志2012年第18期刊文,所谓人脸检测就是指从一幅图片或者一帧视频中找出所有人脸的位置和尺寸并进行标定。人脸检测是人脸识别系统中的一个重要环节,也可以独立应用于视频监控。在数字媒体日益普及的今天,利用人脸检测技术还可以帮助我们定位人脸位置,应用于数码照相,海量数据筛选等领域。最新的Android4.0SDK中提供根据弹性图匹配的人脸检测API。

0前言

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

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

2)弹性图匹配(ElasticBunchGraphMatching简称EBGM)的方法。

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

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

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

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

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

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

2构建一个人脸检测的AndroidActivity

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

其中最重要的一步是调用setFace()方法,它将FaceDetector对象实例化,同时调用findFaces()方法,把结果保存在faces对象中,人脸的中点位置转移到MyImageView。

在下面的代码里,需要往MyImageView中添加setDisplayPoints()方法,用来在被检测出的人脸上标记渲染标识。图1展示了一个标识在被标记在被检测的人脸中心位置。

//设置渲染标识

publicvoidsetDisplayPoints(int[]mx,int[]my,inttotal,intstyle){

mDisplayStyle=style;

mPX=null;

mPY=null;

if(mx!=null&&my!=null&&total>0){

mPX=newint[total];

mPY=newint[total];

for(inti=0;i<total;i++){

mPX[i]=xx[i];

mPY[i]=yy[i];

}}}

图1

3检测多个人脸

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

privatestaticfinalintMAX_FACES=10;

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

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

图2

4定位眼睛的中心位置

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

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

图3

5彩色和灰度

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

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

图4

6结论

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

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

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

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

(责任编辑:硅谷网·)

上一篇:畅玩在线小游戏 80后回忆童年的快乐

下一篇:硅谷杂志:基于DSP采集与处理GPS信号的系统设计 对“硅谷杂志:基于Android API的人脸检测”发布评论

名医汇

名医汇

名医汇

医院预约挂号平台