Analizzatore del kit ML

Il ML Kit di Google fornisce API Vision per il machine learning on-device per il rilevamento volti, scansione di codici a barre, etichettatura di immagini e altro ancora. Con ML Kit Analyzer puoi è più facile integrare ML Kit con l'app CameraX.

ML Kit Analyzer è un'implementazione dell'interfaccia di ImageAnalysis.Analyzer. Sostituisce la risoluzione target predefinita. (se necessario) per ottimizzare l'utilizzo di ML Kit, gestisce le trasformazioni delle coordinate, e passa i frame a ML Kit, che restituisce i risultati aggregati dell'analisi.

Implementare l'Analizzatore ML Kit

Per implementare l'Analizzatore ML Kit, consigliamo di utilizzare la classe CameraController, che funziona con PreviewView per visualizzare gli elementi dell'interfaccia utente. Se implementato utilizzando CameraController, ML Kit Analyzer gestisce le trasformazioni delle coordinate tra il modello ImageAnalysis originale stream e PreviewView per te. Riceve il sistema di coordinate di destinazione FotocameraX, calcola la trasformazione delle coordinate, e la inoltra alla classe Detector di ML Kit per l'analisi.

Per utilizzare l'Analizzatore ML Kit con CameraController, effettua una chiamata a setImageAnalysisAnalyzer() e superalo un nuovo oggetto ML Kit Analyzer con il seguente costruttore:

  • Un elenco di Detector kit ML, che CameraX richiama in sequenza.
  • Il sistema di coordinate target che determina le coordinate dell'output del kit ML:

  • Una Executor che richiama il callback del consumatore e consegna MlKitAnalyzer.Result, o il risultato aggregato del kit ML dell'inquadratura di una fotocamera, nell'app.

  • Una Consumer, che CameraX richiama quando è disponibile un nuovo output del kit ML.

Il codice seguente implementa ML Kit Analyzer utilizzando CameraController per la configurazione Un BarcodeScanner per rilevare i codici 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.
 });

Nell'esempio di codice riportato sopra, ML Kit Analyzer passa quanto segue a Corso Detector di BarcodeScanner:

  • La Matrice di trasformazione in base a COORDINATE_SYSTEM_VIEW_REFERENCED che rappresenta il sistema di coordinate di destinazione.
  • I fotogrammi della fotocamera.

Se BarcodeScanner rileva problemi, Detector genera un errore. e ML Kit Analyzer le propaga alla tua app. Se l'esito è positivo, ML Kit Analyzer restituisce MLKitAnalyzer.Result#getValue(), che in questo caso è l'oggetto Barcode.

Puoi implementare l'Analizzatore ML anche utilizzando la classe ImageAnalysis che fa parte di camera-core. Tuttavia, poiché ImageAnalysis non è integrato con PreviewView, devi gestire manualmente le trasformazioni delle coordinate. Per ulteriori informazioni, consulta la documentazione di riferimento di ML Kit Analyzer.

Risorse aggiuntive

Per un'app fotocamera funzionante con la funzionalità ML Kit Analyzer, guarda l'esempio CameraX-MLKit.