En esta guía, se explica cómo migrar desde ML Kit para Firebase en Android.
Actualiza las importaciones de Gradle
El SDK de ML Kit solo requiere una dependencia para cada API de ML Kit. No es necesario que especifiques bibliotecas comunes, como firebase-ml-vision o firebase-ml-natural-language. ML Kit usa el espacio de nombres com.google.android.gms para las bibliotecas que dependen de los Servicios de Google Play.
APIs de Vision
Los modelos incluidos se entregan como parte de tu aplicación. Los modelos delgados se deben descargar. Algunas APIs están disponibles en formato agrupado y en formato delgado, mientras que otras solo están disponibles en uno de los dos formatos:
| API | Red de Búsqueda y Red de Display | Delgado |
|---|---|---|
| Reconocimiento de texto | X (beta) | x |
| Detección de rostro | x | x |
| Escaneo de códigos de barras | x | x |
| Etiquetado de imágenes | x | x |
| Detección y seguimiento de objetos | x | - |
Actualiza las dependencias de las bibliotecas de Android del ML Kit en el archivo Gradle (generalmente app/build.gradle.kts) de tu módulo (a nivel de la app) según las siguientes tablas:
Modelos agrupados
| API | Artefactos anteriores | Nuevo artefacto |
|---|---|---|
| Escaneo de códigos de barras | com.google.firebase:firebase-ml-vision:24.0.1 com.google.firebase:firebase-ml-vision-barcode-model:16.0.1 |
com.google.mlkit:barcode-scanning:17.3.0 |
| Contorno del rostro | com.google.firebase:firebase-ml-vision:24.0.1 com.google.firebase:firebase-ml-vision-face-model:19.0.0 |
com.google.mlkit:face-detection:16.1.7 |
| Etiquetado de imágenes | com.google.firebase:firebase-ml-vision:24.0.1 com.google.firebase:firebase-ml-vision-image-label-model:19.0.0 |
com.google.mlkit:image-labeling:17.0.9 |
| Detección de objetos | com.google.firebase:firebase-ml-vision:24.0.1 com.google.firebase:firebase-ml-vision-object-detection-model:19.0.3 |
com.google.mlkit:object-detection:17.0.2 |
Modelos delgados
| API | Artefactos anteriores | Nuevo artefacto |
|---|---|---|
| Escaneo de códigos de barras | com.google.firebase:firebase-ml-vision:24.0.1 | com.google.android.gms:play-services-mlkit-barcode-scanning:18.3.1 |
| Detección de rostro | com.google.firebase:firebase-ml-vision:24.0.1 | com.google.android.gms:play-services-mlkit-face-detection:17.1.0 |
| Reconocimiento de texto | com.google.firebase:firebase-ml-vision:24.0.1 | com.google.android.gms:play-services-mlkit-text-recognition:19.0.1 |
AutoMLVision Edge
| API | Artefacto anterior | Nuevo artefacto |
|---|---|---|
| AutoML sin descargas | com.google.firebase:firebase-ml-vision:24.0.1 com.google.firebase:firebase-ml-vision-automl:18.0.3 |
com.google.mlkit:image-labeling-custom:17.0.3 |
| AutoML con descarga | com.google.firebase:firebase-ml-vision:24.0.1 com.google.firebase:firebase-ml-vision-automl:18.0.3 |
com.google.mlkit:image-labeling-custom:17.0.3
Para alojar y descargar modelos personalizados, mueve tus modelos a Cloud Storage y agrega lógica de descarga en tu app para cargarlos con LocalModel. Para obtener más detalles, consulta la
guía de migración de Firebase ML a Cloud Storage. |
APIs de Natural Language
Los modelos incluidos se entregan como parte de tu aplicación. Los modelos delgados se deben descargar:
| API | Red de Búsqueda y Red de Display | Delgado |
|---|---|---|
| ID del idioma | x | x |
| Respuesta inteligente | x | X (beta) |
Actualiza las dependencias de las bibliotecas de Android del ML Kit en el archivo Gradle (generalmente app/build.gradle.kts) de tu módulo (a nivel de la app) según las siguientes tablas:
Modelos agrupados
| API | Artefactos anteriores | Nuevo artefacto |
|---|---|---|
| ID del idioma | com.google.firebase:firebase-ml-natural-language:22.0.0 com.google.firebase:firebase-ml-natural-language-language-id-model:20.0.7 |
com.google.mlkit:language-id:17.0.6 |
| Respuesta inteligente | com.google.firebase:firebase-ml-natural-language:22.0.0 com.google.firebase:firebase-ml-natural-language-smart-reply-model:20.0.7 |
com.google.mlkit:smart-reply:17.0.4 |
Modelos delgados
| API | Artefactos anteriores | Nuevo artefacto |
|---|---|---|
| ID del idioma | com.google.firebase:firebase-ml-natural-language:22.0.0 com.google.firebase:firebase-ml-natural-language-language-id-model:20.0.7 |
com.google.android.gms:play-services-mlkit-language-id:17.0.0 |
| Respuesta inteligente | com.google.firebase:firebase-ml-natural-language:22.0.0 com.google.firebase:firebase-ml-natural-language-smart-reply-model:20.0.7 |
com.google.android.gms:play-services-mlkit-smart-reply:16.0.0-beta1 |
Actualiza los nombres de las clases
Si tu clase aparece en esta tabla, realiza el cambio indicado:
| Clase anterior | Clase nueva |
|---|---|
| com.google.firebase.ml.common.FirebaseMLException | com.google.mlkit.common.MlKitException |
| com.google.firebase.ml.vision.common.FirebaseVisionImage | com.google.mlkit.vision.common.InputImage |
| com.google.firebase.ml.vision.barcode.FirebaseVisionBarcodeDetector | com.google.mlkit.vision.barcode.BarcodeScanner |
| com.google.firebase.ml.vision.labeler.FirebaseVisionImageLabel | com.google.mlkit.vision.label.ImageLabeler |
| com.google.firebase.ml.vision.barcode.FirebaseVisionBarcodeDetector | com.google.mlkit.vision.barcode.BarcodeScanner |
| com.google.firebase.ml.vision.automl.FirebaseAutoMLLocalModel | com.google.mlkit.common.model.LocalModel |
| com.google.firebase.ml.vision.automl.FirebaseAutoMLRemoteModel | com.google.mlkit.common.model.LocalModel Requiere descarga manual. Los modelos remotos alojados en Firebase dejaron de estar disponibles. Para obtener más detalles, consulta la guía de migración de Firebase ML a Cloud Storage. |
| com.google.firebase.ml.vision.label.FirebaseVisionOnDeviceImageLabelerOptions | com.google.mlkit.vision.label.defaults.ImageLabelerOptions |
| com.google.firebase.ml.vision.label.FirebaseVisionImageLabel | com.google.mlkit.vision.label.ImageLabel |
| com.google.firebase.ml.vision.label.FirebaseVisionOnDeviceAutoMLImageLabelerOptions | com.google.mlkit.vision.label.custom.CustomImageLabelerOptions |
| com.google.firebase.ml.vision.objects.FirebaseVisionObjectDetectorOptions | com.google.mlkit.vision.objects.defaults.ObjectDetectorOptions |
Para otras clases, sigue estas reglas:
- Quita el prefijo
FirebaseVisiondel nombre de la clase. - Quita otros prefijos que comiencen con el prefijo
Firebasedel nombre de la clase.
Además, en los nombres de los paquetes, reemplaza el prefijo com.google.firebase.ml por com.google.mlkit.
Actualiza los nombres de los métodos
Los cambios en el código son mínimos:
- Se cambió la instancia del detector, el escáner, el etiquetador, el traductor, etcétera. Cada función ahora tiene su propio punto de entrada. Por ejemplo:
BarcodeScanning,TextRecognition,ImageLabeling,Translation… Las llamadas al serviciogetInstance()de Firebase se reemplazan por llamadas al métodogetClient()del punto de entrada de la función. - Se quitó la instancia predeterminada para
TextRecognizer, ya que introdujimos bibliotecas adicionales para reconocer otros sistemas de escritura, como el chino y el coreano. Para usar las opciones predeterminadas con el modelo de reconocimiento de texto del sistema de escritura latino, declara una dependencia encom.google.android.gms:play-services-mlkit-text-recognitiony usaTextRecognition.getClient(TextRecognizerOptions.DEFAULT_OPTIONS). - Se quitó la instancia predeterminada para
ImageLabeleryObjectDetector, ya que incorporamos la compatibilidad con modelos personalizados para estas dos funciones. Por ejemplo, para usar opciones predeterminadas con el modelo base enImageLabeling, declara una dependencia encom.google.mlkit:image-labelingy usaImageLabeling.getClient(ImageLabelerOptions.DEFAULT_OPTIONS)en Java. - Todos los identificadores (detector, escáner, etiquetador, traductor, etc.) se pueden cerrar. Asegúrate de que se llame al método
close()cuando ya no se usen esos objetos. Si los usas en unFragmento unAppCompatActivity, una forma de hacerlo es llamar aLifecycleOwner.getLifecycle()en elFragmento elAppCompatActivityy, luego, llamar aLifecycle.addObserver. - Para mantener la coherencia, se cambió el nombre de
processImage()ydetectInImage()en las APIs de Vision aprocess(). - Las APIs de Natural Language ahora usan el término "etiqueta de idioma" (según se define en el estándar BCP 47) en lugar de "código de idioma".
- Se quitaron los métodos getter de las clases
xxxOptions. - Ya no se admite el método
getBitmap()en la claseInputImage(que reemplaza aFirebaseVisionImage) como parte de la interfaz pública. ConsultaBitmapUtils.javaen la muestra de inicio rápido de ML Kit para obtener un mapa de bits convertido a partir de varias entradas. - Se quitó
FirebaseVisionImageMetadata, por lo que solo puedes pasar metadatos de imágenes, comowidth,height,rotationDegreesyformat, a los métodos de construcción deInputImage.
Estos son algunos ejemplos de métodos de Kotlin antiguos y nuevos:
Antiguo
// Construct image labeler with base model and default options. val imageLabeler = FirebaseVision.getInstance().onDeviceImageLabeler // Construct object detector with base model and default options. val objectDetector = FirebaseVision.getInstance().onDeviceObjectDetector // Construct face detector with given options val faceDetector = FirebaseVision.getInstance().getVisionFaceDetector(options) // Construct image labeler with local AutoML model val localModel = FirebaseAutoMLLocalModel.Builder() .setAssetFilePath("automl/manifest.json") .build() val autoMLImageLabeler = FirebaseVision.getInstance() .getOnDeviceAutoMLImageLabeler( FirebaseVisionOnDeviceAutoMLImageLabelerOptions.Builder(localModel) .setConfidenceThreshold(0.3F) .build() )
Nuevo
// Construct image labeler with base model and default options. val imageLabeler = ImageLabeling.getClient(ImageLabelerOptions.DEFAULT_OPTIONS) // Optional: add lifecycle observer lifecycle.addObserver(imageLabeler) // Construct object detector with base model and default options. val objectDetector = ObjectDetection.getClient( ObjectDetectorOptions.DEFAULT_OPTIONS ) // Construct face detector with given options val faceDetector = FaceDetection.getClient(options) // Construct image labeler with local AutoML model val localModel = LocalModel.Builder() .setAssetManifestFilePath("automl/manifest.json") .build() val autoMLImageLabeler = ImageLabeling.getClient( CustomImageLabelerOptions.Builder(localModel) .setConfidenceThreshold(0.3F).build())
Estos son algunos ejemplos de métodos de Java antiguos y nuevos:
Antiguo
// Construct image labeler with base model and default options. FirebaseVisionImageLabeler imagelLabeler = FirebaseVision.getInstance().getOnDeviceImageLabeler(); // Construct object detector with base model and default options. FirebaseVisionObjectDetector objectDetector = FirebaseVision.getInstance().getOnDeviceObjectDetector(); // Construct face detector with given options FirebaseVisionFaceDetector faceDetector = FirebaseVision.getInstance().getVisionFaceDetector(options); // Construct image labeler with local AutoML model FirebaseAutoMLLocalModel localModel = new FirebaseAutoMLLocalModel.Builder() .setAssetFilePath("automl/manifest.json") .build(); FirebaseVisionImageLabeler autoMLImageLabeler = FirebaseVision.getInstance() .getOnDeviceAutoMLImageLabeler( FirebaseVisionOnDeviceAutoMLImageLabelerOptions.Builder(localModel) .setConfidenceThreshold(0.3F) .build());
Nuevo
// Construct image labeler with base model and default options. ImageLabeler imageLabeler = ImageLabeling.getClient( ImageLabelerOptions.DEFAULT_OPTIONS ); // Optional: add lifecycle observer getLifecycle().addObserver(imageLabeler); // Construct object detector with base model and default options. ObjectDetector objectDetector = ObjectDetection.getClient( ObjectDetectorOptions.DEFAULT_OPTIONS ); // Construct face detector with given options FaceDetector faceDetector = FaceDetection.getClient(options); // Construct image labeler with local AutoML model LocalModel localModel = new LocalModel.Builder() .setAssetManifestFilePath("automl/manifest.json") .build(); ImageLabeler autoMLImageLabeler = ImageLabeling.getClient( new CustomImageLabelerOptions.Builder(localModel) .setConfidenceThreshold(0.3F).build());
Cambios específicos de la API
Escaneo de códigos de barras
En el caso de la API de Barcode Scanning, ahora hay dos formas en que se pueden entregar los modelos:
- A través de los Servicios de Google Play, también conocidos como "delgados" (recomendado): Esto reduce el tamaño de la app, y el modelo se comparte entre las aplicaciones. Sin embargo, los desarrolladores deberán asegurarse de que el modelo se descargue antes de usarlo por primera vez.
- Con el APK de tu app, también conocido como "empaquetado": Esto aumenta el tamaño de la app, pero significa que el modelo se puede usar de inmediato.
Las dos implementaciones son ligeramente diferentes, y la versión "agrupada" tiene varias mejoras en comparación con la versión "delgada". Puedes encontrar detalles sobre estas diferencias en los lineamientos de la API de Barcode Scanning.
Detección de rostro
En el caso de la API de Face Detection, los modelos se pueden entregar de dos maneras:
- A través de los Servicios de Google Play, también conocidos como "delgados" (recomendado): Esto reduce el tamaño de la app, y el modelo se comparte entre las aplicaciones. Sin embargo, los desarrolladores deberán asegurarse de que el modelo se descargue antes de usarlo por primera vez.
- Con el APK de tu app, también conocido como "empaquetado": Esto aumenta el tamaño de descarga de la app, pero significa que el modelo se puede usar de inmediato.
El comportamiento de las implementaciones es el mismo.
Traducción
TranslateLanguageahora usa nombres legibles para sus constantes (p.ej.,ENGLISH) en lugar de etiquetas de idioma (EN). También son@StringDef, en lugar de@IntDef, y el valor de la constante es la etiqueta de idioma BCP 47 correspondiente.
AutoML Image Labeling (obsoleto)
Se dejó de usar la descarga de modelos personalizados para el etiquetado de imágenes con AutoML y se desactivará el 15 de junio de 2027. En su lugar, debes usar Cloud Storage para alojar modelos y agregar lógica de descarga a tu app para descargar los modelos. Para obtener más información, consulta la guía de migración de Firebase ML a Cloud Storage.
Detección y seguimiento de objetos
Si tu app usa la detección de objetos con clasificación aproximada, ten en cuenta que el nuevo SDK cambió la forma en que devuelve la categoría de clasificación para los objetos detectados.
La categoría de clasificación se devuelve como una instancia de DetectedObject.Label en lugar de un número entero. Todas las categorías posibles para el clasificador grueso se incluyen en la clase PredefinedCategory.
A continuación, se muestra un ejemplo del código de Kotlin anterior y nuevo:
Antiguo
if (object.classificationCategory == FirebaseVisionObject.CATEGORY_FOOD) { ... }
Nuevo
if (!object.labels.isEmpty() && object.labels[0].text == PredefinedCategory.FOOD) { ... } // or if (!object.labels.isEmpty() && object.labels[0].index == PredefinedCategory.FOOD_INDEX) { ... }
A continuación, se muestra un ejemplo del código Java anterior y nuevo:
Antiguo
if (object.getClassificationCategory() == FirebaseVisionObject.CATEGORY_FOOD) { ... }
Nuevo
if (!object.getLabels().isEmpty() && object.getLabels().get(0).getText().equals(PredefinedCategory.FOOD)) { ... } // or if (!object.getLabels().isEmpty() && object.getLabels().get(0).getIndex() == PredefinedCategory.FOOD_INDEX) { ... }
Se quitó la categoría "desconocido". Cuando la confianza de la clasificación de un objeto es baja, simplemente no devolvemos ninguna etiqueta.
Quita las dependencias de Firebase
Quita las dependencias de Firebase después de la migración. Sigue estos pasos:
- Borra el archivo de configuración de Firebase. Para ello, borra el archivo de configuración
google-services.jsonen el directorio del módulo (nivel de app) de tu app. - Reemplaza el complemento Gradle de los servicios de Google en el archivo Gradle de tu módulo (a nivel de app) (generalmente
app/build.gradle.kts) por el complemento Strict Version Matcher:
Antes
plugins { id("com.android.application") id("com.google.gms.google-services") } android { // … }
Después
plugins { id("com.android.application") id("com.google.android.gms.strict-version-matcher-plugin") } android { // … }
- Reemplaza la ruta de clase del complemento de Gradle para Servicios de Google en el archivo de Gradle (
build.gradle.kts) de tu proyecto (a nivel de raíz) por la del complemento Strict Version Matcher:
Antes
buildscript { dependencies { // ... classpath("com.google.gms:google-services:4.3.3") } }
Después
buildscript { dependencies { // ... classpath("com.google.android.gms:strict-version-matcher-plugin:1.2.1") } }
Borra tu app de Firebase en Firebase console según las instrucciones del sitio de asistencia de Firebase.
Cómo obtener ayuda
Si tienes algún problema, consulta nuestra página de la comunidad, en la que se describen los canales disponibles para comunicarte con nosotros.