硅谷杂志:基于Android API的人脸检测

  【硅谷网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发布的人脸检测特性,我们可以得到更多有用的应用解决方案:

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

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

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

  

时间: 2024-10-29 06:36:16

硅谷杂志:基于Android API的人脸检测的相关文章

40多个关于人脸检测/识别的API、库和软件

[感谢@吕抒真 的热心翻译.如果其他朋友也有不错的原创或译文,可以尝试推荐给伯乐在线.] 自从谷歌眼镜被推出以来,围绕人脸识别,出现了很多争议.我们相信,不管是不是通过智能眼镜,人脸识别将在人与人交往甚至人与物交互中开辟无数种可能性. 为了帮助研究过程中探索人脸识别,我们列出以下人脸检测和识别API.希望有所帮助! Face Recognition - 拉姆达实验室斯蒂芬弄的.示例代码和图形演示点击http://api.lambdal.com/docs,我们的API提供了面部识别,面部检测,眼睛

人脸检测与识别的趋势和分析

现在打开谷 * 公司的搜索器,输入 "face detect",估计大家都能够想到,都是五花八门的大牛文章,我是羡慕啊!(因为里面没有我的一篇,我们实验室的原因,至今没有让我发一篇有点权威的文章,我接下来会写 4 张 4A 纸的检讨,去自我检讨下为什么?----- 蓝姑) 原归正传,让我开始说说人脸这个技术,真的是未来不可估计的 IT 技术,不知道未来会有多少企业为了这个技术潜心研究,现在就来看看最近的技术和未来的发展吧! 我先大概说下遇到的一些问题: Ø 图像质量:人脸识别系统的主要

Android 开发者如何通过运动视觉 API 进行机器学习 - 第一部 - 人脸检测

本文讲的是Android 开发者如何通过运动视觉 API 进行机器学习 - 第一部 - 人脸检测, 在计算机科学中,机器学习是一个非常有意思的领域,它已经在我的最想学习的愿望清单中驻留已久.因为有太多来自于RxJava, Testing, Android N, Android Studio 以及其他 Android 相关的技术更新,所以我都每能花时间来学习这个.甚至在 Udacity 还专门有一个有关机器学习的课程. . 让我非常激动的发现是,目前任意一个开发人员都能基于运动视觉(Mobile

硅谷杂志:基于HMM模型的入侵检测技术研究

[硅谷网12月10日文] 据<硅谷>杂志2012年第18期刊文称,入侵检测技术作为计算机安全技术的一个重要组成部分,已经受到越来越广泛地关注.作为一种新的动态安全防御技术,它是继防火墙之后的第二道安全防线.主要研究当前入侵检测一直无法很好解决的两个问题,即 复杂网络攻击的检测和网络在入侵攻击下的风险评估. 0前言 自上世纪90年代以来,基于TCP/IP的互联网得到了飞速的发展,信息的传递和处理超越了时间和空间的限制,网络信息化已成为不可阻挡的趋势,但其安全性也受到越来越多的挑战.于是人们针对网

Android人脸检测介绍

自从Play Services 8.1中引入了Vision开发库,开发者可以方便地对视频或图像进行人脸定位.只要有一张包含了人脸信息的图片,你就可以收集每一张图片上的人脸信息,例如人脸的位置.是否微笑.睁眼或者闭眼和他们具体的面部特征. 这些信息对于许多应用来说是非常有用的,例如一个相机应用可以利用这些信息做到当所有人都睁眼微笑的时候拍照,或者利用它增加一些搞笑效果,例如给照片中的人头上添加一个独角兽的角.不过大家要注意的是,这只能用来做人脸检测,而不是人脸识别.我们只能利用它检测到人脸信息,但

如何在Android中用OPENCV实现人脸检测,人脸识别等功能,如何实现,用什么方法?

问题描述 如何在Android中用OPENCV实现人脸检测,人脸识别等功能,如何实现,用什么方法? 如何在Android中用OPENCV实现人脸检测,人脸识别等功能,如何实现,用什么方法? 解决方案 请问您做的怎么样了?

脸部识别-android Opencv 人脸检测

问题描述 android Opencv 人脸检测 请问有大神做过opencv人脸识别的相关demo吗?找了好长时间都是人脸检测 解决方案 最近在做人脸识别,现在初步只做了人脸检测,比较简单,仅供参考. 功能是打开图片,进行人脸检测,输出人脸个数和检测范围. .......省略包 public class Staticdetection2Activity extends Activity { final private static String TAG = "Staticrecognition.

新人求助,基于opencv和qt的人脸检测中遇到的问题

问题描述 新人求助,基于opencv和qt的人脸检测中遇到的问题 刚刚开始学习这方面的内容,构建好编译环境,已经能调用摄像头拍照,但无法进行检测,该如何检测,谢谢! 解决方案 学习OpenCV--行人检测&人脸检测(总算运行出来了)

用浏览器做人脸检测,竟然这么简单?(附代码)

1.背景与场景 人脸检测(Face Detection)算是老生常谈的课题了,在诸多行业应用广泛,例如金融.安防.电子商务.智能手机.娱乐图片等行业.其中涉及的技术也在不断的演变,下面简要介绍几种思路: 基于特征的人脸检测 例如opencv中内置了基于Viola-Jones目标检测框架的Harr分类器,只需要载入一个配置文件(haarcascade_frontalface_alt.xml)就能直接调用detectObject去完成检测过程,同时也支持其他特征的检测(如鼻子.嘴巴等). 基于学习的