Migracja z Mobile Vision do ML Kit na iOS

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

Wymagania wstępne

Zanim zaczniesz migrację kodu, upewnij się, że spełniasz te wymagania:

  • Zestaw ML Kit obsługuje Xcode w wersji 13.2.1 lub nowszej.
  • Zestaw ML Kit obsługuje system iOS w wersji 15.5 lub nowszej.
  • Zestaw ML Kit nie obsługuje architektur 32-bitowych (i386 i armv7). Zestaw ML Kit obsługuje architektury 64-bitowe (x86_64 i arm64).

Zaktualizuj cocoapods

Zaktualizuj zależności dla pakietów 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 API wnioskowania GMV przyjmują jako dane wejściowe UIImage lub CMSampleBufferRef. Zestaw ML Kit opakowuje je w obiekt MLKVisionImage i wykorzystuje jako dane wejściowe.
  • GMV używa NSDictionary do przekazywania różnych opcji detektora. Zestaw ML Kit używa w tym celu specjalnych klas opcji.
  • GMV przekazuje typ detektora do pojedynczej klasy GMVDetector podczas tworzenia detektora. Zestaw ML Kit używa dedykowanych klas do tworzenia oddzielnych 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 do wykonywania wielu wykryć jednocześnie. Zestaw ML Kit nie udostępnia takich mechanizmów, ale deweloper może w razie potrzeby wdrożyć tę samą funkcję.

Zmiany dotyczące interfejsów API

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

FaceDetector

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

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 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;

Zastąp GMVDetector ciągiem 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:

wartość handlowa brutto 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:

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 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;

Zastąp GMVDetector ciągiem 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:

wartość handlowa brutto ML Kit
GMVDetectorImageOrientation MLKVisionImage.orientation
NSDictionary z opcji wykrywania 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:

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 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;

Zastąp GMVDetector ciągiem 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:

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

Uzyskiwanie pomocy

Jeśli napotkasz jakiekolwiek problemy, odwiedź naszą stronę społeczności, na której znajdziesz informacje o dostępnych kanałach kontaktu z nami.