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