Migrer pour iOS

Prérequis

Avant de commencer à migrer 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 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. Pour utiliser cette bibliothèque, vous devez donc d'abord migrer vers les cocoapods.

Mettre à jour CocoaPods

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

APIAncien nom du ou des podsNoms des nouveaux 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
Libellisation d'images AutoML (modèle groupé) Firebase/MLVisionAutoML GoogleMLKit/ImageLabelingCustom
Libellisation d'images AutoML (téléchargement de 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 : supprimer le préfixe Vision des noms de classes et des énumérations
  • Objective-C : remplacez les préfixes de nom de classe et d'énumération FIRVision et FIR par MLK.

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

Swift

Ancienne classe ou ancien typeNouvelle 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 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 de méthodes

Mettez à jour les noms de méthode 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 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 la 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 a été supprimée de la classe de résultat de l'étiquetage d'images, 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 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é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 la catégorie de classification est renvoyée pour les 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 (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 la diffusion de modèles

Si tel est le 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 fichier Podfile.
  • Supprimez toute initialisation FirebaseApp, telle que FirebaseApp.configure(), de votre code.
  • 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 notre page de la communauté, qui présente les canaux disponibles pour nous contacter.