Conditions préalables
Avant de commencer à migrer votre code, vérifiez que vous remplissez les conditions suivantes:
- ML Kit est compatible avec Xcode 13.2.1 ou version ultérieure.
- ML Kit est compatible avec iOS 10 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 est uniquement fournie sous la forme de CocoaPods. Vous ne pouvez pas combiner des frameworks et des cocoapods. Pour utiliser cette bibliothèque, vous devez d'abord migrer pour utiliser des cocoapods.
Mettre à jour CocoaPods
Mettez à jour les dépendances des cocoapodes iOS ML Kit dans le fichier Podfile de votre application:
API | Anciens noms de pods | Nouveaux noms de pods |
---|---|---|
Lecture de codes-barres | Firebase/MLVision Firebase/MLVisionBarcodeModel |
GoogleMLKit/BarcodeScanning |
Détection de visages | Firebase/MLVision Firebase/MLVisionFaceModel |
GoogleMLKit/FaceDetection |
Étiquetage d'image | 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 |
Attribuer des étiquettes à des images AutoML (modèle groupé) | Firebase/MLVisionAutoML | GoogleMLKit/ImageLabeling Personnalisé |
Ajout d'étiquettes aux images AutoML (téléchargement de modèles depuis Firebase) | Firebase/MLVisionAutoML | GoogleMLKit/ImageLabelingCustom GoogleMLKit/LinkFirebase |
ID de langue | Firebase/MLNaturalLanguage Firebase/MLNLLanguageID |
GoogleMLKit/ID de langue |
Réponse suggérée | Firebase/MLNaturalLanguage Firebase/MLNLSmartReply |
GoogleMLKit/SmartReply |
Traduire | Firebase/MLNaturalLanguage Firebase/MLNLTranslate |
GoogleMLKit/Traduire |
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: supprimez le préfixe
Vision
des noms de classe et des énumérations. - Objective-C: remplacer les noms de classe
FIRVision
etFIR
ainsi que les préfixes d'énumération parMLK
Cette règle générale ne s'applique pas à certains types et types de classes:
Swift
Ancien type ou classe | Nouveau cours ou nouveau type |
---|---|
AutoMLLocalModel | Modèle local |
AutoMLRemoteModel | Modèle à distance personnalisé |
VisionBarcodeDetectionCallback | BarcodeScanningCallback |
VisionBarcodeDetector | Lecteur de code-barres |
VisionBarcodeDetectorOptions | BarcodeScannerOptions |
VisionVision | VisionImage (sans modification) |
VisionPoint | VisionPoint (sans modification) |
VisionOnDeviceAutoMLImageLabelerOptions | Options de libellé d'image personnalisé |
VisionOnDeviceImageLabelerOptions | Options du libellé d'image |
Objective-C
Ancien type ou classe | Nouveau cours ou nouveau type |
---|---|
FIRAutoMLLocalModel | Modèle local MLK |
FIRAutoMLRemoteModel | MLKCustomRemoteModel |
FIRVisionBarcodeDetectionCallback | MLKBarcodeScanningCallback |
Détecteur de code-barres FIRVision | MLKBarcodeScanner |
FIRVisionBarcodeDetectorOptions | MLKBarcodeScannerOptions |
FIRVisionImage | MLKVisionImage |
FIRVisionOnDeviceAutoMLImageLabelerOptions | MLKCustomImageLabelerOptions |
FIRVisionOnDeviceImageLabelerOptions | MLKImageLabelerOptions |
FIRVisionPoint | MLKVisionPoint |
Objective-C
Mettre à jour les noms des méthodes
Mettez à jour les noms de méthodes en respectant les règles suivantes:
Les classes de points d'entrée de domaine (
Vision
,NaturalLanguage
) n'existent plus. Elles ont été remplacées par des classes spécifiques à chaque tâche. Remplacez les appels vers leurs différentes méthodes de fabrique pour obtenir des détecteurs par des appels directs à la méthode d'usine de chaque détecteur.La classe
VisionImageMetadata
a été supprimée, ainsi que l'énumérationVisionDetectorImageOrientation
. Utilisez la propriétéorientation
deVisionImage
pour spécifier l'orientation d'affichage d'une image.La méthode
onDeviceTextRecognizer
qui obtient une nouvelle instanceTextRecognizer
a été renomméetextRecognizer
.La propriété de confiance a été supprimée des classes de résultats de reconnaissance de texte, y compris
TextElement
,TextLine
etTextBlock
.Les méthodes
onDeviceImageLabeler
etonDeviceImageLabeler(options:)
permettant d'obtenir une nouvelle instanceImageLabeler
ont été fusionnées et renomméesimageLabeler(options:)
.La méthode
objectDetector
permettant d'obtenir une nouvelle instanceObjectDetector
a été supprimée. UtilisezobjectDetector(options:)
à la place.La propriété
type
a été supprimée deImageLabeler
et la propriétéentityID
de la classe de résultat d'étiquetage d'imageImageLabel
.L'API de lecture de codes-barres
detect(in _:, completion:)
a été renomméeprocess(_:, completion:)
pour être cohérente avec les autres API 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".
TranslateLanguage
utilise désormais des noms lisibles (comme .english) pour ses constantes, plutôt que des tags de langue ( comme .en).
Voici quelques exemples d'anciennes et de nouvelles méthodes Swift:
Anciennes offres
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()
Nouveautés
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:
Anciennes offres
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];
Nouveautés
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 à l'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 manière dont la catégorie de classification des objets détectés est affichée.
VisionObjectCategory
dans VisionObject
est renvoyé en tant que 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 le niveau de confiance de la classification d'un objet est faible, le classificateur ne renvoie aucune étiquette.
Voici un exemple d'ancien et de nouveau code Swift:
Anciennes offres
if (object.classificationCategory == .food) { ... }
Nouveautés
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 d'ancien et de nouveau code Objective-C:
Anciennes offres
if (object.classificationCategory == FIRVisionObjectCategoryFood) { ... }
Nouveautés
if ([object.labels[0].text isEqualToString:MLKDetectedObjectLabelFood]) { ... } // or if ([object.labels[0].index == MLKDetectedObjectLabelIndexFood]) { ... }
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 GoogleService-Info.plist du répertoire de votre application et de votre projet Xcode.
- Supprimez tout cocoapod Firebase, tel que
pod 'Firebase/Analytics'
, de votre fichier Podfile. - Supprimez de votre code toute initialisation de l'application Firebase, telle que
FirebaseApp.configure()
. - Supprimez votre application Firebase dans la console Firebase en suivant les instructions sur le site d'assistance 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.