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 do Google Mobile Vision (GMV) para o ML Kit no iOS.

Pré-requisitos

Antes de começar a migrar seu código, verifique se você atende a estes requisitos:

  • O Kit de ML é compatível com o Xcode 13.2.1 ou versões mais recentes.
  • O Kit de ML é compatível com o iOS versão 15.5 ou mais recente.
  • O ML Kit não oferece suporte a arquiteturas de 32 bits (i386 e armv7). O ML Kit é compatível com arquiteturas de 64 bits (x86_64 e arm64).

Atualizar cocoapods

Atualize as dependências dos CocoaPods do kit de ML para iOS no Podfile do app:

APIEquipe de 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 na 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 encapsula em um MLKVisionImage e usa isso como entrada.
  • O GMV usa NSDictionary para transmitir várias opções de detector. O ML Kit usa classes de opções dedicadas para essa finalidade.
  • O GMV transmite o tipo de detector para a classe única GMVDetector ao criar um detector. O ML Kit 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 ML Kit podem ser chamadas de forma síncrona e assíncrona.
  • O GMV estende o AVCaptureVideoDataOutput e oferece uma estrutura de vários detectores para realizar várias detecções ao mesmo tempo. O ML Kit não oferece esses mecanismos, mas a mesma funcionalidade pode ser implementada pelo desenvolvedor, se necessário.

Mudanças específicas da API

Esta seção descreve as classes e os métodos correspondentes do GMV e do ML Kit para cada API Vision e mostra como inicializar a API.

FaceDetector

Recodifique a inicialização como 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];

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 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 seguintes classes, métodos e nomes:

GMV Kit de ML
GMVFaceFeature MLKFace
GMVFaceContour MLKFaceContour
GMVDetectorImageOrientation MLKVisionImage.orientation
NSDictionary 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 como 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 seguintes classes, métodos e nomes:

GMV Kit de ML
GMVDetectorImageOrientation MLKVisionImage.orientation
NSDictionary opções de 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 como mostrado neste exemplo:

GMV

GMVDetector *textDetector =
    [GMVDetector detectorOfType:GMVDetectorTypeText options:nil];

Kit de ML

MLKTextRecognizer *textRecognizer = [MLKTextRecognizer textRecognizer];

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 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 seguintes classes, métodos e nomes:

GMV Kit de ML
GMVDetectorImageOrientation MLKVisionImage.orientation
GMVTextBlockFeature MLKTextBlock
GMVTextElementFeature MLKTextElement
GMVTextLineFeature MLKTextLine

Receber ajuda

Se tiver problemas, confira nossa página da comunidade, onde descrevemos os canais disponíveis para entrar em contato com nossa equipe.