在Android相机应用中进行人脸检测和距离测量的问题,可以使用Camera2 API实现。以下是一个简单的示例代码:
CameraManager manager = (CameraManager) getSystemService(Context.CAMERA_SERVICE); String cameraId = manager.getCameraIdList()[0];
manager.openCamera(cameraId, new CameraDevice.StateCallback() { @Override public void onOpened(CameraDevice camera) { mCameraDevice = camera; } @Override public void onDisconnected(CameraDevice camera) { camera.close(); mCameraDevice = null; } @Override public void onError(CameraDevice camera, int error) { camera.close(); mCameraDevice = null; } }, null);
mCameraDevice.createCaptureSession(Arrays.asList(surface), new CameraCaptureSession.StateCallback() { @Override public void onConfigured(CameraCaptureSession cameraCaptureSession) { if (mCameraDevice == null) { return; } mCaptureSession = cameraCaptureSession;
// 开始预览操作,可以创建一个CaptureRequest.Builder对象进行自定义设置
CaptureRequest.Builder previewBuilder = mCameraDevice.createCaptureRequest(CameraDevice.TEMPLATE_PREVIEW);
previewBuilder.set(CaptureRequest.CONTROL_AF_MODE, CaptureRequest.CONTROL_AF_MODE_CONTINUOUS_PICTURE);
//将会话与预览界面关联
previewBuilder.addTarget(surfaceHolder.getSurface());
// 开始预览
CaptureRequest previewRequest = previewBuilder.build();
mCaptureSession.setRepeatingRequest(previewRequest, null, null);
} }, null);
CameraCharacteristics characteristics = manager.getCameraCharacteristics(cameraId); int[] faceDetectModes = characteristics.get(CameraCharacteristics.STATISTICS_INFO_AVAILABLE_FACE_DETECT_MODES); int faceDetectMode = faceDetectModes[0]; int maxFaceCount = characteristics.get(CameraCharacteristics.STATISTICS_INFO_MAX_FACE_COUNT);
mCameraDevice.createCaptureSession(Arrays.asList(surface), new CameraCaptureSession.StateCallback() { @Override public void onConfigured(CameraCaptureSession cameraCaptureSession) { mCaptureSession = cameraCaptureSession; try { CaptureRequest.Builder builder = mCameraDevice.createCaptureRequest(CameraDevice.TEMPLATE_PREVIEW); builder.addTarget(surface);
// 设置人