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) 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 versiones posteriores.
  • ML Kit es compatible con iOS 15.5 o versiones posteriores.
  • El Kit de AA no es compatible con arquitecturas de 32 bits (i386 y armv7). ML Kit admite arquitecturas de 64 bits (x86_64 y arm64).

Actualiza CocoaPods

Actualiza las dependencias de los CocoaPods de iOS de ML Kit en el Podfile de tu app:

APIPod de GMVGrupo de ML Kit
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. ML Kit los une en un MLKVisionImage y lo toma como entrada.
  • GMV usa NSDictionary para pasar varias opciones de detector. ML Kit usa clases de opciones dedicadas para ese propósito.
  • 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 detector, escáner y reconocedor.
  • Las APIs de GMV solo admiten la detección síncrona. Se puede llamar a las APIs de inferencia de ML Kit de forma síncrona y asíncrona.
  • GMV extiende AVCaptureVideoDataOutput y proporciona un framework de varios detectores para realizar varias detecciones al mismo tiempo. ML Kit 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:

GMVML Kit
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 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.

- (nullable NSArray<MLKFace *> *)
    resultsInImage:(MLKVisionImage *)image
             error:(NSError **)error;
- (void)processImage:(MLKVisionImage *)image
    Completion:
        (MLKFaceDetectionCallback)completion
    NS_SWIFT_NAME(process(_:completion:));

Cambia las siguientes clases, métodos y nombres:

BarcodeDetector

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

GMVML Kit
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 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.

- (nullable NSArray<MLKBarcode *> *)
    resultsInImage:(MLKVisionImage *)image
             error:(NSError **)error;
- (void)processImage:(MLKVisionImage *)image
    Completion:
        (MLKBarcodeScanningCallback)completion
    NS_SWIFT_NAME(process(_:completion:));

Cambia las siguientes clases, métodos y nombres:

TextRecognition

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

GMVML Kit
GMVDetector *textDetector =
    [GMVDetector detectorOfType:GMVDetectorTypeText options:nil];
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.

- (nullable MLKText *)
    resultsInImage:(MLKVisionImage *)image
             error:(NSError **)error;
- (void)processImage:(MLKVisionImage *)image
    Completion:
        (MLKTextRecognitionCallback)completion
    NS_SWIFT_NAME(process(_:completion:));

Cambia las siguientes clases, métodos y nombres:

Cómo obtener ayuda

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