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

时间:2016-03-17 04:38:19

标签: android android-5.1.1-lollipop android-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.看起来它不能正确识别脸部或者我错过了某些东西。

1 个答案:

答案 0 :(得分:2)

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

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_SIMPLE2表示{{1} }。

你的设备可能会返回0或1.如果是这样的话,“简单的人脸检测”只需要做,而不是“完整”。

如果仍然无效,请检查您是使用前置摄像头还是后置摄像头,并尝试使用相反的摄像头(您提到的示例源代码非常简单,如何实现)。