Analizator ML Kit

Oferowany przez Google pakiet ML Kit zawiera interfejsy Vision API w systemach uczących się działające na urządzeniu, które pozwalają między innymi wykrywać twarze, skanować kody kreskowe i oznaczać obrazy etykietami. Analizator ML Kit ułatwia integrację ML Kit z aplikacją CameraX.

Analizator ML Kit to implementacja interfejsu ImageAnalysis.Analyzer. Zastępuje domyślną rozdzielczość docelową (w razie potrzeby) w celu optymalizacji pod kątem użycia ML Kit, obsługuje przekształcenia współrzędnych i przekazuje ramki do ML Kit, który zwraca zagregowane wyniki analizy.

Wdrażanie Analizatora ML Kit

Do zaimplementowania Analizatora ML Kit zalecamy użycie klasy CameraController, która współpracuje z PreviewView przy wyświetlaniu elementów interfejsu. W przypadku wdrożenia za pomocą CameraController analizator ML Kit obsługuje za Ciebie przekształcenia współrzędnych między oryginalnym strumieniem ImageAnalysis a PreviewView. Otrzymuje docelowy układ współrzędnych z CameraX, oblicza transformację współrzędną i przekazuje go do klasy Detector systemu ML Kit w celu analizy.

Aby użyć Analizatora ML Kit z usługą CameraController, wywołaj setImageAnalysisAnalyzer() i przekaż mu nowy obiekt Analizatora ML Kit przy użyciu tego konstruktora:

  • Lista komponentów ML Kit Detector, które CameraX wywołuje sekwencyjnie.
  • Docelowy układ współrzędnych, który określa współrzędne danych wyjściowych ML Kit:

  • Executor, który wywołuje wywołanie zwrotne klienta i dostarcza aplikacji MlKitAnalyzer.Result, czyli zagregowany wynik ML Kit z klatki z kamery.

  • Element Consumer, który jest wywoływany przez CameraX, gdy pojawia się nowy typ danych wyjściowych ML Kit.

Ten kod implementuje Analizator ML Kit przy użyciu CameraController, aby skonfigurować BarcodeScanner do wykrywania kodów 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.
 });

W powyższym przykładowym kodzie Analizator ML Kit przekazuje te dane do klasy Detector w BarcodeScanner:

  • Matryca przekształcenia oparta na wartości COORDINATE_SYSTEM_VIEW_REFERENCED, która reprezentuje docelowy układ współrzędnych.
  • Ramki aparatu.

Jeśli BarcodeScanner napotka jakiekolwiek problemy, jego Detector zgłosi błąd, a następnie rozpowszechni go do aplikacji. Jeśli operacja się uda, Analizator ML Kit zwróci błąd MLKitAnalyzer.Result#getValue(), co w tym przypadku jest obiektem Barcode.

Możesz też wdrożyć Analizator ML Kit przy użyciu klasy ImageAnalysis, która jest częścią camera-core. Ponieważ jednak ImageAnalysis nie jest zintegrowany z PreviewView, musisz ręcznie przeprowadzić przekształcenia współrzędnych. Więcej informacji znajdziesz w dokumentacji referencyjnej Analizatora ML Kit.

Dodatkowe materiały

Działającą aplikację aparatu z funkcją Analizatora ML Kit znajdziesz w przykładzie CameraX-MLKit.