Migrer pour iOS

Prérequis

Avant de commencer la migration de votre code, assurez-vous de remplir 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 n'est fournie qu'en tant que CocoaPods. Vous ne pouvez pas mélanger les frameworks et les cocoapods. Par conséquent, pour pouvoir utiliser cette bibliothèque, vous devez d'abord migrer vers CocoaPods.

Mettre à jour CocoaPods

Mettez à jour les dépendances pour les CocoaPods iOS ML Kit dans le Podfile de votre application:

APIAncien(s) nom(s) de podNoms des nouveaux pods
Lecture de codes-barres Firebase/MLVision
Firebase/MLVisionBarcodeModel
GoogleMLKit/BarcodeScanning
Détection de visages Firebase/MLVision
Firebase/MLVisionFaceModel
GoogleMLKit/FaceDetection
Étiquetage d'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/Reconnaissance de texte
Étiquetage d'images AutoML (modèle groupé) Firebase/MLVisionAutoML GoogleMLKit/ImageLabelingCustom
Ajout d'étiquettes aux images AutoML (téléchargement de modèle à partir de 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
Traduction 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ées comme suit:

  • Swift: supprimer le préfixe Vision des noms de classe et des énumérations
  • Objective-C: Remplacer le nom 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 noms et types de classes:

Swift

Ancienne classe ou typeNouvelle classe ou nouveau type
AutoMLLocalModel LocalModel
AutoMLRemoteModel CustomRemoteModel
VisionBarcodeDetectionCallback BarcodeScanningCallback
VisionBarcodeDetector BarcodeScanner
VisionBarcodeDetectorOptions BarcodeScannerOptions
VisionImage VisionImage (aucun changement)
VisionPoint VisionPoint (aucun changement)
VisionOnDeviceAutoMLImageLabelerOptions CustomImageLabelerOptions
VisionOnDeviceImageLabelerOptions ImageLabelerOptions

Objective-C

Ancienne classe ou typeNouvelle 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 selon les règles suivantes:

  • Les classes de point d'entrée du domaine (Vision, NaturalLanguage) n'existent plus. Elles ont été remplacées par des classes spécifiques à la 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 de fabrique de chaque détecteur.

  • La classe VisionImageMetadata a été supprimée, de même 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 plutôt objectDetector(options:).

  • 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 "balise 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 au lieu de balises de langue ( comme .en).

Voici quelques exemples de méthodes Swift anciennes et nouvelles:

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()
    

Nouvelle version

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 de méthodes Objective-C nouvelles et anciennes:

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];
    

Nouvelle version

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 renvoie la catégorie de classification pour les objets détectés.

VisionObjectCategory dans VisionObject est renvoyé en tant que text dans un objet ObjectLabel, au lieu d'un entier. Toutes les catégories de chaîne possibles sont incluses dans l'énumération DetectedObjectLabel.

Notez que la catégorie .unknown a été supprimée. Lorsque le niveau de confiance lié à la classification d'un objet est faible, le classificateur ne renvoie aucune étiquette.

Voici des exemples de l'ancien et du nouveau code Swift:

Ancienne version

if (object.classificationCategory == .food) {
    ...
}

Nouvelle version

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 des exemples de l'ancien et du nouveau code Objective-C:

Ancienne version

if (object.classificationCategory == FIRVisionObjectCategoryFood) {
    ...
}

Nouvelle version

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 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 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 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 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.