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:
-
COORDINATE_SYSTEM_VIEW_REFERENCED
: преобразованные координатыPreviewView
. -
COORDINATE_SYSTEM_ORIGINAL
: исходные координаты потокаImageAnalysis
.
-
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 .