• 概述
  • Android SDK 中的 FaceDetector 介绍
  • 人脸检测核心代码
  • FaceDetector性能
  • FaceDetector 的不足

概述

人脸检测是指从一副图片或者一帧视频中检测是否存在人脸。通过该技术手段可以判定有没有人脸出现在给定的图片中。注意它和人脸识别是有差异的,人脸检测解决的是照片中有没有人脸的问题,而人脸识别解决的是照片中的人脸是谁的问题。Android SDK 提供了人脸检测的接口,本篇博文介绍基于 Android SDK 实现人脸检测的方法。

Android SDK 中的 FaceDetector 介绍

Android SDK 中支持人脸检测,它提供了一个直接在位图上进行人脸检测的方法,这个 API 是android.media.FaceDetector,源文件路径是:
frameworks/base/media/java/android/media/FaceDetector.java
调用 findFaces 方法就可进行人脸检测,该方法返回检测到的人脸总数,并且会将每个”人脸”的信息保存在FaceDetector.Face 的数组中。每个 Face 都包含下面几点信息:

  • 该 Face 为人脸的可信度.取值范围是 0~1,大于 0.3 则表明可信度较高。
  • 双眼之间的距离
  • 双眼中点的 x,y 坐标
  • 脸部的欧拉角度,可用于判断抬头,侧脸的角度等。

识别流程是这样的:
1. 读取一张图片至 Bitmap,且该 Bitmap 必须是 565 格式。
2. 调用 findFaces 方法分析 Bitmap(注意待分析的 Bitmap 宽度必须是偶数),将探测到的人脸数据存储在一个FaceDetector.Face 数组中,并返回检测到的人脸总数。

人脸检测核心代码

  1. 读取一张图片至 Bitmap,且该 Bitmap 必须是 565 格式。
private Bitmap getBitmap(int resid) {BitmapFactory.Options bitmapOption = new BitmapFactory.Options();bitmapOption.inPreferredConfig = Bitmap.Config.RGB_565;Bitmap myBitmap = BitmapFactory.decodeResource(getResources(), resid,bitmapOption);return myBitmap;
}
  1. 调用 findFaces 方法分析 Bitmap
private int findFace(Bitmap bitmap){//保证 bitmap 的宽度为偶数if ((1 == (myBitmap.getWidth() % 2))) {myBitmap = Bitmap.createScaledBitmap(myBitmap,myBitmap.getWidth() + 1, myBitmap.getHeight(), false);}//设置最多检测多少个 Faceint maxFace = 2;FaceDetector mFaceDetector = new FaceDetector(bitmap.getWidth(),bitmap.getHeight(), maxFace);FaceDetector.Face[] mFace = new FaceDetector.Face[maxFace];// 实际检测到的脸数int faceCount = mFaceDetector.findFaces(bitmap, mFace);return faceCount;
}

FaceDetector性能

检测时间平均耗费2s 左右,下图是debug FaceDetector的时间戳信息。

FaceDetector 的不足

在人物面部显示不全,比如侧脸,或者部分衣帽遮挡脸部时,会导致检测结果不正确。比如下面这个美女侧脸图通过FaceDetector就没能检测出来。

android 人脸检测相关推荐

  1. android 人脸检测_Android人脸检测

    android 人脸检测 With the release of Google Play services 7.8, Google has brought in the Mobile Vision A ...

  2. 深度学习自学(六):Android人脸检测环境配置等相关问题

    Android人脸检测环境配置等相关问题 1.android studio 包查找不到 2.android studio 快捷键 搜索类的快捷键是Ctrl+N,搜索以后点击结果,可以跳到相应类的文件. ...

  3. android 人脸检测 对焦,Android API教程:人脸检测(上)

    通过两个主要的API,Android提供了一个直接在位图上进行脸部检测的方法,这两个API分别是    android.media.FaceDetector和android.media.FaceDet ...

  4. Android人脸检测方案汇总

    因为要用到Android本地相机人脸检测,检测到人脸再做进一步处理.这里只记录从相机中实时检测人脸功能.本文只是一个简单的汇总. 1. Android原生FaceDetectionListener 部 ...

  5. android人脸检测开发——使用GMV API(google mobile vision library)开发人脸检测功能

    授人以鱼不如授人以渔:建议看以下官网资料! 从一张图片中检测人脸及脸部器官的教程:https://developers.google.cn/vision/android/detect-faces-tu ...

  6. android 人脸检测 facedec,智能访客系统中的人脸检测及方向判别算法.pdf

    智能访客系统中的人脸检测及方向判别算法,人脸识别算法,人脸检测算法,opencv人脸识别算法,人脸识别算法有哪些,人脸识别pca算法,人脸比对算法,android人脸识别算法,adaboost人脸检测 ...

  7. Android人脸检测类FaceDetector

    根据文档描述,输入图片必须为Bitmap RGB565格式. 人脸的检测方法是用双眼来检测人脸的位置,也就是说无法检测到嘴.侧脸等,双眼必须同时可见,并且眼镜会影响检测的效果. 实际上,FaceDet ...

  8. android 人脸检测 姿态估计

    自带级联,有误检,能调用摄像头,返回opencv,很多函数没有 https://github.com/WangRain1/OpencvDemo 新的: https://github.com/mateu ...

  9. android 人脸检测代码,在Android实现人脸识别的详细过程

    照相时,在预览画面上提示用户人脸的位置,并完成自动对焦等,是个错的应用; 下面是实现细节 我们知道在android的代码中已有人脸识别的底层算法代码,而且在framework层也封了调用的API函数 ...

最新文章

  1. 线程同步——内核对象实现线程同步——等待函数
  2. linux下挂载iscsi存储设备,linux下挂载ISCSI存储设备
  3. java.lang.LinkageError: JAXB 2.0 API is being loaded from the bootstrap classloader, but this RI(xxx
  4. Expression Blend实例动画-大坝水位升高演示
  5. MyBatis之优化MyBatis配置文件中的配置
  6. linux shell脚本EOF妙用
  7. STM32F407+CubeMX-使用TIM计算编码器的脉冲总数,并计算脉冲方向
  8. linux开发板 杭州迈冲,杭州迈冲科技MC9G20-DK评估开发板
  9. Set与WeakSet
  10. 2017.3.19 约数个数和 失败总结
  11. vue.js环境部署
  12. fcntl.h里没有open_国际高中课程里的IB课程 你了解多少?
  13. Postman 安装
  14. 实战案例!使用 Python 进行 RFM 客户价值分析!
  15. 数据可视化之美:桑基图的前世今生
  16. 【BUUCTF】CTF_Crypto 密码学_Quoted-printable(引用可打印)
  17. 嵌入式睡眠监控报警仪的研究及设计
  18. 基于基础c语言的水仙花数编程方法
  19. STM32启动代码学习
  20. 构造器(也称构造方法)

热门文章

  1. 关于光遇BUG及其可能成因
  2. ssm+jsp计算机毕业设计银行绩效考核系统5542d(程序+lw+源码+远程部署)
  3. 恢复磁盘原始空间大小
  4. jQuery EasyUI 应用 - 创建展开行明细编辑表单的 CRUD 应用
  5. 连续体结构拓扑优化方法介绍
  6. CreateThread()函数使用
  7. IDEA提交本地项目至Gitee
  8. 计算机电子表格的相关试题,计算机电子表格试题含答案Excel
  9. .net 反射简单介绍
  10. VSTO:使用C#开发Excel、Word【5】