Migracja z Mobile Vision do ML Kit na iOS

Ten dokument zawiera instrukcje przenoszenia projektów z Google Mobile Vision (GMV) do ML Kit na iOS.

Wymagania wstępne

Zanim zaczniesz migrować kod, 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 pakietu ML Kit na iOS w pliku Podfile aplikacji:

Interfejs APIPod GMVKapsułka 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 przyjmują jako dane wejściowe UIImage lub CMSampleBufferRef. ML Kit umieszcza je w ramach obiektu MLKVisionImage i traktuje jako dane wejściowe.
  • GMV używa NSDictionary do przekazywania różnych opcji wykrywacza. Do tego celu ML Kit używa specjalnych klas opcji.
  • Podczas tworzenia wzorca GMV przekazuje typ wzorca do pojedynczej klasy GMVDetector. ML Kit używa specjalnych klas do tworzenia oddzielnych instancji wzorca, skanera i rozpoznawacza.
  • Interfejsy GMV obsługują tylko wykrywanie synchroniczne. Interfejsy API wnioskowania w ML Kit można wywoływać synchronicznie i asynchronicznie.
  • GMV rozszerza AVCaptureVideoDataOutput i zawiera ramy wielodetektorowe do wykonywania wielu wykryć jednocześnie. ML Kit nie udostępnia takich mechanizmów, ale deweloper może w razie potrzeby zaimplementować te same funkcje.

Zmiany dotyczące interfejsu API

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

FaceDetector

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

NSDictionary *options = @{
    GMVDetectorFaceMode : @(GMVDetectorFaceAccurateMode),
    GMVDetectorFaceClassificationType : @(GMVDetectorFaceClassificationAll),
    GMVDetectorFaceLandmarkType : @(GMVDetectorFaceLandmarkAll)
};
GMVDetector *faceDetector =
    [GMVDetector detectorOfType:GMVDetectorTypeFace options:options];
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. Interfejs API wnioskowania może być wywoływany synchronicznie lub asynchronicznie.

- (nullable NSArray<MLKFace *> *)
    resultsInImage:(MLKVisionImage *)image
             error:(NSError **)error;
- (void)processImage:(MLKVisionImage *)image
    Completion:
        (MLKFaceDetectionCallback)completion
    NS_SWIFT_NAME(process(_:completion:));

Zmień te klasy, metody i nazwy:

BarcodeDetector

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

NSDictionary *options = @{
    GMVDetectorBarcodeFormats : @(GMVDetectorBarcodeFormatCode128 |
                                  GMVDetectorBarcodeFormatQRCode)
};
GMVDetector *barcodeDetector =
    [GMVDetector detectorOfType:GMVDetectorTypeBarcode options:options];
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 MLKBarcodeScanner. Interfejs API wnioskowania może być wywoływany synchronicznie lub asynchronicznie.

- (nullable NSArray<MLKBarcode *> *)
    resultsInImage:(MLKVisionImage *)image
             error:(NSError **)error;
- (void)processImage:(MLKVisionImage *)image
    Completion:
        (MLKBarcodeScanningCallback)completion
    NS_SWIFT_NAME(process(_:completion:));

Zmień te klasy, metody i nazwy:

TextRecognition

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

GMVDetector *textDetector =
    [GMVDetector detectorOfType:GMVDetectorTypeText options:nil];
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 MLKTextRecognizer. Interfejs API wnioskowania może być wywoływany synchronicznie lub asynchronicznie.

- (nullable MLKText *)
    resultsInImage:(MLKVisionImage *)image
             error:(NSError **)error;
- (void)processImage:(MLKVisionImage *)image
    Completion:
        (MLKTextRecognitionCallback)completion
    NS_SWIFT_NAME(process(_:completion:));

Zmień te klasy, metody i nazwy:

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.