ML Kit от Google предоставляет API машинного обучения Vision, работающие на устройстве, для распознавания лиц, сканирования штрихкодов, маркировки изображений и т. д. 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 со следующими параметрами в конструкторе:
- Список
DetectorML Kit, которые CameraX вызывает последовательно. Целевая система координат, которая определяет координаты выходных данных ML Kit:
COORDINATE_SYSTEM_VIEW_REFERENCED– преобразованные координатыPreviewView.COORDINATE_SYSTEM_ORIGINAL– исходные координаты потокаImageAnalysis.
Executor, который вызывает обратный вызов Consumer и доставляет в приложениеMlKitAnalyzer.Resultили агрегированный результат ML Kit для кадра камеры.Consumer, который вызывается CameraX, когда ML Kit возвращает новые выходные данные.
В следующем коде ML Kit Analyzer использует 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. } )
В приведенном выше примере кода 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.