ML Kit 分析器

Google 的 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 对象,并在其构造函数中包含以下内容:

以下代码使用 CameraController 实现 ML Kit Analyzer 以设置 BarcodeScanner 来检测 QR 码

Kotlin

// create BarcodeScanner object
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? ->
    // The value of result.getResult(barcodeScanner) can be used directly for drawing UI overlay.
    }
)

Java

// create BarcodeScanner object
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 -> {
   // The value of result.getResult(barcodeScanner) can be used directly for drawing UI overlay.
 });

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

  • 基于 COORDINATE_SYSTEM_VIEW_REFERENCED 的转换 Matrix,它表示目标坐标系。
  • 相机帧。

如果 BarcodeScanner 遇到任何问题,则其 Detector 抛出错误,ML Kit Analyzer 会将其传播到您的应用。如果成功,则 ML Kit Analyzer 返回 MLKitAnalyzer.Result#getValue(),在本例中是 Barcode 对象。

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

其他资源

有关具有 ML Kit Analyzer 功能的工作相机应用,请参阅 CameraX-MLKit 示例。