Переход с Mobile Vision на ML Kit в iOS

В этом документе описаны шаги, которые необходимо предпринять для переноса проектов из Google Mobile Vision (GMV) в ML Kit на iOS.

Требования

Прежде чем начать перенос кода, убедитесь, что выполнены следующие требования:

  • ML Kit поддерживает Xcode 13.2.1 и более поздние версии.
  • ML Kit поддерживает iOS 15.5 и более поздние версии.
  • ML Kit не поддерживает 32-битные архитектуры (i386 и armv7). ML Kit поддерживает 64-разрядные архитектуры (x86_64 и arm64).

Обновите CocoaPods

Обновите зависимости для cocoapods ML Kit для iOS в файле Podfile вашего приложения:

APIGMV PodML Kit Pod
Сканирование штрихкодов GoogleMobileVision/BarcodeDetector GoogleMLKit/BarcodeScanning
Распознавание лица GoogleMobileVision/FaceDetector GoogleMLKit/FaceDetection
Распознавание текста GoogleMobileVision/TextDetector GoogleMLKit/TextRecognition

Общие изменения в API

Эти изменения касаются всех API:

  • API вывода GMV принимают в качестве входных данных UIImage или CMSampleBufferRef. ML Kit упаковывает их в MLKVisionImage и принимает в качестве входных данных.
  • GMV использует NSDictionary для передачи различных параметров детектора. Для этого в ML Kit используются специальные классы параметров.
  • GMV передает тип детектора в один класс GMVDetector при создании детектора. ML Kit использует специальные классы для создания отдельных экземпляров детектора, сканера и распознавателя.
  • API GMV поддерживают только синхронное распознавание. API вывода ML Kit можно вызывать синхронно и асинхронно.
  • GMV расширяет AVCaptureVideoDataOutput и предоставляет фреймворк с несколькими детекторами для одновременного выполнения нескольких обнаружений. В ML Kit таких механизмов нет, но при желании разработчик может реализовать их самостоятельно.

Изменения, связанные с API

В этом разделе описываются соответствующие классы и методы GMV и ML Kit для каждого Vision API, а также показано, как инициализировать API.

FaceDetector

Перекодируйте инициализацию, как показано в этом примере:

Стоимость выполненных заказов

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 имеет два разных API обнаружения. Обе операции являются синхронными:

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

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

Замените GMVDetector на MLKFaceDetector. API вывода можно вызывать синхронно или асинхронно.

Синхронная

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

Асинхронный код

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

Измените следующие классы, методы и названия:

Стоимость выполненных заказов ML Kit
GMVFaceFeature MLKFace
GMVFaceContour MLKFaceContour
GMVDetectorImageOrientation MLKVisionImage.orientation
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

Перекодируйте инициализацию, как показано в этом примере:

Стоимость выполненных заказов

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 есть два разных API для распознавания. Обе операции являются синхронными:

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

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

Замените GMVDetector на MLKBarcodeScanner. API вывода можно вызывать синхронно или асинхронно.

Синхронная

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

Асинхронный код

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

Измените следующие классы, методы и названия:

Стоимость выполненных заказов ML Kit
GMVDetectorImageOrientation MLKVisionImage.orientation
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

Перекодируйте инициализацию, как показано в этом примере:

Стоимость выполненных заказов

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

ML Kit

MLKTextRecognizer *textRecognizer = [MLKTextRecognizer textRecognizer];

GMVDetector имеет два разных API обнаружения. Обе операции являются синхронными:

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

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

Замените GMVDetector на MLKTextRecognizer. API вывода можно вызывать синхронно или асинхронно.

Синхронная

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

Асинхронный код

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

Измените следующие классы, методы и названия:

Стоимость выполненных заказов ML Kit
GMVDetectorImageOrientation MLKVisionImage.orientation
GMVTextBlockFeature MLKTextBlock
GMVTextElementFeature MLKTextElement
GMVTextLineFeature MLKTextLine

Помощь

Если у вас возникнут проблемы, посетите страницу сообщества, где указаны доступные каналы связи с нами.