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:
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 de GMV toman
UIImage
oCMSampleBufferRef
como entrada. El ML Kit los envuelve en unMLKVisionImage
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:
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:
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.