Migracja z Mobile Vision do ML Kit na Androidzie

Ten dokument zawiera instrukcje przenoszenia projektów z Google Mobile Vision (GMV) do ML Kit na Androida.

Ogólne zmiany w interfejsie API

Te zmiany dotyczą wszystkich interfejsów API:

  • Interfejsy GMV API zwracają wynik SparseArray<T> synchronicznie. Interfejsy ML Kit API korzystają z interfejsu API Task usług Google Play, aby zwracać wyniki asynchronicznie.
  • GMV używa wywołania isOperational() w interfejsie API, aby wskazać, czy moduł został pomyślnie pobrany i czy jest gotowy do użycia. ML Kit nie ma takiej metody. Jeśli moduł nie został pobrany, ML Kit zgłasza wyjątek MlKitException.UNAVAILABLE. Możesz przechwycić ten wyjątek i przetworzyć następny kadr lub ustawić limit czasu i ponownie przetworzyć bieżący kadr.
  • Metody GMV używają wartości Frame. ML Kit używa InputImage.
  • GMV udostępnia frameworki MultiDetector, MultiProcessorFocusingProcessor do wykonywania wielu wykryć i filtrowania wyników. ML Kit nie udostępnia takich mechanizmów, ale deweloper może w razie potrzeby wdrożyć te same funkcje.

Aktualizowanie importów Gradle

Zaktualizuj zależności bibliotek ML Kit na Androida w pliku Gradle modułu (na poziomie aplikacji), który zwykle ma nazwę app/build.gradle. W tym celu postępuj zgodnie z tabelą:

Interfejs API Artefakt GMV Element ML Kit
FaceDetector com.google.android.gms:play-services-vision:x.x.x com.google.android.gms:play-services-mlkit-face-detection:17.1.0
BarcodeDetector com.google.android.gms:play-services-vision:x.x.x com.google.android.gms:play-services-mlkit-barcode-scanning:18.3.1
TextRecognition com.google.android.gms:play-services-vision:x.x.x com.google.android.gms:play-services-mlkit-text-recognition:19.0.1
CameraSource com.google.android.gms:play-services-vision:x.x.x com.google.mlkit:camera:16.0.0-beta3

Zmiany w interfejsie API

W tej sekcji opisano odpowiadające klasy i metody GMV i ML Kit dla każdego interfejsu Vision API oraz pokazano, jak zainicjować interfejs API.

FaceDetector

Zmień kod inicjowania na taki, jak w tym przykładzie:

detector = new FaceDetector.Builder(context)
    .setMode(FaceDetector.ACCURATE_MODE)
    .setLandmarkType(FaceDetector.ALL_LANDMARKS)
    .setClassificationType(FaceDetector.ALL_CLASSIFICATIONS)
    .build();
FaceDetectorOptions options = new FaceDetectorOptions.Builder()
    .setPerformanceMode(FaceDetectorOptions.PERFORMANCE_MODE_ACCURATE)
    .setLandmarkMode(FaceDetectorOptions.LANDMARK_MODE_ALL)
    .setClassificationMode(FaceDetectorOptions.CLASSIFICATION_MODE_ALL)
    .build();

detector = FaceDetection.getClient(options);

Zmień te nazwy klas i metod:

android.gms.vision.face mlkit.vision.face
FaceDetector FaceDetector
SparseArray<Face> detect(Frame frame) Task<List<Face>> process(@NonNull InputImage image)
FaceDetector.Builder.setClassificationType(int classificationType) FaceDetectorOptions.Builder.setClassificationMode(int classificationMode)
NO_CLASSIFICATIONS, ALL_CLASSIFICATIONS CLASSIFICATION_MODE_NONE, CLASSIFICATION_MODE_ALL
FaceDetector.Builder.setLandmarkType(int landmarkType) FaceDetectorOptions.Builder.setLandmarkMode(int landmarkMode)
NO_LANDMARKS, ALL_LANDMARKS, CONTOUR_LANDMARKS LANDMARK_MODE_NONE, LANDMARK_MODE_ALL

użyj #setContourMode do zastąpienia GMV CONTOUR_LANDMARKS).

