El ML Kit de Google proporciona las APIs de Vision de aprendizaje automático integradas en el dispositivo para detectar rostros, escanear códigos de barras, etiquetar imágenes y mucho más. El Analizador de ML Kit facilita la integración del kit con tu app de CameraX.
El Analizador de ML Kit es una implementación de la interfaz de ImageAnalysis.Analyzer
. Anula la resolución objetivo predeterminada (si es necesario) para optimizar el uso del ML Kit, controla las transformaciones de coordenadas y pasa los marcos al ML Kit, que muestra los resultados agregados del análisis.
Cómo implementar el Analizador de ML Kit
A fin de implementar el Analizador de ML Kit, te recomendamos que uses la clase CameraController
, que funciona con PreviewView
para mostrar elementos de la IU. Cuando se implementa mediante CameraController
, el Analizador de ML Kit controla las transformaciones de coordenadas entre la transmisión de ImageAnalysis
original y la PreviewView
por ti. Recibe el sistema de coordenadas de destino de CameraX, calcula la transformación de coordenadas y la reenvía a la clase Detector
de ML Kit para su análisis.
Con el objeto de usar el Analizador de ML Kit con CameraController
, llama a setImageAnalysisAnalyzer()
y pásale un nuevo objeto del Analizador de ML Kit con lo siguiente en su constructor:
- Una lista de los
Detector
de ML Kit, que CameraX invoca de forma secuencial en orden El sistema de coordenadas de destino que determina las coordenadas del resultado de ML Kit:
COORDINATE_SYSTEM_VIEW_REFERENCED
: las coordenadas dePreviewView
transformadasCOORDINATE_SYSTEM_ORIGINAL
: las coordenadas originales de transmisión deImageAnalysis
Un objeto
Executor
que invoca la devolución de llamada del consumidor y envía a la app elMlKitAnalyzer.Result
(o el resultado agregado de ML Kit de un marco de cámara)Un objeto
Consumer
, que CameraX invoca cuando hay un nuevo resultado de ML Kit
El siguiente código implementa el Analizador de ML Kit con CameraController
parae configurar un BarcodeScanner
para detectar códigos 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. });
En la muestra de código anterior, el Analizador de ML Kit pasa lo siguiente a la clase Detector
de BarcodeScanner
:
- La Matrix de transformación basada en
COORDINATE_SYSTEM_VIEW_REFERENCED
que representa el sistema de coordenadas de destino - Los marcos de la cámara
Si BarcodeScanner
encuentra algún problema, su Detector
arroja un error, y el Analizador de ML Kit lo propaga a la app. Si se ejecuta correctamente, el Analizador de ML Kit mostrará MLKitAnalyzer.Result#getValue()
, que en este caso es el objeto Barcode
.
También puedes implementar el Analizador de ML Kit con la clase ImageAnalysis
que forma parte de camera-core
. Sin embargo, debido a que ImageAnalysis
no está integrado a PreviewView
, debes controlar de forma manual las transformaciones de coordenadas. Para obtener más información, consulta la documentación de referencia del Analizador de ML Kit.
Recursos adicionales
Para obtener una app de cámara en funcionamiento con la funcionalidad del Analizador de ML Kit, consulta la muestra de CameraX-MLKit.