Migración de Mobile Vision a ML Kit en iOS

En este documento, se describen los pasos que debes seguir para migrar tus proyectos de Google Mobile Vision (GMV) al ML Kit en iOS.

Requisitos previos

Antes de comenzar a migrar tu código, asegúrate de cumplir con los siguientes requisitos:

  • ML Kit es compatible con Xcode 13.2.1 o versiones posteriores.
  • El ML Kit es compatible con iOS 10 o versiones posteriores.
  • ML Kit no es compatible con arquitecturas de 32 bits (i386 y armv7). El ML Kit es compatible con arquitecturas de 64 bits (x86_64 y arm64).

Actualiza CocoaPods

Actualiza las dependencias para los CocoaPods de iOS con el Kit de AA en el Podfile de tu app:

APIGrupo de GMVPod del kit de AA
Escaneo de códigos de barras GoogleMobileVision/BarcodeDetector GoogleMLKit/BarcodeScanning
Detección de rostro GoogleMobileVision/FaceDetector GoogleMLKit/FaceDetection
Reconocimiento de texto GoogleMobileVision/TextDetector GoogleMLKit/TextRecognition

Cambios generales en la API

Estos cambios se aplican a todas las APIs:

  • Las APIs de inferencia de GMV toman UIImage o CMSampleBufferRef como entrada. El ML Kit los envuelve en un MLKVisionImage y lo toma como entrada.
  • GMV usa NSDictionary para pasar varias opciones del detector. ML Kit usa clases de opciones dedicadas para ese propósito.
  • El GMV pasa el tipo de detector a la única clase GMVDetector cuando crea un detector. ML Kit usa clases dedicadas para crear instancias independientes de detectores, escáneres y reconocedores.
  • Las API de GMV solo admiten la detección síncrona. Las APIs de inferencia de ML Kit se pueden llamar de forma síncrona y asíncrona.
  • El GMV extiende AVCaptureVideoDataOutput y proporciona un marco de trabajo de varios detectores para realizar varias detecciones al mismo tiempo. ML Kit no proporciona estos mecanismos, pero el desarrollador puede implementar la misma funcionalidad si lo desea.

Cambios específicos de la API

En esta sección, se describen las clases y los métodos del GMV y ML Kit correspondientes para cada API de Vision, y se muestra cómo inicializar la API.

FaceDetector

Vuelve a codificar la inicialización como se muestra en este ejemplo:

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 tiene dos APIs de detección diferentes. Ambas son operaciones síncronas:

- (nullable NSArray<__kindof GMVFeature *> *)
    featuresInImage:(UIImage *)image
            options:(nullable NSDictionary *)options;

- (nullable NSArray<__kindof GMVFeature *> *)
    featuresInBuffer:(CMSampleBufferRef)sampleBuffer
             options:(nullable NSDictionary *)options;

Reemplaza GMVDetector por MLKFaceDetector. Se puede llamar a la API de inferencia de forma síncrona o asíncrona.

Síncrona

- (nullable NSArray<MLKFace *> *)
    resultsInImage:(MLKVisionImage *)image
             error:(NSError **)error;

Asíncrona

- (void)processImage:(MLKVisionImage *)image
    Completion:
        (MLKFaceDetectionCallback)completion
    NS_SWIFT_NAME(process(_:completion:));

Cambia las siguientes clases, métodos y nombres:

GMV ML Kit
GMVFaceFeature MLKFace
GMVFaceContour MLKFaceContour
GMVDetectorImageOrientation MLKVisionImage.orientation
NSDictionary de las opciones de detección de rostro 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

Vuelve a codificar la inicialización como se muestra en este ejemplo:

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 tiene dos APIs de detección diferentes. Ambas son operaciones síncronas:

- (nullable NSArray<__kindof GMVFeature *> *)
    featuresInImage:(UIImage *)image
            options:(nullable NSDictionary *)options;

- (nullable NSArray<__kindof GMVFeature *> *)
    featuresInBuffer:(CMSampleBufferRef)sampleBuffer
             options:(nullable NSDictionary *)options;

Reemplaza GMVDetector por MLKBarcodeScanner. Se puede llamar a la API de inferencia de forma síncrona o asíncrona.

Síncrona

- (nullable NSArray<MLKBarcode *> *)
    resultsInImage:(MLKVisionImage *)image
             error:(NSError **)error;

Asíncrona

- (void)processImage:(MLKVisionImage *)image
    Completion:
        (MLKBarcodeScanningCallback)completion
    NS_SWIFT_NAME(process(_:completion:));

Cambia las siguientes clases, métodos y nombres:

GMV ML Kit
GMVDetectorImageOrientation MLKVisionImage.orientation
NSDictionary de opciones del detector de códigos de barras 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

Vuelve a codificar la inicialización como se muestra en este ejemplo:

GMV

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

ML Kit

MLKTextRecognizer *textRecognizer = [MLKTextRecognizer textRecognizer];

GMVDetector tiene dos APIs de detección diferentes. Ambas son operaciones síncronas:

- (nullable NSArray<__kindof GMVFeature *> *)
    featuresInImage:(UIImage *)image
            options:(nullable NSDictionary *)options;

- (nullable NSArray<__kindof GMVFeature *> *)
    featuresInBuffer:(CMSampleBufferRef)sampleBuffer
             options:(nullable NSDictionary *)options;

Reemplaza GMVDetector por MLKTextRecognizer. Se puede llamar a la API de inferencia de forma síncrona o asíncrona.

Síncrona

- (nullable MLKText *)
    resultsInImage:(MLKVisionImage *)image
             error:(NSError **)error;

Asíncrona

- (void)processImage:(MLKVisionImage *)image
    Completion:
        (MLKTextRecognitionCallback)completion
    NS_SWIFT_NAME(process(_:completion:));

Cambia las siguientes clases, métodos y nombres:

GMV ML Kit
GMVDetectorImageOrientation MLKVisionImage.orientation
GMVTextBlockFeature MLKTextBlock
GMVTextElementFeature MLKTextElement
GMVTextLineFeature MLKTextLine

Cómo obtener ayuda

Si tienes algún problema, visita nuestra página de la Comunidad, en la que se describen los canales disponibles para comunicarte con nosotros.