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 Kit de ML no iOS.

Pré-requisitos

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

  • O Kit de ML é compatível com o Xcode 13.2.1 ou mais recente.
  • O Kit de ML é compatível com a versão 15.5 ou mais recente do iOS.
  • 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 cocoapods

Atualize as dependências dos cocoapods do Kit de ML para iOS no Podfile do seu app:

APIPod 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 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 as envolve em um MLKVisionImage e o usa 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 classe GMVDetector única 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 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 AVCaptureVideoDataOutput e oferece uma estrutura 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 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 inicializar a API.

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 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 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];

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 de 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 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í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 você tiver problemas, consulte nossa página da comunidade em que descrevemos os canais disponíveis para entrar em contato conosco.