安卓相机2 API,限制对焦距离的最佳方法?



我正在尝试加快条形码扫描速度,这在Google的Vision API中很慢,因为自动对焦需要几秒钟。所以,我想尝试限制相机尝试自动对焦的距离,使其始终在几厘米以内,而不是从无限远拉动。

但是,我不确定如何实现这一点,因为 CaptureRequest 似乎没有任何设置最小/最大对焦距离的内容。如果我尝试在回调类 CameraStateWatcher 中设置距离,则没有任何反应,因为 AF 会覆盖它。

有没有地方我可以覆盖对焦距离值,例如在 CameraCaptureSession.CaptureCallback in onCaptureStarted 等?

我正在使用以下代码:

private class CameraCaptureWatcher extends CameraCaptureSession.CaptureCallback {
// POSSIBLE TO OVERRIDE THE FOCUS DISTANCE IN HERE TO SET MIN/MAX?
// oncapturestarted
// oncapturecompleted
}
private class CameraStateWatcher extends CameraDevice.StateCallback {
@Override
public void onOpened(@NonNull CameraDevice cameraDevice) {
TestCamera.this.cameraDevice = cameraDevice;
List<Surface> surfaces = new ArrayList<>();
surfaces.add(previewSurface);
surfaces.add(imageReader.getSurface());
try {
CaptureRequest.Builder captureRequestBuilder = cameraDevice.createCaptureRequest(CameraDevice.TEMPLATE_PREVIEW);
// POSSIBLE TO SET MIN/MAX FOCUS DISTANCE WITH REQUEST?
captureRequestBuilder.set(CaptureRequest.CONTROL_AF_MODE, CaptureRequest.CONTROL_AF_MODE_OFF);
for ( Surface surface : surfaces ) {
captureRequestBuilder.addTarget(surface);
}
captureRequest = captureRequestBuilder.build();
for ( CaptureRequest.Key<?> key : captureRequest.getKeys() ) {
Log.d("STATE_WATCHER", "Request Key = " + key.getName());
}
cameraDevice.createCaptureSession(surfaces, cameraSurfaceWatcher, handler);
} catch (CameraAccessException e) {
e.printStackTrace();
}
}
}
}

API 对此的唯一控制是选择宏自动对焦模式,并非所有设备都支持该模式。

您的示例代码似乎没有使用自动对焦;您尝试过使用哪种自动对焦模式?对于大多数用例,如果设备支持,我们通常建议使用CONTINUOUS_FOCUS_PICTURE。

最新更新