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:
COORDINATE_SYSTEM_VIEW_REFERENCED: przekształcone współrzędnePreviewView.COORDINATE_SYSTEM_ORIGINAL: oryginalne współrzędne strumieniaImageAnalysis.
Executor, który wywołuje wywołanie zwrotne Consumer i dostarcza do aplikacjiMlKitAnalyzer.Resultlub 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.