Ce guide explique comment migrer depuis ML Kit pour Firebase pour Android.
Mettre à jour les importations Gradle
Le SDK ML Kit ne nécessite qu'une seule dépendance pour chaque API ML Kit. Vous n'avez pas besoin de spécifier des bibliothèques courantes telles que firebase-ml-vision ou firebase-ml-natural-language. ML Kit utilise l'espace de noms com.google.android.gms pour les bibliothèques qui dépendent des services Google Play.
API Vision
Les modèles groupés sont fournis dans le cadre de votre application. Les modèles légers doivent être téléchargés. Certaines API sont disponibles à la fois sous forme groupée et sous forme légère, d'autres uniquement sous l'une ou l'autre forme :
| API | Groupée | Très fin |
|---|---|---|
| Reconnaissance de texte | x (bêta) | x |
| Détection de visages | x | x |
| Lecture de codes-barres | x | x |
| Ajout de libellés à des images | x | x |
| Détectez les objets et assurez leur suivi. | x | - |
Mettez à jour les dépendances des bibliothèques Android ML Kit dans le fichier Gradle de votre module (au niveau de l'application, généralement app/build.gradle.kts) en fonction des tableaux suivants :
Modèles groupés
| API | Anciens artefacts | Nouvel artefact |
|---|---|---|
| Lecture de codes-barres | 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 |
| Contour du visage | 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 |
| Ajout de libellés à des images | 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 |
| Détection d'objets | 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 |
Modèles fins
| API | Anciens artefacts | Nouvel artefact |
|---|---|---|
| Lecture de codes-barres | com.google.firebase:firebase-ml-vision:24.0.1 | com.google.android.gms:play-services-mlkit-barcode-scanning:18.3.1 |
| Détection de visages | com.google.firebase:firebase-ml-vision:24.0.1 | com.google.android.gms:play-services-mlkit-face-detection:17.1.0 |
| Reconnaissance de texte | com.google.firebase:firebase-ml-vision:24.0.1 | com.google.android.gms:play-services-mlkit-text-recognition:19.0.2 |
AutoML Vision Edge
| API | Ancien artefact | Nouvel artefact |
|---|---|---|
| AutoML sans téléchargement | 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 avec téléchargement | 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
Pour héberger et télécharger des modèles personnalisés, déplacez vos modèles vers Cloud Storage et ajoutez une logique de téléchargement dans votre application pour les charger à l'aide de LocalModel. Pour en savoir plus, consultez le
guide de migration de Firebase ML vers Cloud Storage. |
API Natural Language
Les modèles groupés sont fournis dans le cadre de votre application. Les modèles légers doivent être téléchargés :
| API | Groupée | Très fin |
|---|---|---|
| ID de langue | x | x |
| Réponse suggérée | x | x (bêta) |
Mettez à jour les dépendances des bibliothèques Android ML Kit dans le fichier Gradle de votre module (au niveau de l'application, généralement app/build.gradle.kts) en fonction des tableaux suivants :
Modèles groupés
| API | Anciens artefacts | Nouvel artefact |
|---|---|---|
| ID de langue | 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 |
| Réponse suggérée | 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 |
Modèles fins
| API | Anciens artefacts | Nouvel artefact |
|---|---|---|
| ID de langue | 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 |
| Réponse suggérée | 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 |
Mettre à jour les noms des classes
Si votre classe apparaît dans ce tableau, apportez la modification indiquée :
| Ancienne classe | Nouveau cours |
|---|---|
| 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 Nécessite un téléchargement manuel. Les modèles distants hébergés par Firebase sont obsolètes. Pour en savoir plus, consultez le guide de migration de Firebase ML vers 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 |
Pour les autres classes, suivez ces règles :
- Supprimez le préfixe
FirebaseVisiondu nom de la classe. - Supprimez les autres préfixes commençant par
Firebasedu nom de la classe.
De plus, dans les noms de packages, remplacez le préfixe com.google.firebase.ml par com.google.mlkit.
Mettre à jour les noms de méthode
Les modifications de code sont minimes :
- L'instanciation du détecteur/scanner/étiqueteur/traducteur... a été modifiée. Chaque fonctionnalité dispose désormais de son propre point d'entrée. Par exemple :
BarcodeScanning,TextRecognition,ImageLabeling,Translation... Les appels au service FirebasegetInstance()sont remplacés par des appels à la méthodegetClient()du point d'entrée de la fonctionnalité. - L'instanciation par défaut de
TextRecognizera été supprimée, car nous avons introduit des bibliothèques supplémentaires pour reconnaître d'autres scripts, comme le chinois et le coréen. Pour utiliser les options par défaut avec le modèle de reconnaissance de texte en alphabet latin, déclarez une dépendance surcom.google.android.gms:play-services-mlkit-text-recognitionet utilisezTextRecognition.getClient(TextRecognizerOptions.DEFAULT_OPTIONS). - L'instanciation par défaut pour
ImageLabeleretObjectDetectora été supprimée, car nous avons introduit la compatibilité avec les modèles personnalisés pour ces deux fonctionnalités. Par exemple, pour utiliser les options par défaut avec le modèle de base dansImageLabeling, déclarez une dépendance surcom.google.mlkit:image-labelinget utilisezImageLabeling.getClient(ImageLabelerOptions.DEFAULT_OPTIONS)en Java. - Tous les handles (détecteur/scanner/étiqueteur/traducteur...) peuvent être fermés. Assurez-vous que la méthode
close()est appelée lorsque ces objets ne sont plus utilisés. Si vous les utilisez dans unFragmentou unAppCompatActivity, vous pouvez appelerLifecycleOwner.getLifecycle()sur leFragmentou leAppCompatActivity, puis appelerLifecycle.addObserver. processImage()etdetectInImage()dans les API Vision ont été renommésprocess()pour des raisons de cohérence.- Les API Natural Language utilisent désormais le terme "balise de langue" (tel que défini par la norme BCP 47) au lieu de "code de langue".
- Les méthodes getter des classes
xxxOptionsont été supprimées. - La méthode
getBitmap()de la classeInputImage(qui remplaceFirebaseVisionImage) n'est plus compatible avec l'interface publique. ConsultezBitmapUtils.javadans l'exemple de démarrage rapide de ML Kit pour obtenir un bitmap converti à partir de différentes entrées. FirebaseVisionImageMetadataa été supprimé. Vous pouvez simplement transmettre les métadonnées d'image telles quewidth,height,rotationDegrees,formatdans les méthodes de construction deInputImage.
Voici quelques exemples d'anciennes et de nouvelles méthodes Kotlin :
Ancienne version
// 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() )
Nouveau
// 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())
Voici quelques exemples d'anciennes et de nouvelles méthodes Java :
Ancienne version
// 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());
Nouveau
// 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());
Modifications spécifiques aux API
Lecture de codes-barres
Pour l'API Barcode Scanning, il existe désormais deux façons de diffuser les modèles :
- Via les services Google Play, également appelés "thin" (recommandé) : cela réduit la taille de l'application, et le modèle est partagé entre les applications. Toutefois, les développeurs doivent s'assurer que le modèle est téléchargé avant de l'utiliser pour la première fois.
- Avec l'APK de votre application, également appelé "groupé" : cela augmente la taille de l'application, mais cela signifie que le modèle est immédiatement utilisable.
Les deux implémentations sont légèrement différentes, la version "groupée" présentant un certain nombre d'améliorations par rapport à la version "allégée". Pour en savoir plus sur ces différences, consultez les consignes de l'API Barcode Scanning.
Détection de visages
Pour l'API de détection de visages, les modèles peuvent être fournis de deux manières :
- Via les services Google Play, également appelés "thin" (recommandé) : cela réduit la taille de l'application, et le modèle est partagé entre les applications. Toutefois, les développeurs doivent s'assurer que le modèle est téléchargé avant de l'utiliser pour la première fois.
- Avec l'APK de votre application, également appelé "groupé" : cela augmente la taille de téléchargement de l'application, mais cela signifie que le modèle est immédiatement utilisable.
Le comportement des implémentations est le même.
Translation
TranslateLanguageutilise désormais des noms lisibles pour ses constantes (par exemple,ENGLISH) au lieu de balises de langue (EN). Elles sont également désormais@StringDef, au lieu de@IntDef, et la valeur de la constante est la balise de langue BCP 47 correspondante.
AutoML Image Labeling (obsolète)
Le téléchargement de modèles personnalisés pour l'étiquetage d'images à l'aide d'AutoML est obsolète et sera arrêté le 15 juin 2027. Vous devez utiliser Cloud Storage pour héberger les modèles et ajouter une logique de téléchargement à votre application pour télécharger les modèles à la place. Pour en savoir plus, consultez le guide de migration de Firebase ML vers Cloud Storage.
Détection d'objets et suivi
Si votre application utilise la détection d'objets avec une classification approximative, sachez que le nouveau SDK a modifié la façon dont il renvoie la catégorie de classification des objets détectés.
La catégorie de classification est renvoyée en tant qu'instance de DetectedObject.Label au lieu d'un entier. Toutes les catégories possibles pour le classificateur approximatif sont incluses dans la classe PredefinedCategory.
Voici un exemple de l'ancien et du nouveau code Kotlin :
Ancienne version
if (object.classificationCategory == FirebaseVisionObject.CATEGORY_FOOD) { ... }
Nouveau
if (!object.labels.isEmpty() && object.labels[0].text == PredefinedCategory.FOOD) { ... } // or if (!object.labels.isEmpty() && object.labels[0].index == PredefinedCategory.FOOD_INDEX) { ... }
Voici un exemple de l'ancien et du nouveau code Java :
Ancienne version
if (object.getClassificationCategory() == FirebaseVisionObject.CATEGORY_FOOD) { ... }
Nouveau
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) { ... }
La catégorie "Inconnu" a été supprimée. Lorsque le niveau de confiance de la classification d'un objet est faible, nous ne renvoyons aucune étiquette.
Supprimer les dépendances Firebase
Supprimez les dépendances Firebase après la migration. Procédez comme suit :
- Supprimez le fichier de configuration Firebase en supprimant le fichier de configuration
google-services.jsondans le répertoire du module (au niveau de l'application) de votre application. - Remplacez le plug-in Gradle des services Google dans le fichier Gradle de votre module (au niveau de l'application, généralement
app/build.gradle.kts) par le plug-in Strict Version Matcher :
Avant
plugins { id("com.android.application") id("com.google.gms.google-services") } android { // … }
Après
plugins { id("com.android.application") id("com.google.android.gms.strict-version-matcher-plugin") } android { // … }
- Remplacez le chemin de classe du plug-in Gradle des services Google dans le fichier Gradle de votre projet (au niveau racine) (
build.gradle.kts) par celui du plug-in Strict Version Matcher :
Avant
buildscript { dependencies { // ... classpath("com.google.gms:google-services:4.3.3") } }
Après
buildscript { dependencies { // ... classpath("com.google.android.gms:strict-version-matcher-plugin:1.2.1") } }
Supprimez votre application Firebase dans la console Firebase en suivant les instructions du site d'assistance Firebase.
Obtenir de l'aide
Si vous rencontrez des problèmes, veuillez consulter notre page de la communauté, où nous décrivons les canaux disponibles pour nous contacter.