Migracja z Mobile Vision do ML Kit na iOS

Ten dokument zawiera opis czynności, które musisz wykonać, aby przenieść swoje projekty z Google Mobile Vision (GMV) do ML Kit w iOS.

Wymagania wstępne

Przed rozpoczęciem migracji kodu upewnij się, że spełniasz te wymagania:

  • ML Kit obsługuje Xcode w wersji 13.2.1 lub nowszej.
  • ML Kit obsługuje system iOS w wersji 10 lub nowszej.
  • ML Kit nie obsługuje 32-bitowych architektur (i386 i Armv7). ML Kit obsługuje architekturę 64-bitową (x86_64 i arm64).

Aktualizacja Cocoapods

Zaktualizuj zależności dla Cocoapodów na iOS ML Kit w pliku Pod aplikacji:

APIPod GMVPod ML Kit
Skanowanie kodów kreskowych GoogleMobileVision/BarcodeDetector GoogleMLKit/BarcodeScanning
Wykrywanie twarzy GoogleMobileVision/FaceDetector GoogleMLKit/FaceDetection
Rozpoznawanie tekstu GoogleMobileVision/TextDetector GoogleMLKit/TextRecognition

Ogólne zmiany w interfejsie API

Te zmiany dotyczą wszystkich interfejsów API:

  • Interfejsy API wnioskowania GMV pobierają UIImage lub CMSampleBufferRef jako dane wejściowe. ML Kit umieszcza je wewnątrz obiektu MLKVisionImage i traktuje je jako dane wejściowe.
  • GMV używa NSDictionary do przekazywania różnych opcji wykrywania. ML Kit używa do tego celu specjalnych klas opcji.
  • Po utworzeniu detektora GMV przekazuje typ wzorca do pojedynczej klasy GMVDetector. ML Kit używa dedykowanych klas do tworzenia oddzielnych instancji detektora, skanera i modułu rozpoznawania.
  • Interfejsy API GMV obsługują tylko wykrywanie synchroniczne. Interfejsy API wnioskowania z pakietu ML Kit można wywoływać synchronicznie i asynchronicznie.
  • GMV rozszerza możliwości AVCaptureVideoDataOutput i zapewnia platformę do wykrywania wielu wzorców, która umożliwia wykonywanie wielu wykrywania jednocześnie. ML Kit nie udostępnia takich mechanizmów, ale w razie potrzeby deweloper może wdrożyć tę samą funkcję.

Zmiany związane z interfejsem API

W tej sekcji opisujemy odpowiednie klasy i metody GMV oraz ML Kit dla każdego interfejsu Vision API oraz pokazujemy, jak go zainicjować.

FaceDetector

Zmień kod inicjowania zgodnie z tym przykładem:

wartość handlowa brutto

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 ma 2 różne interfejsy API do wykrywania. Obie są operacjami synchronicznymi:

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

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

Zastąp GMVDetector wartością MLKFaceDetector. Interfejs API wnioskowania można wywoływać synchronicznie lub asynchronicznie.

Synchroniczna

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

Asynchroniczna

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

Zmień te klasy, metody i nazwy:

wartość handlowa brutto ML Kit
GMVFaceFeature MLKFace
GMVFaceContour MLKFaceContour
GMVDetectorImageOrientation MLKVisionImage.orientation
Opcje wykrywania twarzy: NSDictionary 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

Zmień kod inicjowania zgodnie z tym przykładem:

wartość handlowa brutto

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 ma 2 różne interfejsy API do wykrywania. Obie są operacjami synchronicznymi:

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

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

Zastąp GMVDetector wartością MLKBarcodeScanner. Interfejs API wnioskowania można wywoływać synchronicznie lub asynchronicznie.

Synchroniczna

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

Asynchroniczna

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

Zmień te klasy, metody i nazwy:

wartość handlowa brutto ML Kit
GMVDetectorImageOrientation MLKVisionImage.orientation
Opcje wykrywania kodów kreskowych: NSDictionary 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

Zmień kod inicjowania zgodnie z tym przykładem:

wartość handlowa brutto

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

ML Kit

MLKTextRecognizer *textRecognizer = [MLKTextRecognizer textRecognizer];

GMVDetector ma 2 różne interfejsy API do wykrywania. Obie są operacjami synchronicznymi:

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

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

Zastąp GMVDetector wartością MLKTextRecognizer. Interfejs API wnioskowania można wywoływać synchronicznie lub asynchronicznie.

Synchroniczna

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

Asynchroniczna

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

Zmień te klasy, metody i nazwy:

wartość handlowa brutto ML Kit
GMVDetectorImageOrientation MLKVisionImage.orientation
GMVTextBlockFeature MLKTextBlock
GMVTextElementFeature MLKTextElement
GMVTextLineFeature MLKTextLine

Uzyskiwanie pomocy

Jeśli napotkasz jakieś problemy, zajrzyj na stronę Społeczność, na której znajdziesz informacje o kanałach, za pomocą których można się z nami skontaktować.