Migrazione da Mobile Vision a ML Kit su iOS

Questo documento illustra i passaggi da seguire per eseguire la migrazione dei progetti da Google Mobile Vision (GMV) a ML Kit su iOS.

Prerequisiti

Prima di iniziare a eseguire la migrazione del codice, assicurati di soddisfare i seguenti requisiti:

  • ML Kit supporta Xcode 13.2.1 o versioni successive.
  • ML Kit supporta iOS 15.5 o versioni successive.
  • ML Kit non supporta le architetture a 32 bit (i386 e armv7). ML Kit supporta le architetture a 64 bit (x86_64 e arm64).

Aggiorna CocoaPods

Aggiorna le dipendenze per i cocoapod di ML Kit per iOS nel file Podfile dell'app:

APIPod GMVPod ML Kit
Scansione di codici a barre GoogleMobileVision/BarcodeDetector GoogleMLKit/BarcodeScanning
Rilevamento facciale GoogleMobileVision/FaceDetector GoogleMLKit/FaceDetection
Riconoscimento del testo GoogleMobileVision/TextDetector GoogleMLKit/TextRecognition

Modifiche generali all'API

Queste modifiche si applicano a tutte le API:

  • Le API di inferenza di GMV accettano come input UIImage o CMSampleBufferRef. ML Kit le inserisce in un MLKVisionImage e le prende come input.
  • GMV utilizza NSDictionary per passare varie opzioni di rilevamento. A questo scopo, ML Kit utilizza classi di opzioni dedicate.
  • GMV passa il tipo di rilevatore alla singola classe GMVDetector quando crea un rilevatore. ML Kit utilizza classi dedicate per creare istanze di rilevatori, scanner e riconoscitori separati.
  • Le API GMV supportano solo il rilevamento sincrono. Le API di inferenza di ML Kit possono essere chiamate in modo sincrono e asincrono.
  • GMV estende AVCaptureVideoDataOutput e fornisce un framework multi-detector per eseguire più rilevamenti contemporaneamente. ML Kit non fornisce questi meccanismi, ma lo sviluppatore può implementare la stessa funzionalità, se lo desidera.

Modifiche specifiche per l'API

Questa sezione descrive le classi e i metodi GMV e ML Kit corrispondenti per ogni API Vision e mostra come inizializzare l'API.

FaceDetector

Ricodifica l'inizializzazione come mostrato in questo esempio:

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

GMVDetector ha due API di rilevamento diverse. Entrambe sono operazioni sincrone:

- (nullable NSArray<__kindof GMVFeature *> *)
    featuresInImage:(UIImage *)image
            options:(nullable NSDictionary *)options;

- (nullable NSArray<__kindof GMVFeature *> *)
    featuresInBuffer:(CMSampleBufferRef)sampleBuffer
             options:(nullable NSDictionary *)options;

Sostituisci GMVDetector con MLKFaceDetector. L'API di inferenza può essere chiamata in modo sincrono o asincrono.

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

Modifica le seguenti classi, metodi e nomi:

BarcodeDetector

Ricodifica l'inizializzazione come mostrato in questo esempio:

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

GMVDetector ha due API di rilevamento diverse. Entrambe sono operazioni sincrone:

- (nullable NSArray<__kindof GMVFeature *> *)
    featuresInImage:(UIImage *)image
            options:(nullable NSDictionary *)options;

- (nullable NSArray<__kindof GMVFeature *> *)
    featuresInBuffer:(CMSampleBufferRef)sampleBuffer
             options:(nullable NSDictionary *)options;

Sostituisci GMVDetector con MLKBarcodeScanner. L'API di inferenza può essere chiamata in modo sincrono o asincrono.

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

Modifica le seguenti classi, metodi e nomi:

TextRecognition

Ricodifica l'inizializzazione come mostrato in questo esempio:

GMVML Kit
GMVDetector *textDetector =
    [GMVDetector detectorOfType:GMVDetectorTypeText options:nil];
MLKTextRecognizer *textRecognizer = [MLKTextRecognizer textRecognizer];

GMVDetector ha due API di rilevamento diverse. Entrambe sono operazioni sincrone:

- (nullable NSArray<__kindof GMVFeature *> *)
    featuresInImage:(UIImage *)image
            options:(nullable NSDictionary *)options;

- (nullable NSArray<__kindof GMVFeature *> *)
    featuresInBuffer:(CMSampleBufferRef)sampleBuffer
             options:(nullable NSDictionary *)options;

Sostituisci GMVDetector con MLKTextRecognizer. L'API di inferenza può essere chiamata in modo sincrono o asincrono.

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

Modifica le seguenti classi, metodi e nomi:

Richiesta di aiuto

In caso di problemi, consulta la nostra pagina Community, dove sono descritti i canali a tua disposizione per contattarci.