Migrer pour Android

Restez organisé à l'aide des collections Enregistrez et classez les contenus selon vos préférences.

Mettre à jour les importations Gradle

Le nouveau SDK 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 fins doivent être téléchargés. Certaines API sont disponibles sous forme groupée ou fine, d'autres uniquement sous une seule forme:

APIAvec bundlesTrès fin
Reconnaissance de textex (bêta)x
Détection de visagesxx
Lecture de codes-barresxx
Étiquetage d'imagexx
Détectez les objets et assurez leur suivi.x-

Mettez à jour les dépendances pour les bibliothèques Android ML Kit dans votre fichier Gradle (au niveau de l'application) (généralement app/build.gradle) en suivant les tableaux ci-dessous:

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.0.3
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.5
Étiquetage d'image 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
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.0

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.1.0
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:18.0.2

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.1
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.1
com.google.mlkit:linkfirebase:17.0.0

API Natural Language

Les modèles groupés sont fournis dans le cadre de votre application. Les modèles fins doivent être téléchargés:

APIAvec bundlesTrè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 votre fichier Gradle (au niveau de l'application) (généralement app/build.gradle) en suivant les tableaux ci-dessous:

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.4
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.2

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

Modifier le nom des cours

Si votre classe figure dans ce tableau, apportez les modifications indiquées:

Ancienne classeNouveau 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.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

Pour les autres cours, 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 packages, remplacez le préfixe com.google.firebase.ml par com.google.mlkit.

Mettre à jour les noms des méthodes

Il y a un minimum de modifications à apporter au code:

  • Le détecteur/scanner/étiqueteur/traducteur... a été modifié. Chaque caractéristique possède désormais 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 ajouté des bibliothèques supplémentaires pour la reconnaissance 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, veuillez déclarer une dépendance à com.google.android.gms:play-services-mlkit-text-recognition et utiliser TextRecognition.getClient(TextRecognizerOptions.DEFAULT_OPTIONS).
  • L'instanciation par défaut pour ImageLabeler et ObjectDetector ont été supprimées, car nous avons introduit la prise en charge de 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 à com.google.mlkit:image-labeling et utilisez ImageLabeling.getClient(ImageLabelerOptions.DEFAULT_OPTIONS) en Java.
  • Toutes les poignées (détecteur/scanner/étiqueteur/traducteur...) peuvent être fermées. Assurez-vous que la méthode close() est appelée lorsque ces objets ne seront plus utilisés. Si vous les utilisez dans un fragment ou dans AppCompatActivity, vous pouvez le faire facilement en appelant LifecycleOwner.getLifecycle() sur le fragment ou AppCompatActivity, puis en appelant Lifecycle.addObserver.
  • processImage() et detectInImage() dans les API Vision ont été renommés process() pour plus de cohérence.
  • Les API Natural Language utilisent désormais le terme "tag de langue" (tel que défini par la norme BCP 47) au lieu de "code de langue".
  • Les méthodes Getter ont été supprimées dans les classes xxxOptions.
  • La méthode getBitmap() de la classe InputImage(remplace FirebaseVisionImage) n'est plus acceptée dans l'interface publique. Veuillez consulter BitmapUtils.java dans l'exemple de démarrage rapide ML Kit pour convertir le bitmap à partir de différentes entrées.
  • FirebaseVisionImageMetadata a été supprimé. Il vous suffit d'envoyer des métadonnées d'image telles que la largeur, la hauteur, la rotationDegrees dans les méthodes de construction d'InputImages.

Voici quelques exemples d'anciennes et de nouvelles méthodes Kotlin:

Anciennes offres

// 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()
    )

Nouveautés

// 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())
  

Voici quelques exemples d'anciennes et de nouvelles méthodes Java:

Anciennes offres

// 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());

Nouveautés

// 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());
  

Modifications spécifiques à l'API

Lecture de codes-barres

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

  • Via les services Google Play ("mince") (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é") : sa taille augmente, mais le modèle est immédiatement utilisable.

Les deux implémentations sont légèrement différentes : la version "groupée" présente 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 des visages

Pour l'API de détection de visages, il existe deux façons de fournir les modèles:

  • Via les services Google Play ("mince") (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 tags de langue (EN). Il s'agit également de @StringDef, au lieu de @IntDef, et la valeur de la constante est le tag de langue BCP 47 correspondant.

  • Si votre appli utilise l'option "Condition d'inactivité de l'appareil", sachez qu'elle a été supprimée et ne peut plus être utilisée. Vous pouvez toujours utiliser l'option "Recharge de l'appareil". Si vous voulez un comportement plus complexe, vous pouvez retarder l'appel de RemoteModelManager.download derrière votre propre logique.

AutoML Image Labeling

Si votre application utilise l'option de condition de téléchargement "Appareil inactif", sachez que cette option a été supprimée et ne peut plus être utilisée. Vous pouvez toujours utiliser l'option "Recharge de l'appareil".

Si vous voulez un comportement plus complexe, vous pouvez retarder l'appel de RemoteModelManager.download derrière votre propre logique.

Détection et suivi des objets

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 général sont incluses dans la classe PredefinedCategory.

Voici un exemple d'ancien et de nouveau code Kotlin:

Anciennes offres

if (object.classificationCategory == FirebaseVisionObject.CATEGORY_FOOD) {
    ...
}

Nouveautés

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:

Anciennes offres

if (object.getClassificationCategory() == FirebaseVisionObject.CATEGORY_FOOD) {
    ...
}

Nouveautés

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 aucun libellé.

Supprimer les dépendances Firebase (facultatif)

Cette étape ne s'applique que lorsque ces conditions sont remplies:

  • Firebase ML Kit est le seul composant Firebase que vous utilisez.
  • Vous n'utilisez que des API sur l'appareil.
  • Vous n'utilisez pas la diffusion de modèles.

Dans ce cas, vous pouvez supprimer 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 (au niveau de l'application) de votre application.
  • Remplacez le plug-in Gradle des services Google dans votre fichier Gradle (au niveau de l'application) (généralement app/build.gradle) par le plug-in Strict Version Matcher:

Avant

apply plugin: 'com.android.application'
apply plugin: 'com.google.gms.google-services'  // Google Services plugin

android {
  // …
}

Après

apply plugin: 'com.android.application'
apply plugin: 'com.google.android.gms.strict-version-matcher-plugin'

android {
  // …
}
  • Remplacez le chemin d'accès de classe du plug-in Gradle des services Google dans votre fichier Gradle (build.gradle) au niveau du projet (build.gradle) par le plug-in Strict Version Matcher:

Avant

buildscript {
  dependencies {
    // ...

    classpath 'com.google.gms:google-services:4.3.3'  // Google Services plugin
  }
}

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 indiquées sur le site d'assistance de Firebase.

Obtenir de l'aide

Si vous rencontrez des problèmes, veuillez consulter la page Communauté. Vous y trouverez la liste des canaux à votre disposition pour nous contacter.