探索 CameraX 音视频相机技术(8):MLKit 分析器

这个系列文章我们来介绍一位海外工程师如何探索 CameraX 音视频相机技术,对于想要开始学习音视频技术的朋友,这些文章是份不错的入门资料,这是第 8 篇:CameraX MLKit 分析器。

—— 来自公众号关键帧Keyframe的分享

谷歌的 ML Kit 提供了设备端机器学习视觉 API,用于检测人脸、扫描二维码、标记图像等。ML Kit Analyzer 使将 ML Kit 与你的 CameraX 应用集成变得更容易。

ML Kit Analyzer 是 ImageAnalysis.Analyzer 接口的实现。它根据需要覆盖默认的目标分辨率以优化 ML Kit 使用,处理坐标变换,并将帧传递给 ML Kit,后者返回聚合的分析结果。

实现 ML Kit Analyzer

为了实现 ML Kit Analyzer,我们建议使用 CameraController 类,它与 PreviewView 配合显示 UI 元素。当使用 CameraController 实现时,ML Kit Analyzer 会为你处理原始 ImageAnalysis 流和 PreviewView 之间的坐标变换。它从 CameraX 接收目标坐标系,计算坐标变换,并将其传递给 ML Kit 的 Detector 类进行分析。

要使用 ML Kit Analyzer 与 CameraController,调用 setImageAnalysisAnalyzer() 并传入一个 ML Kit Analyzer 对象,并在其构造函数中包含以下内容:

  • 一个 ML Kit Detector 列表,CameraX 将按顺序调用它们。
  • 确定 ML Kit 输出坐标的目标坐标系:
    • COORDINATE_SYSTEM_VIEW_REFERENCED :变换后的 PreviewView 坐标。
    • COORDINATE_SYSTEM_ORIGINAL :原始 ImageAnalysis 流的坐标。
  • 一个 Executor ,用于调用 Consumer 回调并将 MlKitAnalyzer.Result(或相机帧的聚合 ML Kit 结果)传递给应用。
  • 一个 Consumer ,CameraX 在有新的 ML Kit 输出时调用它。

以下代码使用 CameraController 实现 ML Kit Analyzer,设置 BarcodeScanner 以检测二维码:

// 创建 BarcodeScanner 对象
val options = BarcodeScannerOptions.Builder()
  .setBarcodeFormats(Barcode.FORMAT_QR_CODE)
  .build()
val barcodeScanner = BarcodeScanning.getClient(options)

cameraController.setImageAnalysisAnalyzer(
            ContextCompat.getMainExecutor(this),
            MlKitAnalyzer(
                listOf(barcodeScanner),
                COORDINATE_SYSTEM_VIEW_REFERENCED,
                ContextCompat.getMainExecutor(this)
            ) { result: MlKitAnalyzer.Result? ->
    // result.getResult(barcodeScanner) 的值可以直接用于绘制 UI 覆盖层。
    }
)
// 创建 BarcodeScanner 对象
BarcodeScannerOptions options = new BarcodeScannerOptions.Builder()
   .setBarcodeFormats(Barcode.FORMAT_QR_CODE)
   .build();
BarcodeScanner barcodeScanner = BarcodeScanning.getClient(options);

cameraController.setImageAnalysisAnalyzer(executor,
    new MlKitAnalyzer(List.of(barcodeScanner), COORDINATE_SYSTEM_VIEW_REFERENCED,
    executor, result -> {
   // result.getResult(barcodeScanner) 的值可以直接用于绘制 UI 覆盖层。
 });

在上述代码示例中,ML Kit Analyzer 将以下内容传递给 BarcodeScanner 的 Detector 类:

  • 基于 COORDINATE_SYSTEM_VIEW_REFERENCED 的变换矩阵,它表示目标坐标系。
  • 相机帧。

如果 BarcodeScanner 遇到任何问题,其 Detector 将抛出错误,ML Kit Analyzer 将其传播到你的应用。如果成功,ML Kit Analyzer 返回 MLKitAnalyzer.Result#getValue(),在这种情况下是 Barcode 对象。

还可以使用 camera-core 中的 ImageAnalysis 类来实现 ML Kit Analyzer。但是,由于 ImageAnalysis 未与 PreviewView 集成,因此你必须手动处理坐标变换。有关更多信息,请参阅 ML Kit Analyzer 参考文档。

音视频方向学习、求职,欢迎加入我们的星球

丰富的音视频知识、面试题、技术方案干货分享,还可以进行面试辅导

探索 CameraX 音视频相机技术(8):MLKit 分析器

本文来自作者投稿,版权归原作者所有。如需转载,请注明出处:https://www.nxrte.com/jishu/yinshipin/58072.html

(0)

相关推荐

发表回复

登录后才能评论