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 10 o versioni successive.
  • ML Kit non supporta architetture a 32 bit (i386 e armv7). ML Kit supporta architetture a 64 bit (x86_64 e arm64).

Aggiorna cocoapod

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

APIPod RLVPod 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 prendono UIImage o CMSampleBufferRef come input. ML Kit li inserisce in una MLKVisionImage e li prende come input.
  • RLV utilizza NSDictionary per superare varie opzioni di rilevatori. A questo scopo, ML Kit utilizza classi di opzioni dedicate.
  • RLV passa il tipo di rilevatore alla singola classe GMVDetector quando crea un rilevatore. ML Kit utilizza classi dedicate per creare istanze separate di rilevatore, scanner e riconoscimento.
  • Le API di 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-rilevamento per eseguire più rilevamenti contemporaneamente. ML Kit non fornisce questi meccanismi, ma la stessa funzionalità può essere implementata dallo sviluppatore, se lo desidera.

Modifiche specifiche per l'API

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

FaceDetector

Ricodifica l'inizializzazione come mostrato in questo esempio:

RLV

NSDictionary *options = @{
    GMVDetectorFaceMode : @(GMVDetectorFaceAccurateMode),
    GMVDetectorFaceClassificationType : @(GMVDetectorFaceClassificationAll),
    GMVDetectorFaceLandmarkType : @(GMVDetectorFaceLandmarkAll)
};
GMVDetector *faceDetector =
    [GMVDetector detectorOfType:GMVDetectorTypeFace options:options];

ML Kit

MLKFaceDetectorOptions *options = [[MLKFaceDetectorOptions alloc] init];
options.performanceMode = MLKFaceDetectorPerformanceModeAccurate;
options.classificationMode = MLKFaceDetectorClassificationModeAll;
options.landmarkMode = MLKFaceDetectorLandmarkModeAll;
MLKFaceDetector *faceDetector = [MLKFaceDetector faceDetectorWithOptions:options];

GMVDetector ha due diverse API di rilevamento. Sono entrambe 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.

Sincrona

- (nullable NSArray<MLKFace *> *)
    resultsInImage:(MLKVisionImage *)image
             error:(NSError **)error;

Asincrona

- (void)processImage:(MLKVisionImage *)image
    Completion:
        (MLKFaceDetectionCallback)completion
    NS_SWIFT_NAME(process(_:completion:));

Modifica i seguenti metodi, nomi e classi:

RLV ML Kit
GMVFaceFeature MLKFace
GMVFaceContour MLKFaceContour
GMVDetectorImageOrientation MLKVisionImage.orientation
NSDictionary di opzioni di rilevamento dei volti 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

Ricodifica l'inizializzazione come mostrato in questo esempio:

RLV

NSDictionary *options = @{
    GMVDetectorBarcodeFormats : @(GMVDetectorBarcodeFormatCode128 |
                                  GMVDetectorBarcodeFormatQRCode)
};
GMVDetector *barcodeDetector =
    [GMVDetector detectorOfType:GMVDetectorTypeBarcode options:options];

ML Kit

MLKBarcodeScannerOptions *options = [[MLKBarcodeScannerOptions alloc] init];
options.formats = MLKBarcodeFormatCode128 | MLKBarcodeFormatQRCode;
MLKBarcodeScanner *barcodeScanner =
    [MLKBarcodeScanner barcodeScannerWithOptions:options];

GMVDetector dispone di due diverse API di rilevamento. Sono entrambe 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.

Sincrona

- (nullable NSArray<MLKBarcode *> *)
    resultsInImage:(MLKVisionImage *)image
             error:(NSError **)error;

Asincrona

- (void)processImage:(MLKVisionImage *)image
    Completion:
        (MLKBarcodeScanningCallback)completion
    NS_SWIFT_NAME(process(_:completion:));

Modifica i seguenti metodi, nomi e classi:

RLV ML Kit
GMVDetectorImageOrientation MLKVisionImage.orientation
NSDictionary di opzioni del rilevatore di codici a barre 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

Ricodifica l'inizializzazione come mostrato in questo esempio:

RLV

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

ML Kit

MLKTextRecognizer *textRecognizer = [MLKTextRecognizer textRecognizer];

GMVDetector ha due diverse API di rilevamento. Sono entrambe 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.

Sincrona

- (nullable MLKText *)
    resultsInImage:(MLKVisionImage *)image
             error:(NSError **)error;

Asincrona

- (void)processImage:(MLKVisionImage *)image
    Completion:
        (MLKTextRecognitionCallback)completion
    NS_SWIFT_NAME(process(_:completion:));

Modifica i seguenti metodi, nomi e classi:

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

Richiesta di aiuto

Se riscontri problemi, consulta la pagina della community in cui sono indicati i canali disponibili per metterti in contatto con noi.