android 用原生的人脸检测 检测图片

public class MyFaceView extends View {
    private int imageWidth, imageHeight;
    private int numberOfFace = 6 ;       //最大检测的人脸数
    private FaceDetector myFaceDetect;  //人脸识别类的实例
    private FaceDetector.Face[] myFace; //存储多张人脸的数组变量
    float myEyesDistance;           //两眼之间的距离
    int numberOfFaceDetected;       //实际检测到的人脸数
    Bitmap myBitmap;

    public MyFaceView(Context context , @Nullable AttributeSet attrs){     //view类的构造函数,必须有
        super(context,attrs);
        BitmapFactory.Options BitmapFactoryOptionsbfo = new BitmapFactory.Options(); 
        BitmapFactoryOptionsbfo.inPreferredConfig = Bitmap.Config.RGB_565;  //构造位图生成的参数,必须为565。类名+enum
        myBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.timg2, BitmapFactoryOptionsbfo);
        imageWidth = myBitmap.getWidth();
        imageHeight = myBitmap.getHeight();
        myFace = new FaceDetector.Face[numberOfFace];       //分配人脸数组空间
        myFaceDetect = new FaceDetector(imageWidth, imageHeight, numberOfFace);
        numberOfFaceDetected = myFaceDetect.findFaces(myBitmap, myFace);    //FaceDetector 构造实例并解析人脸
        Log.i("APP","numberOfFaceDetected is " + numberOfFaceDetected);
    }

    protected void onDraw(Canvas canvas){           //override函数,必有

     canvas.drawBitmap(myBitmap, 0, 0, null);    //画出位图
        Paint myPaint = new Paint();
        myPaint.setColor(Color.GREEN);
        myPaint.setStyle(Paint.Style.STROKE);
        myPaint.setStrokeWidth(3);          //设置位图上paint操作的参数

        for(int i=0; i < numberOfFaceDetected; i++){
            FaceDetector.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);
        }
    }
   }
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值