Como migrar da Vision para dispositivos móveis para o Kit de ML no iOS

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:

APIEquipe do GMVPod 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 ou CMSampleBufferRef como entrada. O Kit de ML os envolve em um MLKVisionImage 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:

GMV Kit de ML
GMVFaceFeature MLKFace
GMVFaceContour MLKFaceContour
GMVDetectorImageOrientation MLKVisionImage.orientation
NSDictionary das opções de detecção facial MLKFaceDetectorOptions
GMVDetectorFaceFastMode Set MLKFaceDetectorOptions.performanceMode to MLKFaceDetectorPerformanceModeFast
GMVDetectorFaceAccurateMode Set MLKFaceDetectorOptions.performanceMode to MLKFaceDetectorPerformanceModeAccurate
GMVDetectorFaceSelfieMode Set MLKFaceDetectorOptions.contourMode to MLKFaceDetectorContourModeAll
GMVDetectorFaceLandmarkType MLKFaceDetectorOptions.landmarkMode
GMVDetectorFaceLandmarkNone Set MLKFaceDetectorOptions.landmarkMode to MLKFaceDetectorLandmarkModeNone
GMVDetectorFaceLandmarkAll Set MLKFaceDetectorOptions.landmarkMode to MLKFaceDetectorLandmarkModeAll
GMVDetectorFaceLandmarkContour Set MLKFaceDetectorOptions.contourMode to MLKFaceDetectorContourModeAll
GMVDetectorFaceClassificationType MLKFaceDetectorOptions.classificationMode
GMVDetectorFaceClassificationNone Set MLKFaceDetectorOptions.classificationMode to MLKFaceDetectorClassificationModeNone
GMVDetectorFaceClassificationAll Set MLKFaceDetectorOptions.classificationMode to MLKFaceDetectorClassificationModeAll
GMVDetectorFaceTrackingEnabled MLKFaceDetectorOptions.trackingEnabled
GMVDetectorProminentFaceOnly Set MLKFaceDetectorOptions.contourMode to MLKFaceDetectorContourModeAll
GMVDetectorFaceMinSize MLKFaceDetectorOptions.minFaceSize

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:

GMV Kit de ML
GMVDetectorImageOrientation MLKVisionImage.orientation
NSDictionary de opções do detector de código de barras MLKBarcodeScannerOptions
GMVDetectorBarcodeFormats MLKBarcodeScannerOptions.formats
GMVBarcodeFeature MLKBarcode
GMVBarcodeFeatureAddress MLKBarcodeAddress
GMVBarcodeFeatureCalendarEvent MLKBarcodeCalendarEvent
GMVBarcodeFeatureContactInfo MLKBarcodeContactInfo
GMVBarcodeFeatureDriverLicense MLKBarcodeDriverLicense
GMVBarcodeFeatureEmail MLKBarcodeEmail
GMVBarcodeFeatureGeoPoint MLKBarcodeGeoPoint
GMVBarcodeFeaturePersonName MLKBarcodePersonName
GMVBarcodeFeaturePhone MLKBarcodePhone
GMVBarcodeFeatureSMS MLKBarcodeSMS
GMVBarcodeFeatureURLBookmark MLKBarcodeURLBookmark
GMVBarcodeFeatureWiFi MLKBarcodeWiFi

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.