Migración de Mobile Vision a ML Kit en Android

En este documento, se abordan los pasos que debes seguir para migrar tus proyectos De Google Mobile Vision (GMV) a ML Kit en Android.

Cambios generales en la API

Estos cambios se aplican a todas las APIs:

  • Las APIs de GMV muestran un resultado SparseArray<T> de forma síncrona. Las APIs del ML Kit usan API de Google Play Services Task para devolver resultados de forma asíncrona.
  • El GMV usa la llamada a isOperational() en la plataforma de la API para indicar si se se descargó correctamente y está listo para usarse. El kit de AA no tiene utilizar dicho método. El Kit de AA arroja una excepción MlKitException.UNAVAILABLE si una no se haya descargado el módulo. Puedes detectar esta excepción y procesar el o configura un tiempo de espera y vuelve a intentarlo con el fotograma actual.
  • Los métodos del GMV usan Frame para la entrada. El Kit de AA usa InputImage.
  • GMV proporciona MultiDetector, MultiProcessor y FocusingProcessor para realizar varias detecciones y filtrar resultados. Kit de AA no brinda esos mecanismos, pero se puede que implementa el desarrollador si así lo desea.

Actualiza las importaciones de Gradle

Actualiza las dependencias para las bibliotecas de Android del Kit de AA en el archivo Gradle (generalmente, app/build.gradle) de tu módulo (nivel de app), según la siguiente tabla:

API Artefacto GMV Artefacto del 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

Cambios en la API

En esta sección, se describen las clases y los métodos de GMV y ML Kit correspondientes para cada API de Vision, y se muestra cómo inicializar la API.

FaceDetector

Vuelve a codificar la inicialización como se muestra en este ejemplo:

GMV

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

Cambia los siguientes nombres de clases y métodos:

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

usa #setContourMode para reemplazar el 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) Esta función está cubierta por el modo de contorno de rostros.
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

Vuelve a codificar la inicialización como se muestra en este ejemplo:

GMV

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

ML Kit

barcodeScanner = BarcodeScanning.getClient();

Cambia los siguientes nombres de clases y métodos:

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

TextRecognition

Vuelve a codificar la inicialización como se muestra en este ejemplo:

GMV

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

ML Kit

textRecognizer = TextRecognition.getClient(TextRecognizerOptions.DEFAULT_OPTIONS);

Cambia los siguientes nombres de clases y métodos:

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 usas la biblioteca CameraSource proporcionada por Google Mobile Vision migrar fácilmente a CameraXSource de ML Kit biblioteca, siempre que tu app se ejecute en una versión mínima del SDK >= 21.

Cambia los siguientes nombres de clases y métodos:

android.gms.vision mlkit.vision.camera
CameraSource CameraSourceConfig
CameraSource.Builder CameraSourceConfig.Builder
CameraSource.Builder.setAutoFocusEnabled El enfoque automático se proporciona de forma predeterminada cuando se usa CameraX.
CameraSource.Builder.setFacing CameraSourceConfig.Builder.setCameraFacing
CameraSource.Builder.setFocusMode El enfoque automático se proporciona de forma predeterminada cuando se usa CameraX.
CameraSource.Builder.setRequestedFps Obsoleta.
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() Administrado de forma interna
CameraSource.PictureCallback Obsoleto
CameraSource.ShutterCallback Obsoleto

Cómo obtener ayuda

Si tienes algún problema, visita nuestra página de la Comunidad en la que describimos los canales disponibles para comunicarse con nosotros.