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:
API | Ancien(s) nom(s) de pod | Nom(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
etFIR
parMLK
.
Cette règle générale ne s'applique pas à certains noms et types de classes:
Swift
Ancien type ou classe | Nouvelle 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 classe | Nouvelle 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érationVisionDetectorImageOrientation
. Utilisez la propriétéorientation
deVisionImage
pour spécifier l'orientation d'affichage d'une image.La méthode
onDeviceTextRecognizer
qui obtient une nouvelle instanceTextRecognizer
a été renomméetextRecognizer
.La propriété de confiance a été supprimée des classes de résultats de reconnaissance de texte, y compris
TextElement
,TextLine
etTextBlock
.Les méthodes
onDeviceImageLabeler
etonDeviceImageLabeler(options:)
permettant d'obtenir une nouvelle instanceImageLabeler
ont été fusionnées et renomméesimageLabeler(options:)
.La méthode
objectDetector
permettant d'obtenir une nouvelle instanceObjectDetector
a été supprimée. Utilisez plutôtobjectDetector(options:)
.La propriété
type
a été supprimée deImageLabeler
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éeprocess(_:, 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.