Migracja z Mobile Vision do ML Kit na iOS

Ten dokument opisuje czynności, które musisz wykonać, aby przenieść projekty z Z Google Mobile Vision (GMV) do ML Kit na iOS.

Wymagania wstępne

Zanim zaczniesz przenosić kod, upewnij się, że spełniasz te wymagania:

  • ML Kit obsługuje Xcode 13.2.1 i nowsze wersje.
  • 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).

Zaktualizuj cocoapods

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

Interfejs 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 do wnioskowania GMV przyjmuje jako dane wejściowe UIImage lub CMSampleBufferRef. ML Kit umieszcza je w elemencie MLKVisionImage i pobiera go jako dane wejściowe.
  • GMV używa NSDictionary do przekazywania różnych opcji detektorów. W tym celu ML Kit używa specjalnych klas opcji.
  • GMV przekazuje typ detektora do pojedynczej klasy GMVDetector po jego utworzeniu. ML Kit używa dedykowanych klas do tworzenia oddzielnych instancji detektorów, skanerów i rozpoznawania.
  • Interfejsy API GMV obsługują tylko wykrywanie synchroniczne. Interfejsy API do wnioskowania ML Kit można wywoływać synchronicznie i asynchronicznie.
  • GMV rozszerza możliwości AVCaptureVideoDataOutput i udostępnia platformę wielofunkcyjną do wykrywania wielu elementów jednocześnie. ML Kit nie zapewnia takich mechanizmów, ale deweloper może wdrożyć tę samą funkcjonalność w razie potrzeby.

Zmiany dotyczące interfejsu API

W tej sekcji opisano odpowiednie klasy i metody GMV i ML Kit dla każdego interfejsu Vision API oraz jak zainicjować interfejs API.

FaceDetector

Przekoduj inicjalizację zgodnie z tym przykładem:

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 dwa różne interfejsy API do wykrywania treści. Oba 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;

Zamień GMVDetector na MLKFaceDetector. Interfejs API wnioskowania można wywoł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

Przekoduj inicjalizację zgodnie z tym przykładem:

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 do wykrywania. Oba 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;

Zamień GMVDetector na MLKBarcodeScanner Interfejs API wnioskowania można wywoł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 wykrywania kodu kreskowego 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

Przekoduj inicjalizację zgodnie z tym przykładem:

GMV

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

ML Kit

MLKTextRecognizer *textRecognizer = [MLKTextRecognizer textRecognizer];

GMVDetector ma dwa różne interfejsy API do wykrywania treści. Oba 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;

Zamień GMVDetector na MLKTextRecognizer Interfejs API wnioskowania można wywoł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 jakieś problemy, zajrzyj na naszą stronę Społeczności. w którym wymieniamy kanały, za pomocą których można się z nami skontaktować.