CameraX |启用/禁用图像分析

问题描述 投票:0回答:1

我正在尝试使用CameraX和ZXing条形码扫描库实现条形码扫描器。

我已经编写了一个自定义的分析器来解码条形码,这些条形码应进行处理(处理逻辑显然需要一些时间)。

所以,我想立即禁用图像分析,如果处理操作的结果不成功,则再次启用它。

我的基本设置逻辑:

    private fun setupCamera() {
        processCameraProvider.unbindAll()
        val camera = processCameraProvider.bindToLifecycle(
            this,
            CameraSelector.DEFAULT_BACK_CAMERA,
            buildPreviewUseCase(),
            buildImageAnalysisUseCase())
    }

    private fun buildPreviewUseCase(): Preview {
        return Preview.Builder()
            .setTargetRotation(cameraPreview.display.rotation)
            .build()
            .apply {
                previewSurfaceProvider = cameraPreview.previewSurfaceProvider
            }
    }

    private fun buildImageAnalysisUseCase(): ImageAnalysis {
        return ImageAnalysis.Builder()
            .setTargetRotation(cameraPreview.display.rotation)
            .setBackpressureStrategy(ImageAnalysis.STRATEGY_KEEP_ONLY_LATEST)
            .build()
            .apply {
                setAnalyzer(Executors.newSingleThreadExecutor(),
                    ZxingBarcodeAnalyzer { qrResult ->
                        Handler(Looper.getMainLooper()).post {
                            viewModel.handleBarcode(qrResult.text)
                        }
                    })
            }
    }

在浏览了图书馆的资料之后,我仍然不知道如何实现所需的行为?

如果我在unbind(imageAnalysisUseCase object)上调用processCameraProvider,则无法再次绑定该对象(processCameraProvider仅具有bindToLifecycle()方法,而没有bind(imageAnalysisUseCase object))。

即使再次调用clearAnalyzer(),在ImageAnalysis上调用setAnalyzer()也会完全重置图像分析。

android android-camerax
1个回答
0
投票

clearAnalyzer()存在问题

我正在使用直到修复为止:

  fun enableAnalysis(enable: Boolean) {
    if (!enable) {
        isAnalyzerSet = false
        imageAnalysisUseCase?.clearAnalyzer()
        imageAnalysisUseCase.setAnalyzer(analysisExecutor, ImageAnalysis.Analyzer { })

    } else {
        if (isAnalyzerSet) return
        isAnalyzerSet = true
        imageAnalysisUseCase?.setAnalyzer(analysisExecutor, analyzer)
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.