Migrer de Mobile Vision vers ML Kit sur Android

Ce document décrit la procédure à suivre pour migrer vos projets de Google Mobile Vision (GMV) vers ML Kit sur Android.

Modifications globales de l'API

Ces modifications s'appliquent à toutes les API:

  • Les API VMB renvoient un résultat SparseArray<T> de manière synchrone. Les API ML Kit utilisent l'API Task des services Google Play pour renvoyer les résultats de manière asynchrone.
  • VMB utilise l'appel isOperational() sur la surface de l'API pour indiquer si un module a bien été téléchargé et est prêt à être utilisé. ML Kit n'utilise pas cette méthode. ML Kit génère une exception MlKitException.UNAVAILABLE si aucun module n'a été téléchargé. Vous pouvez intercepter cette exception et traiter le frame suivant, ou définir un délai avant expiration et réessayer avec le frame actuel.
  • Les méthodes VMB utilisent Frame pour les entrées. ML Kit utilise InputImage.
  • GMV fournit les frameworks MultiDetector, MultiProcessor et FocusingProcessor pour effectuer plusieurs détections et filtrer les résultats. ML Kit ne fournit pas de tels mécanismes, mais le développeur peut mettre en œuvre la même fonctionnalité si vous le souhaitez.

Mettre à jour les importations Gradle

Mettez à jour les dépendances des bibliothèques Android ML Kit dans le fichier Gradle de votre module (au niveau de l'application), qui est généralement app/build.gradle, conformément au tableau suivant:

API Artefact VMB Artefact 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.0
TextRecognition com.google.android.gms:play-services-vision:x.x.x com.google.android.gms:play-services-mlkit-text-recognition:19.0.0
CameraSource com.google.android.gms:play-services-vision:x.x.x com.google.mlkit:camera:16.0.0-beta3

Modifications apportées à l'API

Cette section décrit les classes et les méthodes GMV et ML Kit correspondantes pour chaque API Vision, et explique comment initialiser l'API.

FaceDetector

Recodez l'initialisation comme indiqué dans cet exemple:

VMB

detector = new FaceDetector.Builder(context)
    .setMode(FaceDetector.ACCURATE_MODE)
    .setLandmarkType(FaceDetector.ALL_LANDMARKS)
    .setClassificationType(FaceDetector.ALL_CLASSIFICATIONS)
    .build();

ML Kit

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);

Modifiez les noms de classe et de méthode suivants:

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

utiliser #setContourMode pour remplacer la VMB CONTOUR_STATES)

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) Cette fonctionnalité est couverte par le mode Contour du visage.
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

Recodez l'initialisation comme indiqué dans cet exemple:

VMB

barcodeDetector = new BarcodeDetector.Builder(context).build());

ML Kit

barcodeScanner = BarcodeScanning.getClient();

Modifiez les noms de classe et de méthode suivants:

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

TextRecognition

Recodez l'initialisation comme indiqué dans cet exemple:

VMB

textRecognizer = new TextRecognizer.Builder(context).build();

ML Kit

textRecognizer = TextRecognition.getClient(TextRecognizerOptions.DEFAULT_OPTIONS);

Modifiez les noms de classe et de méthode suivants:

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

Si vous utilisez la bibliothèque CameraSource fournie par Google Mobile Vision, vous pouvez facilement migrer vers la bibliothèque CameraXSource de ML Kit, à condition que votre application s'exécute sur une version minimale du SDK 21 ou supérieure.

Modifiez les noms de classe et de méthode suivants:

android.gms.vision mlkit.vision.camera
CameraSource CameraSourceConfig
CameraSource.Builder CameraSourceConfig.Builder
CameraSource.Builder.setAutoFocusEnabled La mise au point automatique est fournie par défaut lorsque vous utilisez CameraX.
CameraSource.Builder.setFacing CameraSourceConfig.Builder.setCameraFacing
CameraSource.Builder.setFocusMode La mise au point automatique est fournie par défaut lorsque vous utilisez CameraX.
CameraSource.Builder.setRequestedFps Obsolète.
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() Géré en interne
CameraSource.PictureCallback Obsolète
CameraSource.ShutterCallback Obsolète

Obtenir de l'aide

Si vous rencontrez des problèmes, consultez la page de la communauté sur laquelle vous trouverez une liste des chaînes disponibles pour nous contacter.