2010-11-08 120 views
27

我目前正在研究一款实验性相机应用程序。我正在考虑实施人脸检测,目前我正在权衡我的选择。Android中的人脸检测?

我已经考虑过可用于Android的OpenCV端口并使用它们的人脸检测功能,但是从我之前实现过的演示中,相机似乎滞后了很多。

考虑到HTC Desire上的相机具有人脸检测支持,我知道必须有可能获得至少一个半正派的人脸检测系统。我只是想知道是否有人对我如何获得最佳结果有意见......使用可用的库?自己实现一个特定的算法?

回答

6

Android SDK自带FaceDetector,可用于指定位图中的find faces

我自己并没有使用它,但面部失真应用程序的开发人员表示,与OpenCV相比,它不是很准确。它可能适合您的需求,但它可能是HTC Desire的相机应用程序使用的。

+0

你也必须运行的能力英特尔性能库在HTC上?如果是的话,我认为OpenCV可以与IPP结合,提供非常可观的性能收益。 – Denis 2010-11-09 02:23:59

11
  1. 在Android SDK中尝试FaceDetector。它返回BMP中的脸部位置和角度。但速度不是很快。

    下面是使用FaceDetector和OpenGL(绘制矩形)的realtime face detection sample,它适用于Android 2.2。

  2. OpenCV in Android

    你最好试试这个在Linux(我试过在Windows上,但没有成功)。

  3. JavaCV(强烈推荐)

    有使用相机实时面部检测的样本代码。请参阅下载页面上的“javacv-src - *。zip”。

+0

您的http://opencv.willowgarage.com/wiki/Android已损坏 – eeadev 2015-07-28 13:55:22

+1

您也可以尝试新的Android Face API(请注意,这与上面提到的FaceDetector类不同)。请参阅:https://developers.google.com/vision/ – pm0733464 2015-08-21 18:33:38

3

这是使用一个基本的例子FaceDetector

public myView(Context context) { 
     super(context); 
     BitmapFactory.Options BitmapFactoryOptionsbfo = new BitmapFactory.Options(); 
     BitmapFactoryOptionsbfo.inPreferredConfig = Bitmap.Config.RGB_565; 
     myBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.threepoint_shooters_1990, BitmapFactoryOptionsbfo); 
     imageWidth = myBitmap.getWidth(); 
     imageHeight = myBitmap.getHeight(); 
     myFace = new FaceDetector.Face[numberOfFace]; 
     myFaceDetect = new FaceDetector(imageWidth, imageHeight, numberOfFace); 
     numberOfFaceDetected = myFaceDetect.findFaces(myBitmap, myFace); 
    } 

    @Override 
    protected void onDraw(Canvas canvas) { 
     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 * 2), 
        (int) (myMidPoint.y - myEyesDistance * 2), 
        (int) (myMidPoint.x + myEyesDistance * 2), 
        (int) (myMidPoint.y + myEyesDistance * 2), myPaint); 
     } 
    } 

enter image description here

这里下载完整的源代码: https://github.com/Jorgesys/Android_Face_Detection