Migrer pour iOS

Prérequis

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 version 10 ou 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 utiliser cette bibliothèque, vous devez d'abord migrer pour utiliser CocoaPods.

Mettre à jour CocoaPods

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

APIAnciens noms 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
É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/TextRecognition
Ajout d'étiquettes aux 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
ID de langue Firebase/MLNL
GoogleMLKit/LanguageID
Réponse suggérée Firebase/MLNaturalLanguage
Firebase/MLNLSmartReply
GoogleMLKit/SmartReply
Traduire Firebase/MLNaturalLanguage
Firebase/MLNLTranslate
GoogleMLKit/Traduction

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 classe et des énumérations
  • Objectif C: Remplacer les noms de classe FIRVision et FIR, ainsi que les préfixes d'énumération d'ici le 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 (sans modification)
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 en fonction des règles suivantes:

  • Les classes de points d'entrée du domaine (Vision, NaturalLanguage) n'existent plus. Ils ont été remplacés par des classes spécifiques à une tâche. Remplacez les appels à leurs différentes méthodes d'usine pour obtenir des détecteurs avec des appels directs à la méthode de fabrique de chaque détecteur.

  • La classe VisionImageMetadata a été supprimée, de même que la É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 possède a été renommé textRecognizer.

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

  • Les méthodes onDeviceImageLabeler et onDeviceImageLabeler(options:) pour obtenir une La nouvelle instance ImageLabeler a été fusionnée et renommée en 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'image, ImageLabel.

  • L'API de lecture de codes-barres detect(in _:, completion:) a été renommée en process(_:, completion:) pour assurer la cohérence avec les autres API Vision.

  • Les API Natural Language utilisent désormais le terme "tag de langue" (tel que défini par le norme BCP-47) au lieu du "code de langue".

  • TranslateLanguage utilise désormais des noms lisibles (comme .english) pour ses constantes au lieu des 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 aux API

Détectez les objets et assurez leur suivi.

Si votre application utilise la classification d'objets, sachez que le nouveau SDK a changé renvoie la catégorie de classification pour les objets détectés.

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

Notez que la catégorie .unknown a été supprimée. Quand le niveau de confiance de la classification 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 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 tous les CocoaPods Firebase, tels que pod 'Firebase/Analytics', de votre Podfile.
  • Supprimez de votre code toute initialisation de FirebaseApp, telle que FirebaseApp.configure().
  • Supprimez votre application Firebase dans la console Firebase les instructions sur le site d'assistance de Firebase.

Obtenir de l'aide

Si vous rencontrez des problèmes, veuillez consulter la page de la communauté canaux disponibles pour nous contacter.