Migrer pour Android

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 communes 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 avec votre application. Les modèles fins doivent être téléchargés. Certaines API sont disponibles à la fois sous forme groupée et fine, d'autres uniquement sous l'une ou l'autre de ces formes :

APIGroupéeTrès fin
Reconnaissance de textex (bêta)x
Détection de visagesxx
Lecture de codes-barresxx
Ajout de libellés à des imagesxx
Détection d'objets et suivix-

Mettez à jour les dépendances pour les 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

APIAnciens artefactsNouvel 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

APIAnciens artefactsNouvel 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.1

AutoMLVision Edge

APIAncien artefactNouvel 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-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 avec votre application. Les modèles fins doivent être téléchargés :

APIGroupéeTrès fin
ID de languexx
Réponse suggéréexx (bêta)

Mettez à jour les dépendances pour les 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

APIAnciens artefactsNouvel 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

APIAnciens artefactsNouvel 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 de classe

Si votre classe apparaît dans ce tableau, apportez la modification indiquée :

Ancienne classeNouvelle classe
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 FirebaseVision du nom de la classe.
  • Supprimez les autres préfixes commençant par le préfixe Firebase du nom de la classe.

De plus, dans les noms de package, 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 Firebase getInstance() sont remplacés par des appels à la méthode getClient() du point d'entrée de la fonctionnalité.
  • L'instanciation par défaut de TextRecognizer a été supprimée, car nous avons introduit des bibliothèques supplémentaires pour reconnaître d'autres scripts tels que 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 sur com.google.android.gms:play-services-mlkit-text-recognition et utilisez TextRecognition.getClient(TextRecognizerOptions.DEFAULT_OPTIONS).
  • L'instanciation par défaut de ImageLabeler et ObjectDetector a été supprimée, car nous avons introduit la prise en charge des modèles personnalisés pour ces deux fonctionnalités. Par exemple, pour utiliser les options par défaut avec le modèle de base dans ImageLabeling, déclarez une dépendance sur com.google.mlkit:image-labeling et utilisez ImageLabeling.getClient(ImageLabelerOptions.DEFAULT_OPTIONS) en Java.
  • Tous les handles (détecteur/scanner/étiqueteur/traducteur...) sont fermables. Assurez-vous que la close() méthode est appelée lorsque ces objets ne sont plus utilisés. Si vous les utilisez dans un Fragment ou AppCompatActivity, vous pouvez appeler LifecycleOwner.getLifecycle() sur le Fragment ou AppCompatActivity, puis appeler Lifecycle.addObserver.
  • processImage() et detectInImage() dans les API Vision ont été renommées process() pour plus 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 xxxOptions ont été supprimées.
  • La méthode getBitmap() de la classe InputImage (qui remplace FirebaseVisionImage) n'est plus compatible avec l'interface publique. Consultez BitmapUtils.java dans l'exemple de démarrage rapide de ML Kit pour obtenir le bitmap converti à partir de différentes entrées.
  • FirebaseVisionImageMetadata a été supprimé. Vous pouvez simplement transmettre des métadonnées d'image telles que width, height, rotationDegrees et format dans les méthodes de construction d'InputImage.

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 à l'API

Lecture de codes-barres

Pour l'API Barcode Scanning, les modèles peuvent désormais être fournis de deux manières :

  • Via les services Google Play, également appelés "fins" (recommandé) : cela réduit la taille de l'application et le modèle est partagé entre les applications. Toutefois, les développeurs devront 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 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 "fine". Pour en savoir plus sur ces différences, consultez les consignes de l'API Barcode Scanning.

Détection de visages

Pour l'API Face Detection, les modèles peuvent être fournis de deux manières :

  • Via les services Google Play, également appelés "fins" (recommandé) : cela réduit la taille de l'application et le modèle est partagé entre les applications. Toutefois, les développeurs devront 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 signifie que le modèle est immédiatement utilisable.

Le comportement des implémentations est le même.

Translation

  • TranslateLanguage utilise 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'ajout de libellés aux images à l'aide d'AutoML est obsolète et sera désactivé le 15 juin 2027. Vous devez utiliser Cloud Storage pour héberger des 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 grossière, 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 grossier sont incluses dans la classe PredefinedCategory.

Voici un exemple d'ancien et de 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 d'ancien et de 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 la confiance de la classification d'un objet est faible, nous ne renvoyons aucun libellé.

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.json dans 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 d'accès au 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 Communauté où nous décrivons les canaux disponibles pour nous contacter.