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:
COORDINATE_SYSTEM_VIEW_REFERENCED
: le coordinatePreviewView
trasformate.COORDINATE_SYSTEM_ORIGINAL
: le coordinate originali dello streamImageAnalysis
.
Un elemento
Executor
che richiama il callback Consumer e invia all'appMlKitAnalyzer.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.