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 avec votre application. Les modèles minces doivent être téléchargés. Certaines API sont disponibles sous forme groupée et fine, d'autres sous une forme ou sous l'autre:
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 |
Étiquetage d'images | x | x |
Détectez les objets et assurez leur suivi. | x | - |
Mettez à jour les dépendances des bibliothèques Android de ML Kit dans le fichier Gradle de votre module (au niveau de l'application) (généralement app/build.gradle
) en suivant les 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.2.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.6 |
Étiquetage d'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.8 |
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.1 |
Modèles minces
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.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:19.0.0 |
AutoMLVision 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.2 |
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.2
com.google.mlkit:linkfirebase:17.0.0 |
API Natural Language
Les modèles groupés sont fournis avec votre application. Les modèles minces 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 de ML Kit dans le fichier Gradle de votre module (au niveau de l'application) (généralement app/build.gradle
) en suivant les 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.5 |
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.3 |
Modèles minces
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 |
Modifier les noms des classes
Si votre cours apparaît dans ce tableau, apportez la modification indiquée:
Ancien cours | 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.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
Les modifications de code sont minimes:
- L'instanciation du détecteur/scanner/étiqueteur/du traducteur a été modifiée. Chaque fonctionnalité dispose désormais de son propre point d'entrée. Exemples: Lecture de codes-barres, reconnaissance de texte, étiquetage d'images, traduction... Les appels au service Firebase
getInstance()
sont remplacés par des appels à la méthodegetClient()
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 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 script latin, veuillez déclarer une dépendance à
com.google.android.gms:play-services-mlkit-text-recognition
et utiliserTextRecognition.getClient(TextRecognizerOptions.DEFAULT_OPTIONS)
. - L'instanciation par défaut pour ImageLabeler et ObjectDetector a été supprimée, car nous avons introduit la prise en charge des modèles personnalisés pour ces deux caractéristiques. Par exemple, pour utiliser les options par défaut avec le modèle de base dans ImageLabeling, veuillez déclarer une dépendance sur
com.google.mlkit:image-labeling
et utiliserImageLabeling.getClient(ImageLabelerOptions.DEFAULT_OPTIONS)
en Java. - Toutes les poignées (détecteur/scanner/étiqueteur/traducteur, etc.) peuvent être fermées. Assurez-vous que la méthode
close()
est appelée lorsque ces objets ne sont plus utilisés. Si vous les utilisez dans un fragment ou AppCompatActivity, vous pouvez facilement appeler LifecycleOwner.getLifecycle() sur le fragment ou AppCompatActivity, puis appeler Lifecycle.addObserver. processImage()
etdetectInImage()
ont été renommésprocess()
dans les API Vision 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".
- Suppression des méthodes Getter des classes xxxOptions.
- La méthode getBitmap() de la classe InputImage(en remplaçant
FirebaseVisionImage
) n'est plus prise en charge dans l'interface publique. Reportez-vous àBitmapUtils.java
dans l'exemple de démarrage rapide de ML Kit pour obtenir la conversion de bitmap à partir de différentes entrées. - Suppression de FirebaseVisionImageMetadata. Vous pouvez simplement transmettre des métadonnées d'image telles que la largeur, la hauteur, la rotationDegrees et le format aux méthodes de construction des InputImages.
Voici quelques exemples de méthodes Kotlin anciennes et nouvelles:
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() )
Nouvelle version
// 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 de méthodes Java anciennes et nouvelles:
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());
Nouvelle version
// 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 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 "fin" (recommandé) : cette option permet de réduire la taille de l'application et de partager le modèle 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, ou "bundle" : la taille de l'application augmente, mais le modèle est utilisable immédiatement.
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 façons:
- Via les services Google Play, également appelés "fin" (recommandé) : cette option permet de réduire la taille de l'application et de partager le modèle 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, ou "bundle" : la taille de téléchargement de l'application augmente, mais le modèle est utilisable immédiatement.
Le comportement des implémentations est le même.
Traduction
TranslateLanguage
utilise désormais des noms lisibles pour ses constantes (par exemple,ENGLISH
) au lieu des balises de langue (EN
). Il s'agit également de @StringDef au lieu de @IntDef, et la valeur de la constante est la balise de langue BCP 47 correspondante.Si votre application utilise l'option de condition de téléchargement "appareil inactif", sachez qu'elle a été supprimée et qu'elle ne peut plus être utilisée. Vous pouvez toujours utiliser l'option "Recharge de l'appareil". Si vous souhaitez un comportement plus complexe, vous pouvez retarder l'appel de
RemoteModelManager.download
derrière votre propre logique.
Étiquetage d'images AutoML
Si votre application utilise l'option de condition de téléchargement "appareil inactif", sachez qu'elle a été supprimée et qu'elle ne peut plus être utilisée. Vous pouvez toujours utiliser l'option « Recharge de l'appareil ».
Si vous souhaitez 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 pour les 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 de l'ancien et du nouveau code Kotlin:
Ancienne version
if (object.classificationCategory == FirebaseVisionObject.CATEGORY_FOOD) { ... }
Nouvelle version
if (!object.labels.isEmpty() && object.labels[0].text == PredefinedCategory.FOOD) { ... } // or if (!object.labels.isEmpty() && object.labels[0].index == PredefinedCategory.FOOD_INDEX) { ... }
Voici des exemples de l'ancien et du nouveau code Java:
Ancienne version
if (object.getClassificationCategory() == FirebaseVisionObject.CATEGORY_FOOD) { ... }
Nouvelle version
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 simplement aucune étiquette.
Supprimer les dépendances Firebase (facultatif)
Cette étape ne s'applique que lorsque les conditions suivantes 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 l'inférence du modèle.
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 de 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) 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 classpath du plug-in Gradle des services Google dans le fichier Gradle (build.gradle) de votre projet (au niveau racine) par celui du 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 du site d'assistance de Firebase.
Obtenir de l'aide
Si vous rencontrez des problèmes, veuillez consulter la page de la communauté. Vous y trouverez une liste des canaux disponibles pour nous contacter.