Este documento aborda as etapas necessárias para migrar seus projetos de Google Mobile Vision (GMV) para o kit de ML no iOS.
Pré-requisitos
Antes de iniciar a migração do seu código, verifique se você atende a estes requisitos:
- O kit de ML oferece suporte ao Xcode 13.2.1 ou mais recente.
- O Kit de ML é compatível com o iOS versão 10 ou mais recente.
- O Kit de ML não é compatível com arquiteturas de 32 bits (i386 e armv7). O Kit de ML é compatível com arquiteturas de 64 bits (x86_64 e arm64).
Atualizar o Cocoapods
Atualize as dependências dos cocoapods para iOS do Kit de ML no Podfile do app:
API | Conjunto 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 se aplicam a todas as APIs:
- As APIs de inferência do GMV usam
UIImage
ouCMSampleBufferRef
como entrada. O Kit de ML os envolve em umMLKVisionImage
e usa isso como entrada. - O GMV usa
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
ao criar um detector. O Kit de ML usa classes dedicadas para criar instâncias separadas de detector, scanner e reconhecedor. - As APIs do GMV oferecem suporte apenas à 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 com 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 você quiser.
Mudanças específicas da API
Esta seção descreve as classes e os métodos correspondentes do GMV e do kit de ML para cada API Vision e mostra como inicializá-la.
FaceDetector
Recodifique 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 dois
diferentes APIs de detecção. 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íncrono
- (void)processImage:(MLKVisionImage *)image Completion: (MLKFaceDetectionCallback)completion NS_SWIFT_NAME(process(_:completion:));
Mude as classes, os métodos e os nomes abaixo:
BarcodeDetector
Recodifique 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íncrono
- (void)processImage:(MLKVisionImage *)image Completion: (MLKBarcodeScanningCallback)completion NS_SWIFT_NAME(process(_:completion:));
Mude as classes, os métodos e os nomes abaixo:
TextRecognition
Recodifique a inicialização conforme mostrado neste exemplo:
GMV
GMVDetector *textDetector = [GMVDetector detectorOfType:GMVDetectorTypeText options:nil];
Kit de ML
MLKTextRecognizer *textRecognizer = [MLKTextRecognizer textRecognizer];
GMVDetector
tem dois
diferentes APIs de detecção. 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íncrono
- (void)processImage:(MLKVisionImage *)image Completion: (MLKTextRecognitionCallback)completion NS_SWIFT_NAME(process(_:completion:));
Mude as classes, os métodos e os nomes abaixo:
GMV | Kit de ML |
---|---|
GMVDetectorImageOrientation
|
MLKVisionImage.orientation
|
GMVTextBlockFeature
|
MLKTextBlock
|
GMVTextElementFeature
|
MLKTextElement
|
GMVTextLineFeature
|
MLKTextLine
|
Receber ajuda
Se tiver algum problema, confira nossa página da comunidade. em que descrevemos os canais disponíveis para entrar em contato conosco.