Actualizar importaciones de Gradle
El nuevo SDK solo requiere una dependencia para cada API del Kit de AA. No es necesario especificar bibliotecas comunes como firebase-ml-vision
o firebase-ml-natural-language
.
El Kit de AA usa el espacio de nombres com.google.android.gms
para las bibliotecas que dependen de los Servicios de Google Play.
API de Vision
Los modelos en paquetes se entregan como parte de tu aplicación. Se deben descargar los modelos delgados. Algunas API están disponibles en paquetes de paquetes y delgadas, otras solo en un formato o en el otro:
API | Red de Búsqueda y Red de Display | Fino |
---|---|---|
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 para las bibliotecas de Android del Kit de AA en el archivo Gradle (generalmente app/build.gradle
) de tu módulo (a nivel de app) según las siguientes tablas:
Modelos agrupados
API | Artefactos antiguos | 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.0.3 |
Contorno de 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.5 |
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.7 |
Object Detection | 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.0 |
Modelos finos
API | Artefactos antiguos | 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.1.0 |
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:18.0.2 |
AutoMLVision Edge
API | Artefacto anterior | Nuevo artefacto |
---|---|---|
AutoML sin 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.1. |
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.1
com.google.mlkit:linkfirebase:17.0.0 |
API de Natural Language
Los modelos en paquetes se entregan como parte de tu aplicación. Se deben descargar los modelos delgados:
API | Red de Búsqueda y Red de Display | Fino |
---|---|---|
ID de idioma | x | x |
Respuesta inteligente | x | x (Beta) |
Actualiza las dependencias para las bibliotecas de Android del Kit de AA en el archivo Gradle (generalmente app/build.gradle
) de tu módulo (a nivel de app) según las siguientes tablas:
Modelos agrupados
API | Artefactos antiguos | Nuevo artefacto |
---|---|---|
ID de 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.4 |
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.2. |
Modelos finos
API | Artefactos antiguos | Nuevo artefacto |
---|---|---|
ID de 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 | Nueva clase |
---|---|
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.CustomRemoteModel. |
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
FirebaseVision
del nombre de la clase. - Quita otros prefijos que comiencen con el prefijo
Firebase
del nombre de la clase.
Además, en los nombres de paquetes, reemplaza el prefijo com.google.firebase.ml
por com.google.mlkit
.
Actualizar nombres de métodos
Hay cambios mínimos en el código:
- Detector/escáner/etiquetador/traductor... se modificó la creación de instancias. Cada función ahora tiene su propio punto de entrada. Por ejemplo: BarcodeScanning, TextRecognition, ImageLabeling, Translation... Las llamadas al servicio
getInstance()
de Firebase se reemplazan por las llamadas al métodogetClient()
del punto de entrada de la función. - Se quitó la creación de instancias predeterminada para TextRecognizer, ya que presentamos bibliotecas adicionales para reconocer otras secuencias de comandos, como el chino y el coreano. Para usar las opciones predeterminadas con el modelo de reconocimiento de texto en latín, declara una dependencia en
com.google.android.gms:play-services-mlkit-text-recognition
y usaTextRecognition.getClient(TextRecognizerOptions.DEFAULT_OPTIONS)
. - Se quitó la creación de instancias predeterminada para ImageLabeler y ObjectDetector, ya que agregamos compatibilidad de modelo personalizado para estas dos funciones. Por ejemplo, para usar las opciones predeterminadas con el modelo base en ImageLabeling, declara una dependencia en
com.google.mlkit:image-labeling
y usaImageLabeling.getClient(ImageLabelerOptions.DEFAULT_OPTIONS)
en Java. - Todos los controladores (detector/escanerador/etiquetador/traductor...) son cercanos. Asegúrate de que se llame al método
close()
cuando esos objetos ya no se usen. Si las usas en Fragment o AppCompatActivity, una forma fácil de hacerlo es llamar a LifecycleOwner.getLifecycle() en Fragment o AppCompatActivity y, luego, llamar a Lifecycle.addObserver - Se cambió el nombre de
processImage()
ydetectInImage()
en las API de Vision aprocess()
para mantener la coherencia. - Las API de Natural Language ahora usan el término "etiqueta de idioma" (como se define en el estándar BCP 47) en lugar de "código de idioma".
- Se quitaron los métodos get en las clases xxxOptions.
- Ya no se admite el método getBitmap() en la clase InputImage(reemplazar
FirebaseVisionImage
) como parte de la interfaz pública. ConsultaBitmapUtils.java
en la muestra de inicio rápido del Kit de AA para obtener el mapa de bits convertido de varias entradas. - FirebaseVisionImageMetadata, pero simplemente puedes pasar los metadatos de imágenes, como el ancho, la altura o la rotación a los métodos de construcción de InputImages.
Estos son algunos ejemplos de los métodos antiguos y nuevos de Kotlin:
Antiguas
// 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 life cycle 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 antiguos y nuevos de Java:
Antiguas
// 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 life cycle 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
Para la API de Barcode Scanning, ahora hay dos formas de entregar los modelos:
- Mediante Servicios de Google Play, también conocido como “delgado” (recomendado), se reduce el tamaño de la app y el modelo se comparte entre aplicaciones. Sin embargo, los desarrolladores deberán asegurarse de descargar el modelo antes de usarlo por primera vez.
- Con el APK de tu app, también conocido como "paquete", 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 una serie de mejoras con respecto a la versión “acotada”. Para obtener más información sobre estas diferencias, consulta los lineamientos de la API de escaneo de códigos de barras.
Detección de rostro
Para la API de detección de rostro, hay dos formas de entregar los modelos:
- Mediante Servicios de Google Play, también conocido como “delgado” (recomendado), se reduce el tamaño de la app y el modelo se comparte entre aplicaciones. Sin embargo, los desarrolladores deberán asegurarse de descargar el modelo antes de usarlo por primera vez.
- Con el APK de tu app, también conocido como "paquete", 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.
Translation
TranslateLanguage
ahora 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 coincidente.Si tu app usa la opción de condición de descarga "Dispositivo inactivo", ten en cuenta que esta opción se quitó y ya no se puede usar. Sin embargo, puedes usar la opción "Carga del dispositivo". Si deseas un comportamiento más complejo, puedes retrasar las llamadas a
RemoteModelManager.download
detrás de tu propia lógica.
AutoML Image Labeling
Si tu app usa la opción de condición de descarga "dispositivo inactivo", ten en cuenta que se quitó y no se puede usar más. Puedes usar la opción "Carga del dispositivo".
Si deseas un comportamiento más complejo, puedes retrasar la llamada a RemoteModelManager.download
detrás de tu propia lógica.
Detección y seguimiento de objetos
Si tu app usa la detección de objetos con clasificación general, ten en cuenta que el SDK nuevo cambió la forma en que muestra la categoría de clasificación para los objetos detectados.
La categoría de clasificación se muestra como una instancia de DetectedObject.Label
en lugar de un número entero. Todas las categorías posibles para el clasificador grosero se incluyen en la clase PredefinedCategory
.
A continuación, se muestra un ejemplo del código Kotlin nuevo y antiguo:
Antiguas
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 de Java anterior y del nuevo:
Antiguas
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 "desconocida". Cuando la confianza de la clasificación de un objeto es baja, simplemente no mostramos ninguna etiqueta.
Quita las dependencias de Firebase (opcional)
Este paso solo se aplica cuando se cumplen estas condiciones:
- El kit de AA de Firebase es el único componente que usas.
- Solo usas API en el dispositivo.
- No usas la entrega del modelo.
Si este es el caso, puedes quitar las dependencias de Firebase después de la migración. Lleve a cabo los pasos siguientes:
- Para quitar el archivo de configuración de Firebase, borra el archivo de configuración google-services.json en el directorio del módulo (nivel de app) de tu app.
- Reemplaza el complemento de Gradle de los Servicios de Google en el archivo Gradle (generalmente app/build.gradle) de tu módulo (nivel de app) con el complemento de Strict Version Matcher:
Antes
apply plugin: 'com.android.application' apply plugin: 'com.google.gms.google-services' // Google Services plugin android { // … }
Después
apply plugin: 'com.android.application' apply plugin: 'com.google.android.gms.strict-version-matcher-plugin' android { // … }
- Reemplaza la ruta de clase del complemento de Google Services para Gradle en el archivo Gradle (build.gradle) de tu proyecto (nivel de raíz) por la del complemento de Strict Version Matcher:
Antes
buildscript { dependencies { // ... classpath 'com.google.gms:google-services:4.3.3' // Google Services plugin } }
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 en el sitio de asistencia de Firebase.
Cómo obtener ayuda
Si tienes algún problema, visita la página de la comunidad, donde detallamos los canales disponibles para comunicarte con nosotros.