【问题标题】:Face Detection in Android?Android中的人脸检测?
【发布时间】:2011-05-06 18:21:35
【问题描述】:

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

我考虑过可用于 Android 的 OpenCV 端口并使用他们的面部检测功能,但从我看到的以前实现的演示中,相机似乎滞后很多。

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

【问题讨论】:

    标签: android opencv camera face-recognition


    【解决方案1】:
    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”。

    【讨论】:

    • 您也可以尝试新的 Android Face API(请注意,这与上面提到的 FaceDetector 类不同)。见:developers.google.com/vision
    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

      Android SDK 带有一个FaceDetector,可用于给定位图中的find faces

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

      【讨论】:

      • 您是否也有能力在 HTC 上运行英特尔性能库?如果是的话,我认为 OpenCV 可以与 IPP 相结合,以提供令人印象深刻的性能提升。
      猜你喜欢
      • 2013-09-24
      • 2012-05-06
      • 1970-01-01
      • 2019-02-27
      • 2011-10-26
      • 2012-03-23
      • 2016-11-18
      • 2012-04-17
      相关资源
      最近更新 更多