zoukankan      html  css  js  c++  java
  • 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 imageWidth, imageHeight;

            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(imageWidth, imageHeight, numberOfFace);

                numberOfFaceDetected = myFaceDetect.findFaces(myBitmap, myFace);

            }

     

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

                }

            }

        }

    }

     

     

    参考:http://www.anddev.org/quick_and_easy_facedetector_demo-t3856.html

  • 相关阅读:
    python第十一天
    python第七天(字符编码,字符与字节,文件操作)
    python第六天(元组、字典、集合)
    python第五天
    python第四天
    根据数据库文件,查找对应的数据库
    Windows 路径问题
    32位及64位操作系统的程序问题
    好玩的获取目录信息的例子[C#]
    C# 反射相关的东西
  • 原文地址:https://www.cnblogs.com/feisky/p/1824320.html
Copyright © 2011-2022 走看看