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:
- ML Kit es compatible con Xcode 13.2.1 o versiones posteriores.
- ML Kit admite iOS 15.5 o versiones posteriores.
- ML Kit no admite 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 ML Kit para iOS en el Podfile de tu app:
| API | Grupo de GMV | Grupo 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 del GMV toman
UIImageoCMSampleBufferRefcomo entrada. ML Kit los encapsula dentro de unMLKVisionImagey lo toma como entrada. - GMV usa
NSDictionarypara pasar varias opciones del detector. Para ello, ML Kit usa clases de opciones específicas. - El GMV pasa el tipo de detector a la única clase
GMVDetectorcuando crea un detector. ML Kit usa clases específicas para crear instancias separadas de detectores, escáneres y reconocedores. - 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.
- El GMV extiende
AVCaptureVideoDataOutputy proporciona un marco de trabajo 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 correspondientes de GMV y ML Kit 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íncrono
- (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íncrono
- (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íncrono
- (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, consulta nuestra página de la comunidad, en la que se describen los canales disponibles para comunicarte con nosotros.