2017-03-07 54 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。 –