【问题标题】:Why are eye coordinates not detected with FaceDetectionListener for Android为什么使用 Android 的 FaceDetectionListener 未检测到眼睛坐标
【发布时间】:2017-07-27 03:01:31
【问题描述】:

我正在开发一个使用 FaceDetection API for Android 进行面部和眼睛检测的 Android 应用。我能够检测并在面部周围绘制矩形,但是我无法弄清楚为什么我的所有眼睛坐标都设置为(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,因为我已经可以检测到人脸(如果可能的话)。感谢您的帮助。

【问题讨论】:

    标签: java android face-detection


    【解决方案1】:

    并非所有设备都支持所有面部特征。

    正如 documentation 声明的 leftEye 和大多数其他字段:

    这是一个可选字段,可能并非所有设备都支持。如果不支持,该值将始终设置为 null。可选字段被支持为一组。它们要么都有效,要么都不有效。

    如果设备支持人脸检测,则保证仅包含 Face.rect 和 Face.score 字段。

    【讨论】:

    • “可能并非所有设备都支持”非常模糊。是否有任何类型的受支持设备列表?
    • 我不知道。 Camera2 API 有 developer.android.com/reference/android/hardware/camera2/… 的明确列表,但如果 camera2 硬件级别为 LIMITED 或更高,则仅映射到 Camera1;即使旧的相机 API 填充了可选字段,LEGACY 级别也永远不会列出 FACE_DETECT_MODE_FULL。
    猜你喜欢
    • 2012-08-27
    • 2019-04-20
    • 2011-09-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-20
    • 2011-05-02
    相关资源
    最近更新 更多