Das ML Kit von Google bietet Vision APIs für maschinelles Lernen auf dem Gerät, mit denen Sie z. B. Gesichter erkennen, Barcodes scannen und Bilder mit Labels versehen können. Mit ML Kit Analyzer lässt sich ML Kit leichter in Ihre CameraX-App einbinden.
ML Kit Analyzer ist eine Implementierung der ImageAnalysis.Analyzer
-Schnittstelle. Sie überschreibt die Standardzielauflösung (falls erforderlich) zur Optimierung der ML Kit-Nutzung, verarbeitet die Koordinatentransformationen und übergibt die Frames an ML Kit, das die aggregierten Analyseergebnisse zurückgibt.
ML Kit Analyzer implementieren
Für die Implementierung von ML Kit Analyzer empfehlen wir die Verwendung der Klasse CameraController
, die zusammen mit PreviewView
UI-Elemente anzeigt. Wenn ML Kit Analyzer mit CameraController
implementiert wurde, verarbeitet es die Koordinatentransformationen zwischen dem ursprünglichen ImageAnalysis
-Stream und PreviewView
für Sie. Es 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 dem folgenden Code im Konstruktor:
- Eine Liste der ML Kit-
Detector
s, die CameraX nacheinander aufgerufen wird. Das Zielkoordinatensystem, über das die Koordinaten der ML Kit-Ausgabe bestimmt werden:
COORDINATE_SYSTEM_VIEW_REFERENCED
: die umgewandeltenPreviewView
-KoordinatenCOORDINATE_SYSTEM_ORIGINAL
: die ursprünglichenImageAnalysis
-Streamkoordinaten
Ein
Executor
, das den Nutzer-Callback aufruft undMlKitAnalyzer.Result
oder das aggregierte ML Kit-Ergebnis eines Kameraframes an die App sendet.Ein
Consumer
, das von CameraX aufgerufen wird, wenn eine neue ML Kit-Ausgabe vorliegt.
Mit dem folgenden Code wird ML Kit Analyzer mit CameraController
implementiert, um eine BarcodeScanner
zur Erkennung von QR-Codes einzurichten:
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. });
Im obigen Codebeispiel übergibt ML Kit Analyzer Folgendes an die Detector
-Klasse von BarcodeScanner
:
- Die Transformations-Matrix basierend auf
COORDINATE_SYSTEM_VIEW_REFERENCED
, die das Zielkoordinatensystem darstellt. - Der Kamerarahmen.
Falls bei BarcodeScanner
Probleme auftreten, gibt Detector
einen Fehler aus und ML Kit Analyzer leitet ihn an die Anwendung weiter. Bei Erfolg gibt ML Kit Analyzer MLKitAnalyzer.Result#getValue()
zurück, in diesem Fall das Barcode
-Objekt.
Sie können ML Kit Analyzer auch mit der Klasse ImageAnalysis
implementieren, die Teil von camera-core
ist. Da ImageAnalysis
jedoch nicht in PreviewView
integriert ist, müssen Sie die Koordinatentransformationen manuell verarbeiten. Weitere Informationen finden Sie in der Referenzdokumentation zum ML Kit Analyzer.
Weitere Informationen
Eine funktionierende Kamera-App mit ML Kit Analyzer-Funktionen finden Sie im CameraX-MLKit-Beispiel.