Ce document décrit 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 des CocoaPods iOS ML Kit dans le fichier 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 globales de l'API
Ces modifications s'appliquent à toutes les API:
- Les API d'inférence de GMV acceptent
UIImage
ouCMSampleBufferRef
comme entrée. ML Kit les encapsule dans unMLKVisionImage
et les utilise comme entrée. - GMV utilise
NSDictionary
pour transmettre différentes options de détecteur. ML Kit utilise à cette fin des classes d'options dédiées. - GMV transmet le type de détecteur à la classe
GMVDetector
unique lorsqu'il crée un détecteur. ML Kit utilise des classes dédiées pour créer des instances de détecteur, de scanner et de lecteur distinctes. - Les API 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
AVCaptureVideoDataOutput
et fournit un framework multidétecteur permettant d'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
Récodez l'initialisation comme indiqué dans cet exemple:
NSDictionary *options = @{ GMVDetectorFaceMode : @(GMVDetectorFaceAccurateMode), GMVDetectorFaceClassificationType : @(GMVDetectorFaceClassificationAll), GMVDetectorFaceLandmarkType : @(GMVDetectorFaceLandmarkAll) }; GMVDetector *faceDetector = [GMVDetector detectorOfType:GMVDetectorTypeFace options:options];
MLKFaceDetectorOptions *options = [[MLKFaceDetectorOptions alloc] init]; options.performanceMode = MLKFaceDetectorPerformanceModeAccurate; options.classificationMode = MLKFaceDetectorClassificationModeAll; options.landmarkMode = MLKFaceDetectorLandmarkModeAll; MLKFaceDetector *faceDetector = [MLKFaceDetector faceDetectorWithOptions:options];
GMVDetector
dispose de deux API de détection différentes. Il s'agit de deux 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.
- (nullable NSArray<MLKFace *> *) resultsInImage:(MLKVisionImage *)image error:(NSError **)error;
- (void)processImage:(MLKVisionImage *)image Completion: (MLKFaceDetectionCallback)completion NS_SWIFT_NAME(process(_:completion:));
Modifiez les classes, méthodes et noms suivants:
BarcodeDetector
Récodez l'initialisation comme indiqué dans cet exemple:
NSDictionary *options = @{ GMVDetectorBarcodeFormats : @(GMVDetectorBarcodeFormatCode128 | GMVDetectorBarcodeFormatQRCode) }; GMVDetector *barcodeDetector = [GMVDetector detectorOfType:GMVDetectorTypeBarcode options:options];
MLKBarcodeScannerOptions *options = [[MLKBarcodeScannerOptions alloc] init]; options.formats = MLKBarcodeFormatCode128 | MLKBarcodeFormatQRCode; MLKBarcodeScanner *barcodeScanner = [MLKBarcodeScanner barcodeScannerWithOptions:options];
GMVDetector
dispose de deux API de détection différentes. Il s'agit de deux 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.
- (nullable NSArray<MLKBarcode *> *) resultsInImage:(MLKVisionImage *)image error:(NSError **)error;
- (void)processImage:(MLKVisionImage *)image Completion: (MLKBarcodeScanningCallback)completion NS_SWIFT_NAME(process(_:completion:));
Modifiez les classes, méthodes et noms suivants:
TextRecognition
Récodez l'initialisation comme indiqué dans cet exemple:
GMVDetector *textDetector = [GMVDetector detectorOfType:GMVDetectorTypeText options:nil];
MLKTextRecognizer *textRecognizer = [MLKTextRecognizer textRecognizer];
GMVDetector
dispose de deux API de détection différentes. Il s'agit de deux 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.
- (nullable MLKText *) resultsInImage:(MLKVisionImage *)image error:(NSError **)error;
- (void)processImage:(MLKVisionImage *)image Completion: (MLKTextRecognitionCallback)completion NS_SWIFT_NAME(process(_:completion:));
Modifiez les classes, méthodes et noms suivants:
VMB | 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é, qui présente les canaux disponibles pour nous contacter.