安卓人脸检测之FaceDetector

news/2024/11/20 7:22:20/

最近看到一个APP的头像上传时,如果你设置的图片里面没有人脸,或者有两张以及以上人脸的时候,会提示你图片不符合规范,让你重新设置,这样是为了确保用户的头像是人!

    然后我就在网上查看了一下资料,发现谷歌原生Android里面提供了API,那就是我们今天要介绍的FaceDetector,下面我来给大家介绍一下:


FaceDetector检测到的并不是人的全脸,而只是双眼。

实际测试中,发现图片太小的话检测不到人脸,试验中使用小于100x100的图片检测不到人脸,但是由于Android内存有限,图片太大的话,会出现无法加载图片的异常。图片的格式必须为Bitmap RGB565格式。

文档  findFaces(Bitmap bitmap, Face[] faces)方法中有说明。

方法有

float confidence() ;可信度(0-1)


  float eyesDistance(); 双眼的距离


   void getMidPoint(PointF point);设置双眼的中点


   float pose(int euler); 眼睛的pose,传入的为欧拉轴检索的角度。

下面我们可以来写一个例子:

public class FaceView extends ImageView {public static final String TAG = "FaceView";public FaceView(Context context) {super(context);init();}public FaceView(Context context, AttributeSet attrs) {super(context, attrs);init();}private int imageWidth, imageHeight;private int numberOfFace = 6;       //最大检测的人脸数private FaceDetector myFaceDetect;  //人脸识别类的实例private FaceDetector.Face[] myFace; //存储多张人脸的数组变量float myEyesDistance;           //两眼之间的距离int numberOfFaceDetected;       //实际检测到的人脸数Bitmap myBitmap;private void init() {BitmapFactory.Options BitmapFactoryOptionsbfo = new BitmapFactory.Options();BitmapFactoryOptionsbfo.inPreferredConfig = Bitmap.Config.RGB_565;  //构造位图生成的参数,必须为565。类名+enummyBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.icon, BitmapFactoryOptionsbfo);imageWidth = myBitmap.getWidth();imageHeight = myBitmap.getHeight();myFace = new FaceDetector.Face[numberOfFace];       //分配人脸数组空间myFaceDetect = new FaceDetector(imageWidth, imageHeight, numberOfFace);numberOfFaceDetected = myFaceDetect.findFaces(myBitmap, myFace);    //FaceDetector 构造实例并解析人脸Log.i("lixuce", "numberOfFaceDetected is " + numberOfFaceDetected);}/*** 对每个人脸进行画框*/@Overrideprotected void onDraw(Canvas canvas) {canvas.drawBitmap(myBitmap, 0, 0, null);    //画出位图Paint myPaint = new Paint();myPaint.setColor(Color.GREEN);myPaint.setStyle(Paint.Style.STROKE);myPaint.setStrokeWidth(3);          //设置位图上paint操作的参数for (int i = 0; i < numberOfFaceDetected; i++) {FaceDetector.Face face = myFace[i];PointF myMidPoint = new PointF();face.getMidPoint(myMidPoint);myEyesDistance = face.eyesDistance();   //得到人脸中心点和眼间距离参数,并对每个人脸进行画框canvas.drawRect(            //矩形框的位置参数(int) (myMidPoint.x - myEyesDistance),(int) (myMidPoint.y - myEyesDistance),(int) (myMidPoint.x + myEyesDistance),(int) (myMidPoint.y + myEyesDistance),myPaint);}}
}

然后将这这个控件放入到xml文件里面就可以了,这样就可以识别出你提供的照片里面有多少张脸了,下面给大家看一下效果图:

 

是不是觉得很神奇,大家一定要记得,你获取图片的bitmap的时候解码方式一定要用565,否则可能会闪退,或者检测不出来,好了就介绍到这里了,感兴趣的小伙伴赶紧去试一试吧!

 

 

 

上面是我的微信公共号 每天都会给大家分享最新的知识点,欢迎大家的加入

 


http://www.ppmy.cn/news/836846.html

相关文章

人脸识别(识别程序)

系列文章目录 人脸采集 数据训练 代码思路 一、pandas是什么&#xff1f; 示例&#xff1a;pandas 是基于NumPy 的一种工具&#xff0c;该工具是为了解决数据分析任务而创建的。 二、使用步骤 1.引入代码库 import cv2获取人脸识别对象 # 获取人脸识别对象 recognizer …

基于android的人脸识别

把照片分成黑白两种颜色。。。然后扣掉白色的部分。。。 然后判断眼睛是否对称、鼻子是否是一个竖线、口是否眼色有变化 openCV javaCV cn.faceplusplus.com 清华做的人脸识别的网站 package com.njupt.facedetector1;import android.graphics.Bitmap; import android.…

Android使用Face++架构包实现人脸识别

欢迎转载&#xff0c;转载时请标明出处&#xff1a;http://blog.csdn.net/android_for_james/article/details/51016170 今天给大家带来一个通过使用Face来实现人脸识别的功能 我们先去这个Face官网看看&#xff1a;http://www.faceplusplus.com.cn 我们点开案例可以看到众多…

Android 原生的人脸识别Camera+FaceDetector示例

人脸识别google有自带api&#xff0c;Androoid 原生的人脸识别是利用相机的摄像功能和android.media.FaceDetector这个类来实现的 1、android.hardware.camera 1.1 简介 Camera 类用于设置图像捕获设置、开始/停止预览、抓拍图片和检索帧以进行视频编码 Camera的源码 1.2 人…

Android 集成Face++ 人脸识别(3.0+SDK)

写在前面 最近项目需求需要输入用户真实姓名 身份证号 再去调用人脸识别 效验是否是本人 所以就首先关注了Face(旷视)的人脸识别,听说是 正确率很高.....所以就集成了. 1.首先去官网去创建应用(其实听说创建应用是比较麻烦的) 创建好应用以后需要上传你项目的包名 2.下载Demo D…

Android集成百度人脸识别(一)基础版SDK

首先Android Studio版本&#xff1a;3.2.0 1、注册百度账号并企业认证 2、创建应用生成API Key和Secret Key 3、下载对应的SDK&#xff08;下载SDK的时候需要新建授权&#xff09; 因为下载的时候需要选择授权文件&#xff08;授权文件包含包名和签名文件的MD5&#xff09; 如…

Android人脸与指纹识别

基础人脸识别模块 添加依赖 请添加基本依赖&#xff0c;不要添加 ktx 版本的依赖&#xff0c;因为他需要 API33 及以上才可以使用&#xff01; implementation androidx.biometric:biometric:1.1.0 人脸识别工具类 package com.zhiyiyi.bio.bioimport android.content.Conte…

Android人脸识别(已开源)

Android人脸识别&#xff08;已开源&#xff09; 见链接