Analizzatore del kit ML

ML Kit di Google fornisce API Vision di machine learning sul dispositivo per rilevare volti, scansionare codici a barre, etichettare immagini e altro ancora. ML Kit Analyzer semplifica l'integrazione di 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, gestire le trasformazioni delle coordinate e passare i frame a ML Kit, che restituisce i risultati aggregati dell'analisi.

Implementa ML Kit Analyzer

Per implementare ML Kit Analyzer, 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 automaticamente le trasformazioni delle coordinate tra il flusso originale di ImageAnalysis e PreviewView. Riceve il sistema di coordinate di destinazione da CameraX, calcola la trasformazione delle coordinate e la inoltra alla classe Detector di ML Kit per l'analisi.

Per utilizzare ML Kit Analyzer con CameraController, chiama setImageAnalysisAnalyzer() e passa un nuovo oggetto ML Kit Analyzer con il seguente codice nel suo costruttore:

  • Un elenco di Detector di ML Kit, che CameraX richiama in ordine sequenziale.
  • Il sistema di coordinate di destinazione che determina le coordinate dell'output di ML Kit:

  • Un elemento Executor che richiama il callback Consumer e invia all'app MlKitAnalyzer.Result, ovvero il risultato aggregato di ML Kit di un fotogramma della fotocamera.

  • Un Consumer, che CameraX richiama quando è disponibile un nuovo output di ML Kit.

Il codice seguente implementa ML Kit Analyzer utilizzando CameraController per configurare un BarcodeScanner al fine di 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 alla classe Detector di BarcodeScanner:

  • La matrice di trasformazione basata su COORDINATE_SYSTEM_VIEW_REFERENCED che rappresenta il sistema di coordinate di destinazione.
  • L'inquadratura della fotocamera.

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

Puoi anche implementare ML Kit Analyzer 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 dell'analizzatore ML Kit.

Risorse aggiuntive

Per un'app per fotocamera funzionante con funzionalità di analisi ML Kit, vedi l'esempio di FotocameraX-MLKit.