Android中的人脸检测?

我目前正在研究一个实验性的相机应用程序。 目前我正在考虑实施人脸检测,目前正在权衡我的select。

我已经考虑了Android的OpenCV端口和使用他们的脸部检测function,但从我看到的以前的实现演示,相机似乎滞后了很多。

考虑到HTC Desire上的相机具有人脸检测支持,我知道必须有可能获得至less一个半像素的人脸检测系统。 我只是想知道如果有人对我如何能得到最好的结果有意见…使用可用的库? 自己实现一个特定的algorithm?

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

    这是一个使用FaceDetector和OpenGL(绘制矩形)的实时人脸检测示例 ,它在Android 2.2中运行。

  2. Android中的OpenCV

    你最好在Linux上试试这个(我在Windows上试过,但是失败了)。

  3. JavaCV (强烈推荐)

    有一个使用相机实时人脸检测的示例代码。 请参阅下载页面上的“javacv-src – *。zip”。

Android SDK附带了一个FaceDetector ,可用于在给定的位图中查找人脸 。

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

这是一个使用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); } } 

在这里输入图像描述

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