Migracja z Mobile Vision do ML Kit na iOS

W tym dokumencie opisujemy czynności, które należy wykonać, aby przenieść projekty z Google Mobile Vision (GMV) do ML Kit na iOS.

Wymagania wstępne

Zanim rozpoczniesz migrację 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 15.5 lub nowszej.
  • ML Kit nie obsługuje architektur 32-bitowych (i386 i armv7). ML Kit obsługuje architektury 64-bitowe (x86_64 i arm64).

Aktualizowanie cocoapods

Zaktualizuj zależności w przypadku cocoapods ML Kit na iOS w pliku Podfile aplikacji:

Interfejs APIGMV PodML Kit Pod
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 GMV API do wnioskowania przyjmują jako dane wejściowe UIImage lub CMSampleBufferRef. ML Kit umieszcza je w obiekcie MLKVisionImage i traktuje go jako dane wejściowe.
  • GMV używa NSDictionary do przekazywania różnych opcji detektora. W tym celu ML Kit używa specjalnych klas opcji.
  • GMV przekazuje typ wzorca do wykrywania treści do pojedynczej klasy GMVDetector podczas tworzenia wzorca. ML Kit używa specjalnych klas do tworzenia osobnych instancji detektora, skanera i rozpoznawania.
  • Interfejsy API GMV obsługują tylko wykrywanie synchroniczne. Interfejsy API wnioskowania ML Kit można wywoływać synchronicznie i asynchronicznie.
  • GMV rozszerza AVCaptureVideoDataOutput i zapewnia platformę z wieloma detektorami, która umożliwia przeprowadzanie wielu wykrywań jednocześnie. ML Kit nie udostępnia takich mechanizmów, ale w razie potrzeby deweloper może zaimplementować tę samą funkcję.

Zmiany dotyczące interfejsu API

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

FaceDetector

Zmień kod inicjowania, jak pokazano w tym przykładzie:

GMV

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 operacje są synchroniczne:

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

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

Zamień GMVDetector na MLKFaceDetector. Interfejsu Inference API można używać synchronicznie lub asynchronicznie.

Synchroniczna

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

Asynchroniczny

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

Zmień te klasy, metody i nazwy:

GMV ML Kit
GMVFaceFeature MLKFace
GMVFaceContour MLKFaceContour
GMVDetectorImageOrientation MLKVisionImage.orientation
NSDictionary opcji wykrywania twarzy 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, jak pokazano w tym przykładzie:

GMV

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 wykrywania. Obie operacje są synchroniczne:

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

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

Zamień GMVDetector na MLKBarcodeScanner. Interfejsu Inference API można używać synchronicznie lub asynchronicznie.

Synchroniczna

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

Asynchroniczny

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

Zmień te klasy, metody i nazwy:

GMV ML Kit
GMVDetectorImageOrientation MLKVisionImage.orientation
NSDictionary opcji detektora kodów kreskowych 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, jak pokazano w tym przykładzie:

GMV

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

ML Kit

MLKTextRecognizer *textRecognizer = [MLKTextRecognizer textRecognizer];

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

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

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

Zamień GMVDetector na MLKTextRecognizer. Interfejsu Inference API można używać synchronicznie lub asynchronicznie.

Synchroniczna

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

Asynchroniczny

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

Zmień te klasy, metody i nazwy:

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

Uzyskiwanie pomocy

Jeśli napotkasz jakiekolwiek problemy, zajrzyj na naszą stronę społeczności, gdzie znajdziesz informacje o kanałach, za pomocą których możesz się z nami skontaktować.