2

我正在使用https://github.com/googlesamples/android-Camera2Basic

我将人脸识别模式设置为 FULL。

´mPreviewRequestBuilder.set(CaptureRequest.STATISTICS_FACE_DETECT_MODE,

CameraMetadata.STATISTICS_FACE_DETECT_MODE_FULL);

我的捕获回调:

private CameraCaptureSession.CaptureCallback mCaptureCallback
= new CameraCaptureSession.CaptureCallback() {

private void process(CaptureResult result) {
            Integer mode = result.get(CaptureResult.STATISTICS_FACE_DETECT_MODE);
            Face [] faces = result.get(CaptureResult.STATISTICS_FACES);
            if(faces != null && mode != null)
                Log.e("tag", "faces : " + faces.length + " , mode : " + mode ); 
}

@Override
public void onCaptureProgressed(CameraCaptureSession session, CaptureRequest request,
                                CaptureResult partialResult) {
    process(partialResult);
}

@Override
public void onCaptureCompleted(CameraCaptureSession session, CaptureRequest request,
                               TotalCaptureResult result) {
    process(result);
}

Output: faces : 0 , mode : 2

人脸长度始终为 0。看起来它无法正确识别人脸,或者我错过了一些东西。

4

1 回答 1

3

您应该使用以下方法阅读设备可用的人脸检测模式:

CameraManager manager = (CameraManager) getSystemService(Context.CAMERA_SERVICE);
for (String cameraId : manager.getCameraIdList()) {
    CameraCharacteristics characteristics
                    = manager.getCameraCharacteristics(cameraId);
    int[] faceDetectModes = characteristics.get(CameraCharacteristics.STATISTICS_INFO_AVAILABLE_FACE_DETECT_MODES);
}

使用该 int 数组中具有最大值的索引,因为0mean STATISTICS_FACE_DETECT_MODE_OFF1meanSTATISTICS_FACE_DETECT_MODE_SIMPLE2is STATISTICS_FACE_DETECT_MODE_FULL

您的设备可能返回 0 或 1。如果是这样,“简单的面部检测”将只需要做,而不是“完整”。

如果这仍然没有帮助,请检查您使用的是前置摄像头还是后置摄像头,并尝试使用相反的摄像头(您提到的示例源代码非常简单地说明了如何实现这一点)。

于 2016-04-12T13:19:28.853 回答