2017-03-07 57 views
0

我正在使用面向Android的FaceDetection API进行脸部和眼部检测。我能够检测和绘制矩形周围的脸部,但是我不明白为什么我所有的眼睛坐标都设置为(0,0)。我看到所有设备都不支持眼睛检测,但它说Point对象设置为null,而不是(0,0),所以我不明白这里发生了什么事情。 。为什么我的FaceDetectionListener无法检测到眼睛坐标

这里是我的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

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

至于左眼的documentation状态和大多数其他领域:

这是一个可选字段,可能不会在所有设备上的支持。如果不支持,该值将始终设置为空。可选字段作为一个集合支持。它们都是有效的,或者它们都不是。

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

+0

“可能不支持所有设备”非常含糊。是否有任何支持的设备列表? – LaneL

+1

不是我所知道的。 Camera2 API具有https://developer.android.com/reference/android/hardware/camera2/CameraCharacteristics.html#STATISTICS_INFO_AVAILABLE_FACE_DETECT_MODES的明确列表,但只有当camera2硬件级别为限制或更高时才会映射到Camera1;即使旧相机API具有填充的可选字段,LEGACY级别也不会列出FACE_DETECT_MODE_FULL。 –