使用 android.hardware.Camera2 进行人脸检测

Face detection with android.hardware.Camera2

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

我把人脸识别模式设置为FULL

´mPreviewRequestBuilder.set(CaptureRequest.STATISTICS_FACE_DETECT_MODE,

CameraMetadata.STATISTICS_FACE_DETECT_MODE_FULL);

我的 CaptureCallback:

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。看起来它没有正确识别人脸,或者我遗漏了什么。

您应该阅读设备可用的面部检测模式,方法是:

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 数组中具有最大值的索引,因为 0 表示 STATISTICS_FACE_DETECT_MODE_OFF1 表示 STATISTICS_FACE_DETECT_MODE_SIMPLE2STATISTICS_FACE_DETECT_MODE_FULL.

您的设备可能返回 0 或 1。如果是这种情况,"simple face detection" 将只需要这样做,而不是 "full"。

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