Android自带人脸识别
16lz
2021-01-24
前言
碰到项目需求要判断上传的图片里只能有一个人,就像到了人脸识别功能,网上查资料说需要用opencv等各种图像库,项目肯定不能接受,没想到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 < realFaces; 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); } }}
以上就是全部的实现代码,非常简单,效果感觉还不错。
更多相关文章
- Android(安卓)textView drawableXX图片大小
- android 拍照和从相册选择组件
- android WebView 预览office文档
- Android(安卓)ApiDemos示例解析(3): App->Activity->Animation
- afinallogoAndroid的快速开…
- android 下载图片及时显示
- android 按照字母的顺序排序
- Android相册及小小秒表震动(17)
- 动态加载Dex的原理