Analizador de ML Kit

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:

  • Un objeto Executor que invoca la devolución de llamada del consumidor y envía a la app el MlKitAnalyzer.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.