Analizator ML Kit

ML Kit od Google udostępnia interfejsy Vision API do uczenia maszynowego na urządzeniu, które umożliwiają wykrywanie twarzy, skanowanie kodów kreskowych, oznaczanie obrazów etykietami i inne działania. ML Kit Analyzer ułatwia integrację ML Kit z aplikacją CameraX.

ML Kit Analyzer to implementacja interfejsu ImageAnalysis.Analyzer. W razie potrzeby zastępuje domyślną rozdzielczość docelową, aby zoptymalizować wykorzystanie ML Kit, obsługuje przekształcenia współrzędnych i przekazuje klatki do ML Kit, który zwraca zagregowane wyniki analizy.

Implementowanie analizatora ML Kit

Aby zaimplementować analizator ML Kit, zalecamy użycie klasy CameraController, która współpracuje z PreviewView w celu wyświetlania elementów interfejsu. Jeśli implementacja jest przeprowadzana za pomocą CameraController, analizator ML Kit obsługuje przekształcenia współrzędnych między oryginalnym strumieniem ImageAnalysis a PreviewView. Odbiera docelowy układ współrzędnych z CameraX, oblicza przekształcenie współrzędnych i przekazuje je do klasy Detector ML Kit do analizy.

Aby używać analizatora ML Kit z CameraController, wywołaj setImageAnalysisAnalyzer() i przekaż mu nowy obiekt analizatora ML Kit z tymi elementami w konstruktorze:

  • Lista Detectorów ML Kit, które CameraX 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 Consumer i dostarcza do aplikacji MlKitAnalyzer.Result lub zagregowany wynik ML Kit klatki kamery.

  • Consumer, który CameraX wywołuje, gdy pojawiają się nowe dane wyjściowe ML Kit.

Poniższy kod implementuje analizator ML Kit za pomocą CameraController, aby skonfigurować BarcodeScanner do wykrywania kodów QR:

// 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.
    }
)

W powyższym przykładowym kodzie analizator ML Kit przekazuje do klasy Detector BarcodeScanner te informacje:

  • Macierz przekształcenia oparta na COORDINATE_SYSTEM_VIEW_REFERENCED, która reprezentuje docelowy układ współrzędnych.
  • Kamera kadruje.

Jeśli BarcodeScanner napotka problemy, jego Detector wygeneruje błąd, a analizator ML Kit przekaże go do aplikacji. Jeśli wszystko przebiegnie pomyślnie, analizator ML Kit zwróci MLKitAnalyzer.Result#getValue(), czyli w tym przypadku obiekt Barcode.

Możesz też wdrożyć analizator ML Kit, korzystając z klasy ImageAnalysis, która jest częścią camera-core. Jednak ponieważ usługa ImageAnalysis nie jest zintegrowana z PreviewView, musisz ręcznie obsługiwać przekształcenia współrzędnych. Więcej informacji znajdziesz w dokumentacji referencyjnej ML Kit Analyzer.

Dodatkowe materiały

Przykładową działającą aplikację aparatu z funkcją analizatora ML Kit znajdziesz w CameraX-MLKit.