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:
COORDINATE_SYSTEM_VIEW_REFERENCED
: le coordinatePreviewView
trasformate.COORDINATE_SYSTEM_ORIGINAL
: le coordinate originali dello streamImageAnalysis
.
Una
Executor
che richiama il callback del consumatore e consegnaMlKitAnalyzer.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.