Migrer de Mobile Vision vers ML Kit sur iOS

Ce document décrit la procédure à suivre pour migrer vos projets de Google Mobile Vision (GMV) vers ML Kit sur iOS.

Prérequis

Avant de commencer la migration de votre code, assurez-vous de remplir les conditions suivantes:

  • ML Kit est compatible avec Xcode 13.2.1 ou version ultérieure.
  • ML Kit est compatible avec iOS 10 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:

APIPod VMBPod 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 utilisent UIImage ou CMSampleBufferRef en entrée. ML Kit les encapsule dans un élément MLKVisionImage et utilise cet élément comme entrée.
  • VMB utilise NSDictionary pour transmettre différentes options de détection. ML Kit utilise des classes d'options dédiées à cette fin.
  • VMB transmet le type de détecteur à la classe unique GMVDetector lors de la création d'un détecteur. ML Kit utilise des classes dédiées pour créer des instances distinctes de détecteur, d'analyse et de reconnaissance.
  • Les API de VMB n'acceptent que 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 multi-détecteur permettant d'effectuer plusieurs détections en même temps. ML Kit ne fournit pas de tels mécanismes, mais la même fonctionnalité peut être mise en œuvre par le développeur s'il le souhaite.

Modifications spécifiques aux API

Cette section décrit les classes et les 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:

VMB

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 dispose de deux API de détection différentes. Les deux opérations sont 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, les méthodes et les noms suivants:

VMB ML Kit
GMVFaceFeature MLKFace
GMVFaceContour MLKFaceContour
GMVDetectorImageOrientation MLKVisionImage.orientation
NSDictionary des options de détection des visages MLKFaceDetectorOptions
GMVDetectorFaceFastMode Set MLKFaceDetectorOptions.performanceMode to MLKFaceDetectorPerformanceModeFast
GMVDetectorFaceAccurateMode Set MLKFaceDetectorOptions.performanceMode to MLKFaceDetectorPerformanceModeAccurate
GMVDetectorFaceSelfieMode Set MLKFaceDetectorOptions.contourMode to MLKFaceDetectorContourModeAll
GMVDetectorFaceLandmarkType MLKFaceDetectorOptions.landmarkMode
GMVDetectorFaceLandmarkNone Set MLKFaceDetectorOptions.landmarkMode to MLKFaceDetectorLandmarkModeNone
GMVDetectorFaceLandmarkAll Set MLKFaceDetectorOptions.landmarkMode to MLKFaceDetectorLandmarkModeAll
GMVDetectorFaceLandmarkContour Set MLKFaceDetectorOptions.contourMode to MLKFaceDetectorContourModeAll
GMVDetectorFaceClassificationType MLKFaceDetectorOptions.classificationMode
GMVDetectorFaceClassificationNone Set MLKFaceDetectorOptions.classificationMode to MLKFaceDetectorClassificationModeNone
GMVDetectorFaceClassificationAll Set MLKFaceDetectorOptions.classificationMode to MLKFaceDetectorClassificationModeAll
GMVDetectorFaceTrackingEnabled MLKFaceDetectorOptions.trackingEnabled
GMVDetectorProminentFaceOnly Set MLKFaceDetectorOptions.contourMode to MLKFaceDetectorContourModeAll
GMVDetectorFaceMinSize MLKFaceDetectorOptions.minFaceSize

BarcodeDetector

Recodez l'initialisation comme indiqué dans cet exemple:

VMB

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 dispose de deux API de détection différentes. Les deux opérations sont 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, les méthodes et les noms suivants:

VMB ML Kit
GMVDetectorImageOrientation MLKVisionImage.orientation
NSDictionary des options de détecteur de code-barres MLKBarcodeScannerOptions
GMVDetectorBarcodeFormats MLKBarcodeScannerOptions.formats
GMVBarcodeFeature MLKBarcode
GMVBarcodeFeatureAddress MLKBarcodeAddress
GMVBarcodeFeatureCalendarEvent MLKBarcodeCalendarEvent
GMVBarcodeFeatureContactInfo MLKBarcodeContactInfo
GMVBarcodeFeatureDriverLicense MLKBarcodeDriverLicense
GMVBarcodeFeatureEmail MLKBarcodeEmail
GMVBarcodeFeatureGeoPoint MLKBarcodeGeoPoint
GMVBarcodeFeaturePersonName MLKBarcodePersonName
GMVBarcodeFeaturePhone MLKBarcodePhone
GMVBarcodeFeatureSMS MLKBarcodeSMS
GMVBarcodeFeatureURLBookmark MLKBarcodeURLBookmark
GMVBarcodeFeatureWiFi MLKBarcodeWiFi

TextRecognition

Recodez l'initialisation comme indiqué dans cet exemple:

VMB

GMVDetector *textDetector =
    [GMVDetector detectorOfType:GMVDetectorTypeText options:nil];

ML Kit

MLKTextRecognizer *textRecognizer = [MLKTextRecognizer textRecognizer];

GMVDetector dispose de deux API de détection différentes. Les deux opérations sont 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, les méthodes et les 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 la page de la communauté sur laquelle vous trouverez une liste des chaînes disponibles pour nous contacter.