Ce document explique les étapes à suivre pour migrer vos projets de Google Mobile Vision (GMV) vers ML Kit sur 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).
Mettre à jour CocoaPods
Mettez à jour les dépendances pour les CocoaPods iOS ML Kit dans le Podfile de votre application :
| API | Pod GMV | Pod ML Kit |
|---|---|---|
| Lecture de codes-barres | GoogleMobileVision/BarcodeDetector |
GoogleMLKit/BarcodeScanning |
| Détection de visages | GoogleMobileVision/FaceDetector |
GoogleMLKit/FaceDetection |
| Reconnaissance de texte | GoogleMobileVision/TextDetector |
GoogleMLKit/TextRecognition |
Modifications générales de l'API
Ces modifications s'appliquent à toutes les API :
- Les API d'inférence de GMV acceptent
UIImageouCMSampleBufferRefen entrée. ML Kit les encapsule dans unMLKVisionImageet l'utilise comme entrée. - GMV utilise
NSDictionarypour transmettre différentes options de détecteur. ML Kit utilise des classes d'options dédiées à cet effet. - GMV transmet le type de détecteur à la classe
GMVDetectorunique lorsqu'il crée un détecteur. ML Kit utilise des classes dédiées pour créer des instances distinctes de détecteur, de scanner et de module de reconnaissance. - Les API de GMV ne sont compatibles qu'avec la détection synchrone. Les API d'inférence de ML Kit peuvent être appelées de manière synchrone et asynchrone.
- GMV étend
AVCaptureVideoDataOutputet fournit un framework multi-détecteur pour effectuer plusieurs détections en même temps. ML Kit ne fournit pas de tels mécanismes, mais le développeur peut implémenter la même fonctionnalité s'il le souhaite.
Modifications spécifiques à l'API
Cette section décrit les classes et méthodes GMV et ML Kit correspondantes pour chaque API Vision, et explique comment initialiser l'API.
FaceDetector
Recodez l'initialisation comme indiqué dans cet exemple :
GMV
NSDictionary *options = @{ GMVDetectorFaceMode : @(GMVDetectorFaceAccurateMode), GMVDetectorFaceClassificationType : @(GMVDetectorFaceClassificationAll), GMVDetectorFaceLandmarkType : @(GMVDetectorFaceLandmarkAll) }; GMVDetector *faceDetector = [GMVDetector detectorOfType:GMVDetectorTypeFace options:options];
ML Kit
MLKFaceDetectorOptions *options = [[MLKFaceDetectorOptions alloc] init]; options.performanceMode = MLKFaceDetectorPerformanceModeAccurate; options.classificationMode = MLKFaceDetectorClassificationModeAll; options.landmarkMode = MLKFaceDetectorLandmarkModeAll; MLKFaceDetector *faceDetector = [MLKFaceDetector faceDetectorWithOptions:options];
GMVDetector comporte deux API de détection différentes. Les deux sont des opérations synchrones :
- (nullable NSArray<__kindof GMVFeature *> *) featuresInImage:(UIImage *)image options:(nullable NSDictionary *)options; - (nullable NSArray<__kindof GMVFeature *> *) featuresInBuffer:(CMSampleBufferRef)sampleBuffer options:(nullable NSDictionary *)options;
Remplacez GMVDetector par MLKFaceDetector.
L'API d'inférence peut être appelée de manière synchrone ou asynchrone.
Synchrone
- (nullable NSArray<MLKFace *> *) resultsInImage:(MLKVisionImage *)image error:(NSError **)error;
Asynchrone
- (void)processImage:(MLKVisionImage *)image Completion: (MLKFaceDetectionCallback)completion NS_SWIFT_NAME(process(_:completion:));
Modifiez les classes, méthodes et noms suivants :
BarcodeDetector
Recodez l'initialisation comme indiqué dans cet exemple :
GMV
NSDictionary *options = @{ GMVDetectorBarcodeFormats : @(GMVDetectorBarcodeFormatCode128 | GMVDetectorBarcodeFormatQRCode) }; GMVDetector *barcodeDetector = [GMVDetector detectorOfType:GMVDetectorTypeBarcode options:options];
ML Kit
MLKBarcodeScannerOptions *options = [[MLKBarcodeScannerOptions alloc] init]; options.formats = MLKBarcodeFormatCode128 | MLKBarcodeFormatQRCode; MLKBarcodeScanner *barcodeScanner = [MLKBarcodeScanner barcodeScannerWithOptions:options];
GMVDetector comporte deux API de détection différentes. Les deux sont des opérations synchrones :
- (nullable NSArray<__kindof GMVFeature *> *) featuresInImage:(UIImage *)image options:(nullable NSDictionary *)options; - (nullable NSArray<__kindof GMVFeature *> *) featuresInBuffer:(CMSampleBufferRef)sampleBuffer options:(nullable NSDictionary *)options;
Remplacez GMVDetector par
MLKBarcodeScanner.
L'API d'inférence peut être appelée de manière synchrone ou asynchrone.
Synchrone
- (nullable NSArray<MLKBarcode *> *) resultsInImage:(MLKVisionImage *)image error:(NSError **)error;
Asynchrone
- (void)processImage:(MLKVisionImage *)image Completion: (MLKBarcodeScanningCallback)completion NS_SWIFT_NAME(process(_:completion:));
Modifiez les classes, méthodes et noms suivants :
TextRecognition
Recodez l'initialisation comme indiqué dans cet exemple :
GMV
GMVDetector *textDetector = [GMVDetector detectorOfType:GMVDetectorTypeText options:nil];
ML Kit
MLKTextRecognizer *textRecognizer = [MLKTextRecognizer textRecognizer];
GMVDetector comporte deux API de détection différentes. Les deux sont des opérations synchrones :
- (nullable NSArray<__kindof GMVFeature *> *) featuresInImage:(UIImage *)image options:(nullable NSDictionary *)options; - (nullable NSArray<__kindof GMVFeature *> *) featuresInBuffer:(CMSampleBufferRef)sampleBuffer options:(nullable NSDictionary *)options;
Remplacez GMVDetector par
MLKTextRecognizer.
L'API d'inférence peut être appelée de manière synchrone ou asynchrone.
Synchrone
- (nullable MLKText *) resultsInImage:(MLKVisionImage *)image error:(NSError **)error;
Asynchrone
- (void)processImage:(MLKVisionImage *)image Completion: (MLKTextRecognitionCallback)completion NS_SWIFT_NAME(process(_:completion:));
Modifiez les classes, méthodes et noms suivants :
| GMV | ML Kit |
|---|---|
GMVDetectorImageOrientation
|
MLKVisionImage.orientation
|
GMVTextBlockFeature
|
MLKTextBlock
|
GMVTextElementFeature
|
MLKTextElement
|
GMVTextLineFeature
|
MLKTextLine
|
Obtenir de l'aide
Si vous rencontrez des problèmes, consultez notre page de la communauté où nous décrivons les canaux disponibles pour nous contacter.