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 o código, verifique 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 o iOS 15.5 ou versões mais recentes.
  • O ML Kit não oferece suporte a arquiteturas de 32 bits (i386 e armv7). O ML Kit oferece suporte a arquiteturas de 64 bits (x86_64 e arm64).

Atualizar o Cocoapods

Atualize as dependências do ML Kit iOS cocoapods no Podfile do app:

APIEquipe do GMVKit 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 agrupa em um MLKVisionImage e os 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 ú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 só oferecem suporte à 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 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

Recode a inicialização, conforme mostrado neste exemplo:

NSDictionary *options = @{
    GMVDetectorFaceMode : @(GMVDetectorFaceAccurateMode),
    GMVDetectorFaceClassificationType : @(GMVDetectorFaceClassificationAll),
    GMVDetectorFaceLandmarkType : @(GMVDetectorFaceLandmarkAll)
};
GMVDetector *faceDetector =
    [GMVDetector detectorOfType:GMVDetectorTypeFace options:options];
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.

- (nullable NSArray<MLKFace *> *)
    resultsInImage:(MLKVisionImage *)image
             error:(NSError **)error;
- (void)processImage:(MLKVisionImage *)image
    Completion:
        (MLKFaceDetectionCallback)completion
    NS_SWIFT_NAME(process(_:completion:));

Mude as seguintes classes, métodos e nomes:

BarcodeDetector

Recode a inicialização, conforme mostrado neste exemplo:

NSDictionary *options = @{
    GMVDetectorBarcodeFormats : @(GMVDetectorBarcodeFormatCode128 |
                                  GMVDetectorBarcodeFormatQRCode)
};
GMVDetector *barcodeDetector =
    [GMVDetector detectorOfType:GMVDetectorTypeBarcode options:options];
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.

- (nullable NSArray<MLKBarcode *> *)
    resultsInImage:(MLKVisionImage *)image
             error:(NSError **)error;
- (void)processImage:(MLKVisionImage *)image
    Completion:
        (MLKBarcodeScanningCallback)completion
    NS_SWIFT_NAME(process(_:completion:));

Mude as seguintes classes, métodos e nomes:

TextRecognition

Recode a inicialização, conforme mostrado neste exemplo:

GMVDetector *textDetector =
    [GMVDetector detectorOfType:GMVDetectorTypeText options:nil];
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.

- (nullable MLKText *)
    resultsInImage:(MLKVisionImage *)image
             error:(NSError **)error;
- (void)processImage:(MLKVisionImage *)image
    Completion:
        (MLKTextRecognitionCallback)completion
    NS_SWIFT_NAME(process(_:completion:));

Mude as seguintes classes, métodos e nomes:

Receber ajuda

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