Переход с 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).

Обновление какаоподов

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

API Модуль GMV Модуль комплекта ML
Сканирование штрих-кода 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.

Детектор лица

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

ГМВ

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

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

ГМВ ML-комплект
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

Детектор штрих-кода

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

ГМВ

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

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

ГМВ ML-комплект
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

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

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

ГМВ

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

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

ГМВ ML-комплект
GMVDetectorImageOrientation MLKVisionImage.orientation
GMVTextBlockFeature MLKTextBlock
GMVTextElementFeature MLKTextElement
GMVTextLineFeature MLKTextLine

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

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