Das ML Kit von Google bietet Vision APIs für maschinelles Lernen auf dem Gerät, mit denen Gesichter erkannt, Barcodes gescannt, Bilder mit Labels versehen und andere Aufgaben ausgeführt werden können. Mit dem ML Kit Analyzer lässt sich ML Kit einfacher in Ihre CameraX-App einbinden.
ML Kit Analyzer ist eine Implementierung der ImageAnalysis.Analyzer-Schnittstelle. Sie überschreibt bei Bedarf die Standardzielauflösung, um die ML Kit-Nutzung zu optimieren, übernimmt die Koordinatentransformationen und übergibt die Frames an ML Kit, das die aggregierten Analyseergebnisse zurückgibt.
ML Kit Analyzer implementieren
Für die Implementierung des ML Kit-Analyzers empfehlen wir die Verwendung der Klasse CameraController, die mit PreviewView zusammenarbeitet, um UI-Elemente anzuzeigen. Wenn Sie CameraController verwenden, übernimmt der ML Kit Analyzer die Koordinatentransformationen zwischen dem ursprünglichen ImageAnalysis-Stream und PreviewView für Sie. Sie empfängt das Zielkoordinatensystem von CameraX, berechnet die Koordinatentransformation und leitet sie zur Analyse an die Klasse Detector von ML Kit weiter.
Wenn Sie ML Kit Analyzer mit CameraController verwenden möchten, rufen Sie setImageAnalysisAnalyzer() auf und übergeben Sie ein neues ML Kit Analyzer-Objekt mit den folgenden Elementen im Konstruktor:
- Eine Liste von ML Kit-
Detectors, die von CameraX nacheinander aufgerufen werden. Das Zielkoordinatensystem, das die Koordinaten der ML Kit-Ausgabe bestimmt:
COORDINATE_SYSTEM_VIEW_REFERENCED: die transformiertenPreviewView-Koordinaten.COORDINATE_SYSTEM_ORIGINAL: die ursprünglichenImageAnalysis-Streamkoordinaten.
Ein
Executor, der den Consumer-Callback aufruft und dasMlKitAnalyzer.Resultoder das aggregierte ML Kit-Ergebnis eines Kameraframes an die App liefert.Ein
Consumer, das von CameraX aufgerufen wird, wenn neue ML Kit-Ausgaben vorhanden sind.
Im folgenden Code wird der ML Kit Analyzer mit CameraController implementiert, um einen BarcodeScanner zum Erkennen von QR-Codes einzurichten:
// 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. } )
Im obigen Codebeispiel übergibt der ML Kit Analyzer Folgendes an die Klasse Detector von BarcodeScanner:
- Die Transformations-Matrix basierend auf
COORDINATE_SYSTEM_VIEW_REFERENCED, die das Zielkoordinatensystem darstellt. - Die Kamerabilder.
Wenn bei BarcodeScanner Probleme auftreten, Detector gibt einen Fehler aus,
der vom ML Kit Analyzer an Ihre App weitergegeben wird. Wenn der Vorgang erfolgreich ist, gibt der ML Kit Analyzer MLKitAnalyzer.Result#getValue() zurück,
in diesem Fall das Objekt Barcode.
Sie können den ML Kit Analyzer auch mit der Klasse ImageAnalysis implementieren, die Teil von camera-core ist. Da ImageAnalysis jedoch nicht in PreviewView eingebunden ist, müssen Sie die Koordinatentransformationen manuell vornehmen. Weitere Informationen finden Sie in der Referenzdokumentation zum ML Kit Analyzer.
Zusätzliche Ressourcen
Eine funktionierende Kamera-App mit ML Kit Analyzer-Funktionen finden Sie im CameraX-MLKit-Beispiel.