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

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

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

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

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 имеет два разных 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:));

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

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

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

GMVDetector *textDetector =
    [GMVDetector detectorOfType:GMVDetectorTypeText options:nil];
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:));

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

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

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