ML Kit-Analysetool

Das ML Kit von Google bietet Vision APIs für maschinelles Lernen auf dem Gerät zur Erkennung Gesichter, das Scannen von Barcodes, das Beschriften von Bildern und vieles mehr. ML Kit Analyzer macht es möglich um ML Kit in Ihre CameraX-App zu integrieren.

Das ML Kit Analyzer ist eine Implementierung der ImageAnalysis.Analyzer-Schnittstelle. Die standardmäßige Zielauflösung wird überschrieben (falls erforderlich), um die Nutzung von ML Kit zu optimieren, koordinierte Transformationen, und übergibt die Frames an ML Kit, das die aggregierten Analyseergebnisse zurückgibt.

ML Kit Analyzer implementieren

Zum Implementieren von ML Kit Analyzer empfehlen wir die Verwendung der Klasse CameraController, die zum Anzeigen von UI-Elementen mit PreviewView verwendet wird. Bei Implementierung mit CameraController ML Kit Analyzer verarbeitet die Koordinatentransformationen zwischen den ursprünglichen ImageAnalysis Stream und PreviewView für dich. Er 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 es Ein neues ML Kit Analyzer-Objekt mit folgendem Konstruktor:

  • Eine Liste der ML Kit-Detectors, die CameraX der Reihe nach aufruft.
  • Das Zielkoordinatensystem, das die Koordinaten der ML Kit-Ausgabe bestimmt:

  • Ein Executor, das den Nutzer-Callback aufruft und MlKitAnalyzer.Result oder das aggregierte ML Kit-Ergebnis eines Kamerarahmens an die App senden.

  • Ein Consumer, das von CameraX aufgerufen wird, wenn eine neue ML Kit-Ausgabe vorliegt.

Mit dem folgenden Code wird ML Kit Analyzer mithilfe von CameraController zum Einrichten implementiert BarcodeScanner, um QR-Codes zu erkennen:

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 Klasse Detector von BarcodeScanner:

  • Transformationsmatrix basierend auf COORDINATE_SYSTEM_VIEW_REFERENCED, das das Zielkoordinatensystem darstellt.
  • Die Kameraeinstellungen.

Wenn bei BarcodeScanner Probleme auftreten, gibt Detector einen Fehler aus, und das ML Kit Analyzer gibt sie an Ihre 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 mithilfe der Klasse ImageAnalysis implementieren, die Teil von camera-core ist. Da ImageAnalysis nicht in PreviewView integriert ist, müssen Sie die Koordinatentransformationen manuell verarbeiten. Weitere Informationen finden Sie in der Referenzdokumentation zu ML Kit Analyzer.

Weitere Informationen

Für eine funktionierende Kamera-App mit ML Kit Analyzer-Funktion finden Sie im Beispiel CameraX-MLKit.