为什么FaceDetectionListener for Android未检测到眼睛坐标

时间:2017-03-07 02:45:16

标签: java android face-detection

我正在开发一款Android应用程序,可以使用适用于Android的FaceDetection API进行面部和眼睛检测。我能够在脸部周围检测和绘制矩形但是我无法弄清楚为什么我的所有眼睛坐标都被设置为(0,0)。

读这个 documentation,我发现所有设备都不支持眼睛检测,但是它说Point对象设置为null,而不是(0,0)所以我不明白这里发生了什么。

这是我的FaceDetectionListener:

private List<Rect> faceRects;
private Point leftEye;
private Point rightEye;

@Override
public void onFaceDetection(Camera.Face[] faces, Camera camera) {
    if (faces.length > 0) {
        faceRects = new ArrayList<Rect>();

        for (int i = 0; i < faces.length; i++) {
            int left = faces[i].rect.left;
            int right = faces[i].rect.right;
            int top = faces[i].rect.top;
            int bottom = faces[i].rect.bottom;
            Rect uRect = new Rect(left, top, right, bottom);
            faceRects.add(uRect);

            leftEye = faces[i].leftEye; //***THIS IS (0,0) EVEN WHEN FACE IS DETECTED
            rightEye = faces[i].rightEye;
        }
    }
}

为什么我的眼睛坐标点设置为(0,0)。我在Galaxy S7上测试,我发现它很难相信它不支持眼睛检测。我也很乐意使用OpenCV来解决这个问题,但我还是坚持使用Android SDK,因为我已经可以检测到面部(如果可能的话)。谢谢你的帮助。

1 个答案:

答案 0 :(得分:1)

并非所有设备都支持所有脸部功能。

由于leftEye和大多数其他字段的documentation状态:

  

这是一个可选字段,可能并非所有设备都支持。如果不受支持,则该值将始终设置为null。可选字段作为一个集支持。它们都是有效的,或者都不是。

如果设备支持面部检测,则只保证包含Face.rect和Face.score字段。