ML Kit Analyzer

ML Kit от Google предоставляет Vision API для машинного обучения на устройстве, которые позволяют распознавать лица, сканировать штрихкоды, помечать изображения и выполнять другие задачи. ML Kit Analyzer упрощает интеграцию ML Kit с приложением CameraX.

ML Kit Analyzer – это реализация интерфейса ImageAnalysis.Analyzer. Он переопределяет целевое разрешение по умолчанию (при необходимости), чтобы оптимизировать использование ML Kit, обрабатывает преобразования координат и передает кадры в ML Kit, который возвращает агрегированные результаты анализа.

Как реализовать ML Kit Analyzer

Чтобы реализовать ML Kit Analyzer, рекомендуем использовать класс CameraController, который работает с PreviewView для отображения элементов интерфейса. При реализации с помощью CameraController ML Kit Analyzer обрабатывает преобразования координат между исходным потоком ImageAnalysis и PreviewView. Он получает целевую систему координат от CameraX, вычисляет преобразование координат и пересылает его в класс Detector ML Kit для анализа.

Чтобы использовать ML Kit Analyzer с CameraController, вызовите setImageAnalysisAnalyzer() и передайте ему новый объект ML Kit Analyzer со следующими параметрами в конструкторе:

  • Список Detector ML Kit, которые CameraX вызывает последовательно.
  • Целевая система координат, которая определяет координаты выходных данных ML Kit:

  • Executor, который вызывает обратный вызов Consumer и доставляет в приложение MlKitAnalyzer.Result или агрегированный результат ML Kit для кадра камеры.

  • Consumer, который CameraX вызывает, когда ML Kit возвращает новые выходные данные.

В следующем коде ML Kit Analyzer использует CameraController, чтобы настроить 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 передает в класс Detector библиотеки BarcodeScanner следующие данные:

  • Матрица преобразования на основе COORDINATE_SYSTEM_VIEW_REFERENCED, которая представляет целевую систему координат.
  • Камера кадрирует изображение.

Если в BarcodeScanner возникнут проблемы, то Detector выдаст ошибку, и ML Kit Analyzer передаст ее в ваше приложение. В случае успеха ML Kit Analyzer возвращает MLKitAnalyzer.Result#getValue(), который в данном случае является объектом Barcode.

Вы также можете реализовать ML Kit Analyzer с помощью класса ImageAnalysis, который входит в camera-core. Однако, поскольку ImageAnalysis не интегрирован с PreviewView, вам придется вручную обрабатывать преобразования координат. Дополнительную информацию можно найти в справочной документации по ML Kit Analyzer.

Дополнительные ресурсы

Пример работающего приложения камеры с функциями ML Kit Analyzer можно найти в CameraX-MLKit.