Переход с 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 вашего приложения:

API GMV Pod ML 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 для каждого API Vision, а также показано, как инициализировать API.

FaceDetector

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

GMV

NSDictionary *options = @{
    GMVDetectorFaceMode : @(GMVDetectorFaceAccurateMode),
    GMVDetectorFaceClassificationType : @(GMVDetectorFaceClassificationAll),
    GMVDetectorFaceLandmarkType : @(GMVDetectorFaceLandmarkAll)
};
GMVDetector *faceDetector =
    [GMVDetector detectorOfType:GMVDetectorTypeFace options:options];

Набор ML

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

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

GMV Набор ML
GMVFaceFeature MLKFace
GMVFaceContour MLKFaceContour
GMVDetectorImageOrientation MLKVisionImage.orientation
NSDictionary of face detection options 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

Детектор штрихкодов

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

GMV

NSDictionary *options = @{
    GMVDetectorBarcodeFormats : @(GMVDetectorBarcodeFormatCode128 |
                                  GMVDetectorBarcodeFormatQRCode)
};
GMVDetector *barcodeDetector =
    [GMVDetector detectorOfType:GMVDetectorTypeBarcode options:options];

Набор ML

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

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

GMV Набор ML
GMVDetectorImageOrientation MLKVisionImage.orientation
NSDictionary of barcode detector options 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

Распознавание текста

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

GMV

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

Набор ML

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

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

GMV Набор ML
GMVDetectorImageOrientation MLKVisionImage.orientation
GMVTextBlockFeature MLKTextBlock
GMVTextElementFeature MLKTextElement
GMVTextLineFeature MLKTextLine

Получение помощи

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