Analizator ML Kit

ML Kit od Google udostępnia działające na urządzeniu interfejsy Vision API do wykrywania treści rozpoznawania twarzy, skanowania kodów kreskowych, oznaczania zdjęć etykietami itp. ML Kit Analyzer łatwiej będzie zintegrować ML Kit z aplikacją CameraX.

ML Kit Analyzer 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 narzędzia ML Kit, które zwraca wyniki analizy zbiorczej.

Wdrażanie Analizatora pakietów ML Kit

Do implementacji ML Kit Analyzer zalecamy użycie klasy CameraController, która współpracuje z PreviewView do wyświetlania elementów interfejsu. W przypadku implementacji za pomocą narzędzia CameraController ML Kit Analyzer obsługuje przekształcenia współrzędnych między oryginalnym obiektem ImageAnalysis transmisja z gry i PreviewView dla Ciebie. Otrzymuje docelowy układ współrzędnych z AparatX, oblicza przekształcenie współrzędnych, i przekazuje je do analizy w klasie Detector ML Kit.

Aby używać narzędzia ML Kit Analyzer z CameraController, wywołaj setImageAnalysisAnalyzer() i przekaż go nowy obiekt ML Kit Analyzer z tym konstruktorem:

  • Lista Detector komponentów ML Kit, które AparatX wywołuje po kolei.
  • 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 MlKitAnalyzer.Result lub zagregowany wynik ML Kit dotyczący klatki kamery.

  • Consumer, który jest wywoływany przez AparatX, gdy pojawią się nowe dane wyjściowe ML Kit.

Ten kod implementuje ML Kit Analyzer przy użyciu CameraController do konfiguracji 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 przykładowym kodzie powyżej ML Kit Analyzer przekazuje poniższe dane do Zajęcia ucznia BarcodeScanner (Detector):

  • Matryca przekształceń w oparciu o tabelę COORDINATE_SYSTEM_VIEW_REFERENCED, która reprezentuje docelowy układ współrzędnych.
  • Ramka aparatu.

Jeśli na stronie BarcodeScanner wystąpią problemy, jej Detector zgłosi błąd, a ML Kit Analyzer przekaże go do Twojej aplikacji. Jeśli operacja się uda, ML Kit Analyzer zwróci błąd MLKitAnalyzer.Result#getValue(), który w tym przypadku jest obiekt Barcode.

Możesz też wdrożyć ML Kit Analyzer przy użyciu klasy ImageAnalysis, która jest częścią camera-core. Ponieważ jednak ImageAnalysis nie jest zintegrowany z PreviewView, musisz ręcznie edytować przekształcenia współrzędnych. Aby dowiedzieć się więcej, zapoznaj się z dokumentacją ML Kit Analyzer.

Dodatkowe materiały

W przypadku działającej aplikacji aparatu z funkcją ML Kit Analyzer: zobacz przykład z CameraX-MLKit.