CameraX API是否支持同时添加多个ImageAnalysis.Analyzer实例
CameraX 多图像分析器使用问题解答
官方CameraX架构设计中,单个
ImageAnalysis用例同一时间仅支持关联一个Analyzer实例,无法直接同时添加多个分析器来执行目标检测和条码识别并行任务。
以下是两种常见的可行实现方案:
方案1:代理分析器分发
自定义一个中转Analyzer实现类,内部同时持有Object Detector和Barcode Detector实例。在analyze()方法回调获取到ImageProxy帧数据后,分别分发给两个检测器处理。需要注意合理管理图像引用计数,避免帧提前释放,两个检测器都处理完成后再统一调用imageProxy.close()。
参考实现代码:// 自定义多任务代理分析器 val combinedAnalyzer = ImageAnalysis.Analyzer { imageProxy -> // 分发给条码检测器 barcodeDetector.process(imageProxy) // 分发给目标检测器 objectDetector.process(imageProxy) // 所有检测任务执行完成后关闭图像 imageProxy.close() } // 绑定分析器到ImageAnalysis用例 val imageAnalysis = ImageAnalysis.Builder() .setBackpressureStrategy(ImageAnalysis.STRATEGY_KEEP_ONLY_LATEST) .build() .also { it.setAnalyzer(cameraExecutor, combinedAnalyzer) }该方案实现简单,算力开销较低,适合两个检测器对图像参数要求一致的场景。
方案2:绑定多个独立ImageAnalysis用例
从CameraX 1.2.0版本开始,支持将多个独立的ImageAnalysis用例同时绑定到同一个相机实例,每个ImageAnalysis可以单独配置分辨率、背压策略,绑定各自的Analyzer实例,互不干扰。
注意该方案会额外增加设备算力消耗,低端机型可能出现帧率下降、卡顿问题,建议做机型适配降级处理。
内容的提问来源于stack exchange,提问作者Geraldo Neto
相关产品推荐
相关产品推荐

