机器学习套件分析器

Google 的 机器学习套件可提供设备端机器学习 Vision API,用于检测人脸、扫描条形码、为图片加标签等。借助机器学习套件分析器,您可以更轻松地将机器学习套件与 CameraX 应用集成。

机器学习套件分析器是 ImageAnalysis.Analyzer 接口的实现。该分析器会通过替换默认目标分辨率(如果需要)来针对机器学习套件的使用进行优化,处理坐标转换,并将框架传递给会返回汇总分析结果的机器学习套件。

实现机器学习套件分析器

如需实现机器学习套件分析器,建议使用 CameraController 类,该类可与 PreviewView 配合使用来显示界面元素。在使用 CameraController 进行实现时,机器学习套件分析器会为您处理原始 ImageAnalysis 流与 PreviewView 之间的坐标转换。该分析器会从 CameraX 接收目标坐标系,计算坐标转换,并将其转发给机器学习套件的 Detector 类进行分析。

若要将机器学习套件分析器与 CameraController 搭配使用,请调用 setImageAnalysisAnalyzer() 并向它传递一个新的机器学习套件分析器对象,同时在其构造函数中包含以下内容:

  • 机器学习套件 Detector 的列表,CameraX 将按顺序依次调用。
  • 用于确定机器学习套件输出坐标的目标坐标系:

  • 用于调用 Consumer 回调并将 MlKitAnalyzer.Result(即相机框架的汇总机器学习套件结果)传递给应用的 Executor

  • CameraX 在有新的机器学习套件输出内容时调用的 Consumer

以下代码会使用 CameraController 来实现机器学习套件分析器,以设置用于检测二维码的 BarcodeScanner

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.
 });

在上面的代码示例中,机器学习套件分析器会将以下内容传递给 BarcodeScannerDetector 类:

  • 基于代表目标坐标系的 COORDINATE_SYSTEM_VIEW_REFERENCED 的转换 Matrix
  • 相机框架。

如果 BarcodeScanner 遇到任何问题,它的 Detector抛出错误,并且机器学习套件分析器会将该错误传播到您的应用。如果成功,机器学习套件分析器将返回 MLKitAnalyzer.Result#getValue(),在本例中为 Barcode 对象。

您还可以使用 camera-core 中的 ImageAnalysis 类来实现机器学习套件分析器。不过,由于 ImageAnalysis 并未与 PreviewView 集成,因此您必须手动处理坐标转换。如需了解详情,请参阅机器学习套件分析器参考文档。

其他资源

如需获取具有机器学习套件分析器功能且能正常运行的相机应用,请参阅 CameraX-MLKit 示例。