开发者社区> 文艺小青年> 正文

Android人脸检测类FaceDetector

简介:
+关注继续查看

根据文档描述,输入图片必须为Bitmap RGB565格式。

 

人脸的检测方法是用双眼来检测人脸的位置,也就是说无法检测到嘴、侧脸等,双眼必须同时可见,并且眼镜会影响检测的效果。

 

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

 

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

 

检测到的人脸存放到FaceDetector.Face类中,该类无法再扩展。从该类可以获取到人眼的中心位置和双眼之间的具体。

 

 

package name.feisky.face;

 

import android.app.Activity;

import android.content.Context;

import android.graphics.Bitmap;

import android.graphics.BitmapFactory;

import android.graphics.Canvas;

import android.graphics.Color;

import android.graphics.Paint;

import android.graphics.PointF;

import android.media.FaceDetector;

import android.media.FaceDetector.Face;

import android.os.Bundle;

import android.view.View;

 

public class AndroidFaceDetector extends Activity {

    /** Called when the activity is first created. */

    @Override

    public void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(new myView(this));

    }

 

    private class myView extends View{

 

        private int imageWidthimageHeight;

        private int numberOfFace = 5;

        private FaceDetector myFaceDetect;

        private FaceDetector.Face[] myFace;

        float myEyesDistance;

        int numberOfFaceDetected;

 

        Bitmap myBitmap;

 

        public myView(Context context) {

            super(context);

            BitmapFactory.Options BitmapFactoryOptionsbfo = new BitmapFactory.Options();

            BitmapFactoryOptionsbfo.inPreferredConfig = Bitmap.Config.RGB_565;

            myBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.pp, BitmapFactoryOptionsbfo);

            imageWidth = myBitmap.getWidth();

            imageHeight = myBitmap.getHeight();

            myFace = new FaceDetector.Face[numberOfFace];

            myFaceDetect = new FaceDetector(imageWidthimageHeightnumberOfFace);

            numberOfFaceDetected = myFaceDetect.findFaces(myBitmapmyFace);

        }

 

        protected void onDraw(Canvas canvas) {

            // TODO Auto-generated method stub

 

            canvas.drawBitmap(myBitmap, 0, 0, null);

 

            Paint myPaint = new Paint();

            myPaint.setColor(Color.GREEN);

            myPaint.setStyle(Paint.Style.STROKE);

            myPaint.setStrokeWidth(3);

 

            for(int i=0; i < numberOfFaceDetected; i++)

            {

                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);

            }

        }

    }

}

 

本文转自feisky博客园博客,原文链接:http://www.cnblogs.com/feisky/archive/2010/09/12/1824320.html,如需转载请自行联系原作者


版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
Android C++系列:JNI调用 Java 类的构造方法和父类的方法
Android JNI开发时经常遇到C/C++层访问Java层对象的,比如C/C++层创建一个String返回,或者访问Java层提供的MediaCodec等,此时我们就需要通过 JNI 来调用 Java 一个类的构造方法来创建这个 Java 类。
26 0
Android——实现人脸支付
功能实现 人脸支付 API初始化 人脸特征提取 返回支付结果 密码框输入支付 自定义密码输入框控件 初始化控件 密码匹配 尾言 效果展
182 0
Android Studio 升级3.2之后找不到moudle中的类?
Android Studio 升级3.2之后找不到moudle中的类?
74 0
关于安卓File类,调用list(),listFile()方法时,崩溃问题
安卓File类,调用list(),listFile()方法时,崩溃问题
106 0
Android Studio运行报错:无法访问XXX......请删除该文件或确保该文件位于正确的类路径子目录中
今天运行一个项目发现运行不起来了,报错 错误: 无法访问XXX 错误的类文件: C:\Users\xxx\.gradle\caches\transforms-2\files-2.1\xxx\xxx(xxx/xxx/xxx.class) 错误的 RuntimeInvisibleParameterAnnotations 属性: xxxx 请删除该文件或确保该文件位于正确的类路径子目录中。
344 0
【Android 逆向】启动 DEX 字节码中的 Activity 组件 ( 替换 LoadedApk 中的类加载器 | 加载 DEX 文件中的 Activity 类并启动成功 )(二)
【Android 逆向】启动 DEX 字节码中的 Activity 组件 ( 替换 LoadedApk 中的类加载器 | 加载 DEX 文件中的 Activity 类并启动成功 )(二)
123 0
【Android 逆向】启动 DEX 字节码中的 Activity 组件 ( 替换 LoadedApk 中的类加载器 | 加载 DEX 文件中的 Activity 类并启动成功 )(一)
【Android 逆向】启动 DEX 字节码中的 Activity 组件 ( 替换 LoadedApk 中的类加载器 | 加载 DEX 文件中的 Activity 类并启动成功 )(一)
96 0
【Android 逆向】启动 DEX 字节码中的 Activity 组件 ( 使用 DexClassLoader 获取组件类失败 | 失败原因分析 | 自定义类加载器没有加载组件类的权限 )
【Android 逆向】启动 DEX 字节码中的 Activity 组件 ( 使用 DexClassLoader 获取组件类失败 | 失败原因分析 | 自定义类加载器没有加载组件类的权限 )
205 0
【Android 逆向】类加载器 ClassLoader ( 加载 Android 组件的类加载器 | 双亲委派机制实例分析 )
【Android 逆向】类加载器 ClassLoader ( 加载 Android 组件的类加载器 | 双亲委派机制实例分析 )
134 0
+关注
文艺小青年
文章
问答
视频
文章排行榜
最热
最新
相关电子书
更多
蚂蚁聚宝Android秒级编译——Freeline
立即下载
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
相关镜像