热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Android自带人脸识别

前言碰到项目需求要判断上传的图片里只能有一个人,就像到了人脸识别功能,网上查资料说需要用opencv等各种图像库,项目肯定不能接受,没想到Android很早就已经集成了人脸识别的功

前言

碰到项目需求要判断上传的图片里只能有一个人,就像到了人脸识别功能,网上查资料说需要用opencv等各种图像库,项目肯定不能接受,没想到Android很早就已经集成了人脸识别的功能,这里记录一下。

实现效果

《Android自带人脸识别》

实现接口

Android自带了一个FaceDetector人脸探测器,能够对加载到内存中的Bitmap图片做人脸识别,需要注意的是Bitmap加载的时候一定要指定使用Bitmap.Config.RGB_565的加载类型,其他的都不会有识别效果。

public class FaceDetectorImageView extends AppCompatImageView {
// 人脸监测对象
private FaceDetector faceDetector;
// 识别到的人脸
private FaceDetector.Face[] faces;
// 需要识别的图片
private Bitmap bitmap;
// 最多需要识别的人数
private int maxFaces = 10;
// 真正识别到的人数
private int realFaces = 0;
private Paint paint;
public FaceDetectorImageView(Context context) {
this(context, null);
}
public FaceDetectorImageView(Context context, @Nullable AttributeSet attrs) {
this(context, attrs, 0);
}
public FaceDetectorImageView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
init();
}
private void init() {
BitmapFactory.Options optiOns= new BitmapFactory.Options();
// 一定要设置,否则无法识别人脸
options.inPreferredCOnfig= Bitmap.Config.RGB_565;
bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.faces, options);
// 识别人脸数组定义
faces = new FaceDetector.Face[maxFaces];
faceDetector = new FaceDetector(bitmap.getWidth(), bitmap.getHeight(), maxFaces);
// 人脸识别器开始识别,速度还是比较快的,放在主线程也没什么问题
realFaces = faceDetector.findFaces(bitmap, faces);
// 初始化画笔工具
paint = new Paint();
paint.setStyle(Paint.Style.STROKE);
paint.setColor(getResources().getColor(R.color.colorAccent));
paint.setStrokeWidth(5);
setImageBitmap(bitmap);
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
// 在识别的每个人的眼睛位置画正方形
for (int i = 0; i FaceDetector.Face face = faces[i];
float distance = face.eyesDistance();
PointF mid = new PointF();
face.getMidPoint(mid);
canvas.drawRect(mid.x - distance / 2,
mid.y - distance / 2,
mid.x + distance / 2,
mid.y + distance / 2, paint);
}
}
}

以上就是全部的实现代码,非常简单,效果感觉还不错。


推荐阅读
author-avatar
ngzhaicai9672364
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有