返回顶部
首页 > 资讯 > 精选 >详解android 人脸检测你一定会遇到的坑
  • 309
分享到

详解android 人脸检测你一定会遇到的坑

android人脸检测 2023-05-30 17:05:43 309人浏览 安东尼
摘要

笔者今年做了一个和人脸有关的Android产品,主要是获取摄像头返回的预览数据流,判断该数据流是否包含了人脸,有人脸时显示摄像头预览框,无人脸时摄像头预览框隐藏,看上去这个功能并不复杂,其实在开发过程中,遇到的问题也不多,全部都处理了,在正

笔者今年做了一个和人脸有关的Android产品,主要是获取摄像头返回的预览数据流,判断该数据流是否包含了人脸,有人脸时显示摄像头预览框,无人脸时摄像头预览框隐藏,看上去这个功能并不复杂,其实在开发过程中,遇到的问题也不多,全部都处理了,在正式推出前,这个产品在公司内部也测试了几个月,也没发现bug,但最近实施人员,在客户公司做实施时,反馈回来各种问题,这些问题有部分是程序bug,也有一部分是和硬件有关,因为测试环境有限,笔者无法对各种型号,各个厂家的硬件进行测试,这篇文章主要是记录,摄像头给我们带来的一些坑,分享给涉及到人脸开发的朋友,让大家少走弯路。

一:概述

Android SDK 中支持人脸检测,它提供了一个直接在位图上进行人脸检测的方法,这个 api 是android.media.FaceDetector,源文件路径是:

frameworks/base/media/java/android/media/FaceDetector.java

调用 findFaces 方法就可进行人脸检测,该方法返回检测到的人脸总数,并且会将每个”人脸”的信息保存在FaceDetector.Face 的数组中。每个 Face 都包含下面几点信息:

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

识别流程是这样的:

读取一张图片至 Bitmap,且该 Bitmap 必须是 565 格式。

调用 findFaces 方法分析 Bitmap(注意待分析的 Bitmap 宽度必须是偶数),将探测到的人脸数据存储在一个FaceDetector.Face 数组中,并返回检测到的人脸总数。Android SDK 中的 FaceDetector 介绍

android有原生的api做人脸检测,通过android.media.FaceDetector来检测bitmap是否包含人脸,android.media.FaceDetector.Face来检测人脸位置信息,我们需要在activity中实现Carema.PreviewCallBack接口,该接口有一个onPreviewFrame方法,这个方法返回摄像头实时图像的数据流,由于这个方法返回的数据流时nv21格式,我们需要转换bitmap才能进行人脸检测,转换过程如下:byte[] --> YuvImage --> ByteArrayOutputStream --> byte[] -->  bitmap ,具体转换的代码如下:

Camera.Size size = mtCamera.getParameters().getPreviewSize();YuvImage yuvImage = new YuvImage(mData, ImageFORMat.NV21, size.width, size.height, null);yuvImage.compressToJpeg(new Rect(0, 0, size.width, size.height), 100, mBitmapOutput);options.inPreferredConfig = Bitmap.Config.RGB_565;bitmap = BitmapFactory.decodeByteArray(mBitmapOutput.toByteArray(), 0, mBitmapOutput.toByteArray().length, options);mBitmapOutput.reset();bitmap = Bitmap.createBitmap(bitmap, 0, 0, bitmap.getWidth(), bitmap.getHeight(), mMatrix, false);

--结束END--

本文标题: 详解android 人脸检测你一定会遇到的坑

本文链接: https://lsjlt.com/news/220057.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作