Analizzatore del kit ML

ML Kit di Google fornisce API di machine learning on-device per la visione artificiale per rilevare volti, scansionare codici a barre, etichettare immagini e altro ancora. ML Kit Analyzer semplifica l'integrazione di ML Kit con la tua app CameraX.

ML Kit Analyzer è un'implementazione dell'interfaccia ImageAnalysis.Analyzer. Se necessario, esegue l'override della risoluzione target predefinita per ottimizzare l'utilizzo di ML Kit, gestisce le trasformazioni delle coordinate e passa i frame a ML Kit, che restituisce i risultati dell'analisi aggregata.

Implementa ML Kit Analyzer

Per implementare ML Kit Analyzer, ti consigliamo di utilizzare la classe CameraController, che funziona con PreviewView per visualizzare gli elementi UI. Se implementato utilizzando CameraController, l'analizzatore di ML Kit gestisce le trasformazioni delle coordinate tra lo stream ImageAnalysis originale 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 passagli un nuovo oggetto ML Kit Analyzer con i seguenti elementi nel costruttore:

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

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

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

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

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.
  • Le inquadrature della fotocamera.

Se BarcodeScanner riscontra problemi, il suo Detector genera un errore e ML Kit Analyzer lo propaga alla tua app. Se l'operazione va a buon fine, 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 saperne di più, consulta la documentazione di riferimento di ML Kit Analyzer.

Risorse aggiuntive

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