java - Android Camera2 API,限制焦距的最佳方法?

标签 java android android-camera2

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

但是,我不确定如何实现这一点,因为 CaptureRequest 似乎没有任何设置最小/最大焦距的功能。如果我尝试在回调类 CameraStateWatcher 中设置距离,则不会发生任何事情,因为 AF 只是覆盖了它。

是否有地方可以覆盖焦距值,例如 onCaptureStarted 期间的 CameraCaptureSession.CaptureCallback 等?

我正在使用以下代码:

    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。

关于java - Android Camera2 API,限制焦距的最佳方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60066599/

相关文章:

android - 前置摄像头 - 保存前正确镜像和旋转

java - 如何对 "toString()"GWT EntityProxy derivatives进行日志记录和调试?

java - 如何在Java Web Services中实现单向操作?

java - 如何从 EditText 返回一个 int? (安卓)

java - 从多个不同类型的用户输入创建一个数组

Android list 合并默默添加权限

java - 什么是 Matrix.frustumM(mProjMatrix, 0, -ratio, ratio, -1, 1, 3, 7);在 OpenGL ES 20 中?

android - Gradle -使用口味

java - 使用Camera2 API设置相机变焦

java - JNI YUV_420_888 到 RGBA_8888 的转换