Migrer pour iOS

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

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:

APIAnciens noms de podsNouveaux 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 et FIR ainsi que les préfixes d'énumération par MLK

Cette règle générale ne s'applique pas à certains types et types de classes:

Swift

Ancien type ou classeNouveau 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 classeNouveau 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ération VisionDetectorImageOrientation. Utilisez la propriété orientation de VisionImage pour spécifier l'orientation d'affichage d'une image.

  • La méthode onDeviceTextRecognizer qui obtient une nouvelle instance TextRecognizer a été renommée textRecognizer.

  • La propriété de confiance a été supprimée des classes de résultats de reconnaissance de texte, y compris TextElement, TextLine et TextBlock.

  • Les méthodes onDeviceImageLabeler et onDeviceImageLabeler(options:) permettant d'obtenir une nouvelle instance ImageLabeler ont été fusionnées et renommées imageLabeler(options:).

  • La méthode objectDetector permettant d'obtenir une nouvelle instance ObjectDetector a été supprimée. Utilisez objectDetector(options:) à la place.

  • La propriété type a été supprimée de ImageLabeler et la propriété entityID de la classe de résultat d'étiquetage d'image ImageLabel.

  • L'API de lecture de codes-barres detect(in _:, completion:) a été renommée process(_:, 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.