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 mélanger les frameworks et les CocoaPods. Par conséquent, pour utiliser cette bibliothèque, vous devez d'abord migrer vers les CocoaPods.
Mettre à jour CocoaPods
Mettez à jour les dépendances des CocoaPods ML Kit iOS dans le Podfile de votre application :
| API | Ancien(s) nom(s) de pod | Nouveau(x) nom(s) de pod |
|---|---|---|
| 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étection d'objets et suivi | Firebase/MLVisionObjectDetection | GoogleMLKit/ObjectDetection |
| Reconnaissance de texte | Firebase/MLVision Firebase/MLVisionTextModel |
GoogleMLKit/TextRecognition |
| Ajout de libellés à des images AutoML (modèle groupé) | Firebase/MLVisionAutoML | GoogleMLKit/ImageLabelingCustom |
| Ajout de libellés à des images AutoML (téléchargement du modèle depuis Firebase) | Firebase/MLVisionAutoML | GoogleMLKit/ImageLabelingCustom GoogleMLKit/LinkFirebase |
| 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 : supprimez le préfixe
Visiondes noms de classes et des énumérations. - Objective-C : remplacez les préfixes
FIRVisionetFIRdes noms de classes et des énumérations parMLK.
Cette règle générale ne s'applique pas à certains noms de classes et types :
Swift
| Ancienne classe ou ancien type | Nouvelle classe ou nouveau type |
|---|---|
| AutoMLLocalModel | LocalModel |
| AutoMLRemoteModel | CustomRemoteModel |
| VisionBarcodeDetectionCallback | BarcodeScanningCallback |
| VisionBarcodeDetector | BarcodeScanner |
| VisionBarcodeDetectorOptions | BarcodeScannerOptions |
| VisionImage | VisionImage (aucune modification) |
| VisionPoint | VisionPoint (aucune modification) |
| VisionOnDeviceAutoMLImageLabelerOptions | CustomImageLabelerOptions |
| VisionOnDeviceImageLabelerOptions | ImageLabelerOptions |
Objective-C
| Ancienne classe ou ancien type | Nouvelle classe ou nouveau type |
|---|---|
| FIRAutoMLLocalModel | MLKLocalModel |
| FIRAutoMLRemoteModel | MLKCustomRemoteModel |
| FIRVisionBarcodeDetectionCallback | MLKBarcodeScanningCallback |
| FIRVisionBarcodeDetector | MLKBarcodeScanner |
| FIRVisionBarcodeDetectorOptions | MLKBarcodeScannerOptions |
| FIRVisionImage | MLKVisionImage |
| FIRVisionOnDeviceAutoMLImageLabelerOptions | MLKCustomImageLabelerOptions |
| FIRVisionOnDeviceImageLabelerOptions | MLKImageLabelerOptions |
| FIRVisionPoint | MLKVisionPoint |
Objective-C
Mettre à jour les noms des méthodes
Mettez à jour les noms des méthodes en suivant ces règles :
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, ainsi 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 deImageLabeler, et la propriétéentityIDa été supprimée de la classe de résultats d'ajout de libellés à des images,ImageLabel.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 "balise 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 balises 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 à l'API
Détection d'objets et suivi
Si votre application utilise la classification d'objets, sachez que le nouveau SDK a modifié la façon dont renvoie la catégorie de classification des objets détectés.
VisionObjectCategory dans VisionObject est renvoyé sous forme de 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 aucun libellé.
Voici un exemple d'ancien et de 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 d'ancien et de 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 (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 basées 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 tous les CocoaPods Firebase, tels que
pod 'Firebase/Analytics', de votre Podfile. - Supprimez toute initialisation FirebaseApp, telle que
FirebaseApp.configure()de votre code. - 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, consultez notre page Communauté, où nous décrivons les canaux disponibles pour nous contacter.