Migración de Mobile Vision a ML Kit en Android

En este documento, se describen los pasos que debes seguir para migrar tus proyectos de Google Mobile Vision (GMV) al 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 Kit de AA usan la API de Tasks de los Servicios de Google Play para mostrar resultados de forma asíncrona.
  • GMV usa la llamada isOperational() en la plataforma de la API para indicar si un módulo se descargó correctamente y si está listo para usarse. El Kit de AA no tiene ese método. El Kit de AA arroja una excepción MlKitException.UNAVAILABLE si no se descargó un módulo. Puedes capturar esta excepción y procesar el siguiente fotograma o establecer un tiempo de espera y volver a intentarlo con el fotograma actual.
  • Los métodos de GMV usan Frame para la entrada. El Kit de AA usa InputImage.
  • GMV proporciona los frameworks MultiDetector, MultiProcessor y FocusingProcessor para realizar varias detecciones y filtrar resultados. El Kit de AA no proporciona estos mecanismos, pero el desarrollador puede implementar la misma funcionalidad si lo desea.

Cómo actualizar las importaciones de Gradle

Actualiza las dependencias para las bibliotecas de Android del ML Kit en el archivo Gradle de tu módulo (nivel de app), que suele ser app/build.gradle, de acuerdo con la siguiente tabla:

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

Cambios en la API

En esta sección, se describen las clases y los métodos del 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

utiliza #setContourMode para reemplazar 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 rostro.
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 que proporciona Google Mobile Vision, puedes migrar con facilidad a la biblioteca CameraXSource del Kit de AA, 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 Ya no está disponible.
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 internamente
CameraSource.PictureCallback Funciones obsoletas
CameraSource.ShutterCallback Funciones obsoletas

Cómo obtener ayuda

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