Ce guide explique comment migrer depuis ML Kit pour Firebase pour iOS.
Prérequis
Avant de commencer à migrer votre code, assurez-vous de respecter les conditions suivantes :
- ML Kit est compatible avec Xcode 13.2.1 ou version ultérieure.
- ML Kit est compatible avec iOS 15.5 ou version ultérieure.
- ML Kit n'est pas compatible avec les architectures 32 bits (i386 et armv7). ML Kit est compatible avec les architectures 64 bits (x86_64 et arm64).
- La bibliothèque ML Kit n'est fournie que sous forme de CocoaPods. Vous ne pouvez pas combiner les frameworks et les CocoaPods. Pour utiliser cette bibliothèque, vous devez donc d'abord migrer vers les CocoaPods.
Mettre à jour CocoaPods
Mettez à jour les dépendances des CocoaPods iOS de ML Kit dans le fichier Podfile de votre application :
| API | Ancien(s) nom(s) de pod | Nouveaux noms de pods |
|---|---|---|
| Lecture de codes-barres | Firebase/MLVision Firebase/MLVisionBarcodeModel |
GoogleMLKit/BarcodeScanning |
| Détection de visages | Firebase/MLVision Firebase/MLVisionFaceModel |
GoogleMLKit/FaceDetection |
| Ajout de libellés à des images | Firebase/MLVision Firebase/MLVisionLabelModel |
GoogleMLKit/ImageLabeling |
| Détectez les objets et assurez leur suivi. | Firebase/MLVisionObjectDetection | GoogleMLKit/ObjectDetection |
| Reconnaissance de texte | Firebase/MLVision Firebase/MLVisionTextModel |
GoogleMLKit/TextRecognition |
| Étiquetage d'images AutoML (modèle groupé) | Firebase/MLVisionAutoML | GoogleMLKit/ImageLabelingCustom |
| Étiquetage d'images AutoML (modèle téléchargé) | Firebase/MLVisionAutoML | GoogleMLKit/ImageLabelingCustom 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 en tant que modèles locaux. Pour en savoir plus, consultez le guide de migration de Firebase ML vers Cloud Storage. |
| ID de langue | Firebase/MLNaturalLanguage Firebase/MLNLLanguageID |
GoogleMLKit/LanguageID |
| Réponse suggérée | Firebase/MLNaturalLanguage Firebase/MLNLSmartReply |
GoogleMLKit/SmartReply |
| Traduire | Firebase/MLNaturalLanguage Firebase/MLNLTranslate |
GoogleMLKit/Translate |
Mettre à jour les noms des classes, des énumérations et des types
En général, les classes, les énumérations et les types doivent être renommés comme suit :
- Swift : suppression du préfixe
Visiondes noms de classe et des énumérations - Objective-C : remplacez les préfixes de nom de classe et d'énumération
FIRVisionetFIRparMLK.
Cette règle générale ne s'applique pas à certains noms et types de classes :
Swift
| Ancienne classe ou ancien type | Nouvelle classe ou nouveau type |
|---|---|
| AutoMLLocalModel | LocalModel |
| AutoMLRemoteModel | 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. |
| VisionBarcodeDetectionCallback | BarcodeScanningCallback |
| VisionBarcodeDetector | BarcodeScanner |
| VisionBarcodeDetectorOptions | BarcodeScannerOptions |
| VisionImage | VisionImage (aucune modification) |
| VisionPoint | VisionPoint (no change) |
| VisionOnDeviceAutoMLImageLabelerOptions | CustomImageLabelerOptions |
| VisionOnDeviceImageLabelerOptions | ImageLabelerOptions |
Objective-C
| Ancienne classe ou ancien type | Nouvelle classe ou nouveau type |
|---|---|
| FIRAutoMLLocalModel | MLKLocalModel |
| FIRAutoMLRemoteModel | MLKLocalModel 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. |
| FIRVisionBarcodeDetectionCallback | MLKBarcodeScanningCallback |
| FIRVisionBarcodeDetector | MLKBarcodeScanner |
| FIRVisionBarcodeDetectorOptions | MLKBarcodeScannerOptions |
| FIRVisionImage | MLKVisionImage |
| FIRVisionPoint | MLKVisionPoint |
| FIRVisionOnDeviceAutoMLImageLabelerOptions | MLKCustomImageLabelerOptions |
| FIRVisionOnDeviceImageLabelerOptions | MLKImageLabelerOptions |
Mettre à jour les noms de méthode
Mettez à jour les noms des méthodes selon les règles suivantes :
Les classes de point d'entrée de domaine (
Vision,NaturalLanguage) n'existent plus. Elles ont été remplacées par des classes spécifiques aux tâches. Remplacez les appels à leurs différentes méthodes de fabrique pour obtenir des détecteurs par des appels directs à la méthode de fabrique de chaque détecteur.La classe
VisionImageMetadataa été supprimée, de même que l'énumérationVisionDetectorImageOrientation. Utilisez la propriétéorientationdeVisionImagepour spécifier l'orientation d'affichage d'une image.La méthode
onDeviceTextRecognizerqui obtient une nouvelle instanceTextRecognizera été renomméetextRecognizer.La propriété de confiance a été supprimée des classes de résultats de reconnaissance de texte, y compris
TextElement,TextLineetTextBlock.Les méthodes
onDeviceImageLabeleretonDeviceImageLabeler(options:)permettant d'obtenir une nouvelle instanceImageLabeleront été fusionnées et renomméesimageLabeler(options:).La méthode
objectDetectorpermettant d'obtenir une nouvelle instanceObjectDetectora été supprimée. Utilisez plutôtobjectDetector(options:).La propriété
typea été supprimée deImageLabeleret la propriétéentityIDa été supprimée de la classe de résultat d'étiquetage d'images,ImageLabel.L'API de lecture de code-barres
detect(in _:, completion:)a été renomméeprocess(_:, completion:)pour être cohérente avec les autres API de vision.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".
TranslateLanguageutilise désormais des noms lisibles (comme.english) pour ses constantes au lieu de tags de langue (comme.en).
Voici quelques exemples d'anciennes et de nouvelles méthodes Swift :
Ancienne version
let options = VisionOnDeviceImageLabelerOptions()
options.confidenceThreshold = 0.75
let labeler = Vision.vision().onDeviceImageLabeler(options: options)
let detector = Vision.vision().faceDetector(options: options)
let localModel = AutoMLLocalModel(manifestPath: "automl/manifest.json")
let options = VisionOnDeviceAutoMLImageLabelerOptions(localModel: localModel)
options.confidenceThreshold = 0.75
let labeler = vision.onDeviceAutoMLImageLabeler(options: options)
let detector = Vision.vision().objectDetector()
Nouveau
let options = ImageLabelerOptions()
options.confidenceThreshold = NSNumber(value:0.75)
let labeler = ImageLabeler.imageLabeler(options: options)
let detector = FaceDetector.faceDetector(options: options)
let localModel = LocalModel(manifestPath: "automl/manifest.json")
let options = CustomImageLabelerOptions(localModel: localModel)
options.confidenceThreshold = NSNumber(value:0.75)
let labeler = ImageLabeler.imageLabeler(options: options)
let detector = ObjectDetector.objectDetector(options: ObjectDetectorOptions())
Voici quelques exemples d'anciennes et de nouvelles méthodes Objective-C :
Ancienne version
FIRVisionOnDeviceImageLabelerOptions *options = [[FIRVisionOnDeviceImageLabelerOptions alloc] init]; options.confidenceThreshold = 0.75; FIRVisionImageLabeler *labeler = [[FIRVision vision] onDeviceImageLabelerWithOptions:options]; FIRVisionFaceDetector *detector = [[FIRVision vision] faceDetectorWithOptions: options]; FIRAutoMLLocalModel *localModel = [[FIRAutoMLLocalModel alloc] initWithManifestPath:@"automl/manifest.json"]; FIRVisionOnDeviceAutoMLImageLabelerOptions *options = [[FIRVisionOnDeviceAutoMLImageLabelerOptions alloc] initWithLocalModel: localModel]; options.confidenceThreshold = 0.75 FIRVisionImageLabeler *labeler = [[FIRVision vision] onDeviceAutoMLImageLabelerWithOptions:options]; FIRVisionObjectDetector *detector = [[FIRVision vision] objectDetector];
Nouveau
MLKImageLabelerOptions *options = [[MLKImageLabelerOptions alloc] init]; options.confidenceThreshold = @(0.75); MLKImageLabeler *labeler = [MLKImageLabeler imageLabelerWithOptions:options]; MLKFaceDetector *detector = [MLKFaceDetector faceDetectorWithOptions:options]; MLKLocalModel *localModel = [[MLKLocalModel alloc] initWithManifestPath:@"automl/manifest.json"]; MLKCustomImageLabelerOptions *options = [[MLKCustomImageLabelerOptions alloc] initWithLocalModel:localModel]; options.confidenceThreshold = @(0.75) MLKImageLabeler *labeler = [MLKImageLabeler imageLabelerWithOptions:options]; MLKObjectDetectorOptions *options = [[MLKObjectDetectorOptions alloc] init]; MLKObjectDetector *detector = [MLKObjectDetector objectDetectorWithOptions:options];
Modifications spécifiques aux API
Détectez les objets et assurez leur suivi.
Si votre application utilise la classification d'objets, sachez que le nouveau SDK a modifié la façon dont il renvoie la catégorie de classification des objets détectés.
VisionObjectCategory dans VisionObject est renvoyé sous la forme text dans un objet ObjectLabel, au lieu d'un entier. Toutes les catégories de chaînes possibles sont incluses dans l'énumération DetectedObjectLabel.
Notez que la catégorie .unknown a été supprimée. Lorsque la confiance de la classification d'un objet est faible, le classificateur ne renvoie aucune étiquette.
Voici un exemple de l'ancien et du nouveau code Swift :
Ancienne version
if (object.classificationCategory == .food) {
...
}Nouveau
if let label = object.labels.first {
if (label.text == DetectedObjectLabel.food.rawValue) {
...
}
}
// or
if let label = object.labels.first {
if (label.index == DetectedObjectLabelIndex.food.rawValue) {
...
}
}Voici un exemple de l'ancien et du nouveau code Objective-C :
Ancienne version
if (object.classificationCategory == FIRVisionObjectCategoryFood) {
...
}Nouveau
if ([object.labels[0].text isEqualToString:MLKDetectedObjectLabelFood]) {
...
}
// or
if ([object.labels[0].index == MLKDetectedObjectLabelIndexFood]) {
...
}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
GoogleService-Info.plistdu répertoire de votre application et de votre projet Xcode. - Supprimez tous les CocoaPods Firebase, tels que
pod 'Firebase/Analytics', de votre Podfile. - Supprimez de votre code toute initialisation FirebaseApp, telle que
FirebaseApp.configure(). - 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.