Migración de Mobile Vision a ML Kit en iOS

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

Requisitos previos

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

  • El Kit de AA es compatible con Xcode 13.2.1 o una versión posterior.
  • El Kit de AA es compatible con iOS 10 o versiones posteriores.
  • El Kit de AA no admite arquitecturas de 32 bits (i386 y armv7). El Kit de AA admite arquitecturas de 64 bits (x86_64 y arm64).

Actualizar CocoaPods

Actualiza las dependencias de los CocoaPods de iOS del ML Kit 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 del GMV toman UIImage o CMSampleBufferRef como entrada. El Kit de AA los une dentro de un MLKVisionImage y los toma como entrada.
  • GMV usa NSDictionary para pasar varias opciones de detectores. El Kit de AA usa clases de opciones dedicadas para ese fin.
  • El GMV pasa el tipo de detector a la única clase GMVDetector cuando crea un detector. El Kit de AA usa clases dedicadas para crear instancias independientes de detector, escáner y reconocedor.
  • Las APIs 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 framework de varios detectores para realizar varias detecciones al mismo tiempo. El Kit de AA no proporciona esos 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 de 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 distintas APIs de detección. 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íncrono

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

Cambia las clases, los métodos y los nombres siguientes:

GMV ML Kit
GMVFaceFeature MLKFace
GMVFaceContour MLKFaceContour
GMVDetectorImageOrientation MLKVisionImage.orientation
NSDictionary de 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íncrono

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

Cambia las clases, los métodos y los nombres siguientes:

GMV ML Kit
GMVDetectorImageOrientation MLKVisionImage.orientation
NSDictionary de opciones de 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 distintas APIs de detección. 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íncrono

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

Cambia las clases, los métodos y los nombres siguientes:

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 describimos los canales disponibles para comunicarse con nosotros.