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:
API | Grupo de GMV | Pod 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
oCMSampleBufferRef
como entrada. El Kit de AA los une dentro de unMLKVisionImage
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:
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:
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.