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

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:

APIConjunto 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 se aplicam a 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 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:

GMV Kit de ML
GMVFaceFeature MLKFace
GMVFaceContour MLKFaceContour
GMVDetectorImageOrientation MLKVisionImage.orientation
NSDictionary de 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

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:

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

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.