Este documento aborda as etapas que você precisa seguir para migrar seus projetos do Google Mobile Vision (GMV) para o Kit de ML no iOS.
Pré-requisitos
Antes de começar a migrar seu código, verifique se você atende a estes requisitos:
- O Kit de ML oferece suporte para Xcode 13.2.1 ou mais recente.
- O Kit de ML oferece suporte para iOS versão 10 ou mais recente.
- O Kit de ML não oferece suporte a arquiteturas de 32 bits (i386 e armv7). O Kit de ML oferece suporte a arquiteturas de 64 bits (x86_64 e arm64).
Atualizar o Cocoapods
Atualize as dependências dos cocoapods do kit de ML para iOS no Podfile do app:
API | Equipe do GMV | Pod do kit de ML |
---|---|---|
Leitura de código de barras | GoogleMobileVision/BarcodeDetector |
GoogleMLKit/BarcodeScanning |
Detecção facial | GoogleMobileVision/FaceDetector |
GoogleMLKit/FaceDetection |
Reconhecimento de texto | GoogleMobileVision/TextDetector |
GoogleMLKit/TextRecognition |
Mudanças gerais da API
Essas mudanças são válidas para todas as APIs:
- As APIs de inferência do GMV usam
UIImage
ouCMSampleBufferRef
como entrada. O Kit de ML os envolve em umMLKVisionImage
e os recebe como entrada. - O GMV usa o
NSDictionary
para transmitir várias opções de detector. O Kit de ML usa classes de opções dedicadas para essa finalidade. - O GMV transmite o tipo de detector para a única classe
GMVDetector
quando cria um detector. O Kit de ML usa classes dedicadas para criar instâncias separadas de detector, scanner e reconhecedor. - As APIs do GMV são compatíveis somente com a detecção síncrona. As APIs de inferência do Kit de ML podem ser chamadas de forma síncrona e assíncrona.
- O GMV estende o
AVCaptureVideoDataOutput
e fornece um framework de vários detectores para realizar várias detecções ao mesmo tempo. O Kit de ML não oferece esses mecanismos, mas a mesma funcionalidade pode ser implementada pelo desenvolvedor, se desejado.
Mudanças específicas de APIs
Esta seção descreve as classes e os métodos GMV e do Kit de ML correspondentes para cada API Vision e mostra como inicializar a API.
FaceDetector
Codifique a inicialização conforme mostrado neste exemplo:
GMV
NSDictionary *options = @{ GMVDetectorFaceMode : @(GMVDetectorFaceAccurateMode), GMVDetectorFaceClassificationType : @(GMVDetectorFaceClassificationAll), GMVDetectorFaceLandmarkType : @(GMVDetectorFaceLandmarkAll) }; GMVDetector *faceDetector = [GMVDetector detectorOfType:GMVDetectorTypeFace options:options];
Kit de ML
MLKFaceDetectorOptions *options = [[MLKFaceDetectorOptions alloc] init]; options.performanceMode = MLKFaceDetectorPerformanceModeAccurate; options.classificationMode = MLKFaceDetectorClassificationModeAll; options.landmarkMode = MLKFaceDetectorLandmarkModeAll; MLKFaceDetector *faceDetector = [MLKFaceDetector faceDetectorWithOptions:options];
GMVDetector
tem duas
APIs de detecção diferentes. Ambas são operações síncronas:
- (nullable NSArray<__kindof GMVFeature *> *) featuresInImage:(UIImage *)image options:(nullable NSDictionary *)options; - (nullable NSArray<__kindof GMVFeature *> *) featuresInBuffer:(CMSampleBufferRef)sampleBuffer options:(nullable NSDictionary *)options;
Substitua GMVDetector
por MLKFaceDetector
.
A API de inferência pode ser chamada de forma síncrona ou assíncrona.
Síncrona
- (nullable NSArray<MLKFace *> *) resultsInImage:(MLKVisionImage *)image error:(NSError **)error;
Assíncrona
- (void)processImage:(MLKVisionImage *)image Completion: (MLKFaceDetectionCallback)completion NS_SWIFT_NAME(process(_:completion:));
Altere as classes, os métodos e os nomes a seguir:
BarcodeDetector
Codifique a inicialização conforme mostrado neste exemplo:
GMV
NSDictionary *options = @{ GMVDetectorBarcodeFormats : @(GMVDetectorBarcodeFormatCode128 | GMVDetectorBarcodeFormatQRCode) }; GMVDetector *barcodeDetector = [GMVDetector detectorOfType:GMVDetectorTypeBarcode options:options];
Kit de ML
MLKBarcodeScannerOptions *options = [[MLKBarcodeScannerOptions alloc] init]; options.formats = MLKBarcodeFormatCode128 | MLKBarcodeFormatQRCode; MLKBarcodeScanner *barcodeScanner = [MLKBarcodeScanner barcodeScannerWithOptions:options];
O GMVDetector
tem duas APIs de detecção diferentes. Ambas são operações síncronas:
- (nullable NSArray<__kindof GMVFeature *> *) featuresInImage:(UIImage *)image options:(nullable NSDictionary *)options; - (nullable NSArray<__kindof GMVFeature *> *) featuresInBuffer:(CMSampleBufferRef)sampleBuffer options:(nullable NSDictionary *)options;
Substitua GMVDetector
por
MLKBarcodeScanner
.
A API de inferência pode ser chamada de forma síncrona ou assíncrona.
Síncrona
- (nullable NSArray<MLKBarcode *> *) resultsInImage:(MLKVisionImage *)image error:(NSError **)error;
Assíncrona
- (void)processImage:(MLKVisionImage *)image Completion: (MLKBarcodeScanningCallback)completion NS_SWIFT_NAME(process(_:completion:));
Altere as classes, os métodos e os nomes a seguir:
TextRecognition
Codifique a inicialização conforme mostrado neste exemplo:
GMV
GMVDetector *textDetector = [GMVDetector detectorOfType:GMVDetectorTypeText options:nil];
Kit de ML
MLKTextRecognizer *textRecognizer = [MLKTextRecognizer textRecognizer];
GMVDetector
tem duas
APIs de detecção diferentes. Ambas são operações síncronas:
- (nullable NSArray<__kindof GMVFeature *> *) featuresInImage:(UIImage *)image options:(nullable NSDictionary *)options; - (nullable NSArray<__kindof GMVFeature *> *) featuresInBuffer:(CMSampleBufferRef)sampleBuffer options:(nullable NSDictionary *)options;
Substitua GMVDetector
por
MLKTextRecognizer
.
A API de inferência pode ser chamada de forma síncrona ou assíncrona.
Síncrona
- (nullable MLKText *) resultsInImage:(MLKVisionImage *)image error:(NSError **)error;
Assíncrona
- (void)processImage:(MLKVisionImage *)image Completion: (MLKTextRecognitionCallback)completion NS_SWIFT_NAME(process(_:completion:));
Altere as classes, os métodos e os nomes a seguir:
GMV | Kit de ML |
---|---|
GMVDetectorImageOrientation
|
MLKVisionImage.orientation
|
GMVTextBlockFeature
|
MLKTextBlock
|
GMVTextElementFeature
|
MLKTextElement
|
GMVTextLineFeature
|
MLKTextLine
|
Receber ajuda
Se você tiver algum problema, confira nossa página da comunidade, onde descrevemos os canais disponíveis para entrar em contato conosco.