我正在使用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.看起来它不能正确识别脸部或者我错过了某些东西。
答案 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_OFF
,1
表示STATISTICS_FACE_DETECT_MODE_SIMPLE
且2
表示{{1} }。
你的设备可能会返回0或1.如果是这样的话,“简单的人脸检测”只需要做,而不是“完整”。
如果仍然无效,请检查您是使用前置摄像头还是后置摄像头,并尝试使用相反的摄像头(您提到的示例源代码非常简单,如何实现)。