Migrer pour iOS

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 qu'en tant que cocoapods. Vous ne pouvez pas mélanger des frameworks et des cocoapods. Pour utiliser cette bibliothèque, vous devez d'abord migrer vers cocoapods.

Mettre à jour CocoaPods

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

APIAncien(s) nom(s) de podNom(s) du ou 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
Etiquetage d'images AutoML (modèle groupé) Firebase/MLVisionAutoML GoogleMLKit/ImageLabelingCustom
Etiquetage d'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

Modifier 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: suppression du préfixe Vision des noms de classe et des énumérations
  • Objective-C: remplacez le nom de classe et les préfixes 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

Ancien type ou classeNouvelle classe ou 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

Ancien type ou classeNouvelle classe ou type
FIRAutoMLLocalModel MLKLocalModel
FIRAutoMLRemoteModel MLKCustomRemoteModel
FIRVisionBarcodeDetectionCallback MLKBarcodeScanningCallback
FIRVisionBarcodeDetector MLKBarcodeScanner
FIRVisionBarcodeDetectorOptions MLKBarcodeScannerOptions
FIRVisionImage MLKVisionImage
FIRVisionOnDeviceAutoMLImageLabelerOptions MLKCustomImageLabelerOptions
FIRVisionOnDeviceImageLabelerOptions MLKImageLabelerOptions
FIRVisionPoint MLKVisionPoint

Objective-C

Modifier les noms de méthode

Modifiez les noms de méthode en suivant ces règles:

  • Les classes de points 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 d'usine 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, 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 a été supprimée de la classe de résultats de libellé 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 "code 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 des 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 le niveau de 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, comme 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, consultez notre page de la communauté, qui présente les canaux disponibles pour nous contacter.