Android - 人脸特征检测

tsc*_*chi 14 android opencv computer-vision face-detection feature-detection

目前我正在开发适用于Android手机的应用.我们想要检测脸部的特征.该程序应该能够检测眼睛,鼻子,嘴巴和脸部边缘的位置.

准确性应该很好,但不一定要完美.可以放松一些准确性以加快速度.所有的面都是正面的,我们之前会知道这些特征的大致位置.我们不需要实时检测.应从保存的图像中提取要素.检测时间应该只要不影响用户体验.所以即使2或3秒也可以.

有了这个假设,找到一个能让我们实现这个目标的库不应该太难.但我的问题是,最好的方法是什么?你的建议是什么?这是我第一次为Android开发,我不想跑错方向.对我们来说这是一个好主意,还是我自己实现一些现有算法更好(更快/更高精度)?

我google了很多,我发现了很多有趣的东西.Android API中还有面部检测功能.但返回的face class(http://developer.android.com/reference/android/media/FaceDetector.Face.html)仅包含眼睛的位置.这对我们的应用来说更少.然后还有适用于Android或JavaCV的OpenCV.您认为合作的好主意是什么?对于哪个库有好的文档,教程?

Tof*_*mad 8

OpenCV有一个用于此目的的教程,不幸的是只有C++,所以你必须将它转换为Android.

您也可以在Android中尝试FaceDetection API,如果您从drawable或SD卡图像中检测图像,这是一个简单的示例.或者是最近使用相机图像的Camera.Face API.

如果您希望在动态时间从相机拍摄图像而不是第一次阅读如何从相机拍摄照片.,但我建议你查看官方的OpenCV Android样本并使用它们.

更新:

Mad Hatter示例使用Camera with SurfaceView的方法.它很有希望.看看Mad Hatter.

如果链接断开,相关代码是:

public class FaceDetectionListener implements Camera.FaceDetectionListener {
    @Override
    public final void onFaceDetection(Face[] faces, Camera camera) {
        if (faces.length > 0) {
            for (Face face : faces) {
                if (face != null) {
                    // do something
                }
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)