FaceDetector.Builder.setTrackingEnabled(boolean trackingEnabled) FaceDetectorOptions.Builder.enableTracking()
FaceDetector.Builder.setMinFaceSize(float proportionalMinFaceSize) FaceDetectorOptions.Builder.setMinFaceSize(float minFaceSize)
FaceDetector.Builder.setMode(int mode) FaceDetectorOptions.Builder.setPerformanceMode(int performanceMode)
FAST_MODE, ACCURATE_MODE PERFORMANCE_MODE_FAST, PERFORMANCE_MODE_ACCURATE
FaceDetector.Builder.setProminentFaceOnly(boolean prominentFaceOnly) Ta funkcja jest obsługiwana w trybie konturowania twarzy.
Face Face
Contour FaceContour
Landmark FaceLandmark
Face.getContours() Face.getAllContours()
Face.getEulerY() Face.getHeadEulerAngleY()
Face.getEulerZ() Face.getHeadEulerAngleZ()
Face.getId() Face.getTrackingId()
Face.getIsLeftEyeOpenProbability() Face.getLeftEyeOpenProbability()
Face.getIsRightEyeOpenProbability() Face.getRightEyeOpenProbability()
Face.getIsSmilingProbability() Face.getSmilingProbability()
Face.getLandmarks() Face.getLandmark(int landmarkType)
Face.getPosition()
Face.getHeight()
Face.getWidth()
Face.getBoundingBox()

BarcodeDetector

Zmień kod inicjowania na taki, jak w tym przykładzie:

barcodeDetector = new BarcodeDetector.Builder(context).build());
barcodeScanner = BarcodeScanning.getClient();

Zmień te nazwy klas i metod:

android.gms.vision.barcode mlkit.vision.barcode
BarcodeDetector BarcodeScanner
SparseArray<Barcode> detect(Frame frame) Task<List<Barcode>> process(@NonNull InputImage image)
Barcode Barcode

TextRecognition

Zmień kod inicjowania na taki, jak w tym przykładzie:

textRecognizer = new TextRecognizer.Builder(context).build();
textRecognizer = TextRecognition.getClient(TextRecognizerOptions.DEFAULT_OPTIONS);

Zmień te nazwy klas i metod:

android.gms.vision.text mlkit.vision.text
TextRecognizer TextRecognizer
SparseArray<TextBlock> detect(Frame frame) Task<Text> process(@NonNull InputImage image)
SparseArray<TextBlock> Text
Line Line
TextBlock TextBlock
Element Element
getLanguage() getRecognizedLanguage()
getBoundingBox() getBoundingBox()
getCornerPoints() getCornerPoints()
TextBlock.getComponents() TextBlock.getLines()
TextBlock.getValue() TextBlock.getText()
Element.getValue() Element.getText()

CameraSource

Jeśli używasz biblioteki CameraSource udostępnianej przez Google Mobile Vision, możesz łatwo przejść na bibliotekę CameraXSource pakietu ML Kit, o ile Twoja aplikacja działa na wersji minimalnej pakietu SDK = 21.

Zmień te nazwy klas i metod:

android.gms.vision mlkit.vision.camera
CameraSource CameraSourceConfig
CameraSource.Builder CameraSourceConfig.Builder
CameraSource.Builder.setAutoFocusEnabled Automatyczny autofokus jest domyślnie dostępny podczas korzystania z CameraX.
CameraSource.Builder.setFacing CameraSourceConfig.Builder.setCameraFacing
CameraSource.Builder.setFocusMode Automatyczny autofokus jest domyślnie dostępny podczas korzystania z CameraX.
CameraSource.Builder.setRequestedFps Rola wycofana.
CameraSource.Builder.setRequestedPreviewSize CameraSourceConfig.Builder.setRequestedPreviewSize
CameraSource CameraXSource
new CameraSource.Builder(mContext, detector)....build(); CameraXSource(CameraSourceConfig, PreviewView)
getCameraFacing() getCameraFacing()
getPreviewSize() getPreviewSize()
release() close()
start(SurfaceHolder surfaceHolder) start() // The previewview is set in the CameraSourceConfig
start() start()
stop() stop()
Detector.Processor DetectionTaskCallback
receiveDetections(Detections<T> detections) void onDetectionTaskReceived(@NonNull Task<ResultT> detectionTask);
release() Obsługiwane wewnętrznie
CameraSource.PictureCallback Wycofano
CameraSource.ShutterCallback Wycofano

Uzyskiwanie pomocy

Jeśli napotkasz jakiekolwiek problemy, odwiedź naszą stronę społeczności, na której znajdziesz informacje o dostępnych kanałach kontaktu z nami.