Анализатор комплекта ML

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

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

Внедрение анализатора комплекта машинного обучения

Для реализации 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 с помощью CameraController для настройки BarcodeScanner для обнаружения QR-кодов:

Котлин

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

Ява

// 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 передает ее в ваше приложение. В случае успеха ML Kit Analyzer возвращает MLKitAnalyzer.Result#getValue() , который в данном случае является объектом Barcode .

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

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

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