• 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

  • 相关阅读:
    MySQL 分组
    MySQL LIKE 子句
    MySQL DELETE 语句
    MySQL UPDATE 查询
    MySQL where 子句
    MySQL 插入数据
    MySQL 查询数据
    MySQL 删除数据表
    MySQL 创建数据表
    MySQL 数据类型
  • 原文地址:https://www.cnblogs.com/feisky/p/1824320.html
Copyright © 2020-2023  润新知