Миграция для iOS

Предварительные требования

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

  • ML Kit поддерживает Xcode 13.2.1 и более поздние версии.
  • ML Kit поддерживает iOS версии 15.5 и выше.
  • ML Kit не поддерживает 32-битные архитектуры (i386 и armv7). ML Kit поддерживает 64-битные архитектуры (x86_64 и arm64).
  • Библиотека ML Kit предоставляется только в виде Cocoapods. Нельзя смешивать фреймворки и Cocoapods, поэтому для использования этой библиотеки необходимо сначала перейти на использование Cocoapods.

Обновить Cocoapods

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

API Старое(ые) название(я) пода Новое(ые) название(я) пода
сканирование штрих-кода Firebase/MLVision
Firebase/MLVisionBarcodeModel
GoogleMLKit/BarcodeScanning
Обнаружение лиц Firebase/MLVision
Firebase/MLVisionFaceModel
GoogleMLKit/FaceDetection
Разметка изображений Firebase/MLVision
Firebase/MLVisionLabelModel
GoogleMLKit/ImageLabeling
Обнаружение и отслеживание объектов Firebase/MLVisionObjectDetection GoogleMLKit/ObjectDetection
распознавание текста Firebase/MLVision
Firebase/MLVisionTextModel
GoogleMLKit/Распознавание текста
Автоматическая разметка изображений AutoML (пакетная модель) Firebase/MLVisionAutoML GoogleMLKit/ImageLabelingCustom
Автоматическая разметка изображений с помощью AutoML (загрузка модели из Firebase) Firebase/MLVisionAutoML GoogleMLKit/ImageLabelingCustom
GoogleMLKit/LinkFirebase
Идентификатор языка Firebase/MLNaturalLanguage
Firebase/MLNLLanguageID
GoogleMLKit/LanguageID
Умный ответ Firebase/MLNaturalLanguage
Firebase/MLNLSmartReply
GoogleMLKit/SmartReply
Переводить Firebase/MLNaturalLanguage
Firebase/MLNLTranslate
GoogleMLKit/Translate

Обновите названия классов, перечислений и типов.

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

  • Swift: Удалите префикс Vision из имен классов и перечислений.
  • Objective-C: Замените префиксы имен классов и перечислений FIRVision и FIR на MLK

Для некоторых названий классов и типов это общее правило не применяется:

Быстрый

Старый класс или тип Новый класс или тип
AutoMLLocalModel LocalModel
AutoMLRemoteModel CustomRemoteModel
VisionBarcodeDetectionCallback Сканирование штрихкода Обратный вызов
VisionBarcodeDetector Сканер штрихкодов
VisionBarcodeDetectorOptions Параметры сканера штрихкодов
VisionImage VisionImage (без изменений)
VisionPoint VisionPoint (без изменений)
VisionOnDeviceAutoMLImageLabelerOptions CustomImageLabelerOptions
VisionOnDeviceImageLabelerOptions ImageLabelerOptions

Objective-C

Старый класс или тип Новый класс или тип
FIRAutoMLLocalModel MLKLocalModel
FIRAutoMLRemoteModel MLKCustomRemoteModel
FIRVisionBarcodeDetectionCallback MLKBarcodeScanningCallback
Детектор штрихкодов FIRVision MLKBarcodeScanner
Параметры детектора штрихкодов FIRVision MLKBarcodeScannerOptions
FIRVisionImage MLKVisionImage
FIRVisionOnDeviceAutoMLImageLabelerOptions MLKCustomImageLabelerOptions
FIRVisionOnDeviceImageLabelerOptions MLKImageLabelerOptions
FIRVisionPoint MLKVisionPoint

Objective-C

Обновить названия методов

Обновите названия методов в соответствии со следующими правилами:

  • Классы точек входа в предметную область ( Vision , NaturalLanguage ) больше не существуют. Они были заменены классами, специфичными для конкретных задач. Замените вызовы их различных фабричных методов для получения детекторов прямыми вызовами фабричных методов каждого детектора.

  • Класс VisionImageMetadata был удален, как и перечисление VisionDetectorImageOrientation . Используйте свойство orientation класса VisionImage для указания ориентации изображения на экране.

  • Метод onDeviceTextRecognizer , который получает новый экземпляр TextRecognizer был переименован в textRecognizer .

  • Свойство confidence было удалено из классов результатов распознавания текста, включая TextElement , TextLine и TextBlock .

  • Методы onDeviceImageLabeler и onDeviceImageLabeler(options:) , позволяющие получить новый экземпляр ImageLabeler были объединены и переименованы в imageLabeler(options:) .

  • Метод objectDetector для получения нового экземпляра ObjectDetector был удален. Используйте objectDetector(options:) вместо него.

  • Свойство type было удалено из ImageLabeler , а свойство entityID — из класса результатов разметки изображений ImageLabel .

  • API сканирования штрихкодов detect(in _:, completion:) был переименован в process(_:, completion:) для обеспечения согласованности с другими API обработки изображений.

  • В API обработки естественного языка теперь используется термин «языковой тег» (как определено в стандарте BCP-47 ) вместо «языковой код».

  • Теперь TranslateLanguage использует читаемые имена (например, .english) для своих констант вместо языковых тегов (например, .en).

Вот несколько примеров старых и новых методов Swift:

Старый

let options = VisionOnDeviceImageLabelerOptions()
options.confidenceThreshold = 0.75
let labeler = Vision.vision().onDeviceImageLabeler(options: options)

let detector = Vision.vision().faceDetector(options: options)

let localModel = AutoMLLocalModel(manifestPath: "automl/manifest.json")
let options = VisionOnDeviceAutoMLImageLabelerOptions(localModel: localModel)
options.confidenceThreshold = 0.75
let labeler = vision.onDeviceAutoMLImageLabeler(options: options)

let detector = Vision.vision().objectDetector()
    

Новый

let options = ImageLabelerOptions()
options.confidenceThreshold = NSNumber(value:0.75)
let labeler = ImageLabeler.imageLabeler(options: options)

let detector = FaceDetector.faceDetector(options: options)

let localModel = LocalModel(manifestPath: "automl/manifest.json")
let options = CustomImageLabelerOptions(localModel: localModel)
options.confidenceThreshold = NSNumber(value:0.75)
let labeler = ImageLabeler.imageLabeler(options: options)

let detector = ObjectDetector.objectDetector(options: ObjectDetectorOptions())
    

Вот несколько примеров старых и новых методов Objective-C:

Старый

FIRVisionOnDeviceImageLabelerOptions *options = 
    [[FIRVisionOnDeviceImageLabelerOptions alloc] init];
options.confidenceThreshold = 0.75;
FIRVisionImageLabeler *labeler = 
    [[FIRVision vision] onDeviceImageLabelerWithOptions:options];

FIRVisionFaceDetector *detector =
    [[FIRVision vision] faceDetectorWithOptions: options];

FIRAutoMLLocalModel *localModel =
    [[FIRAutoMLLocalModel alloc] initWithManifestPath:@"automl/manifest.json"];
FIRVisionOnDeviceAutoMLImageLabelerOptions *options =
    [[FIRVisionOnDeviceAutoMLImageLabelerOptions alloc]
        initWithLocalModel: localModel];
options.confidenceThreshold = 0.75
FIRVisionImageLabeler *labeler =
    [[FIRVision vision] onDeviceAutoMLImageLabelerWithOptions:options];

FIRVisionObjectDetector *detector =
    [[FIRVision vision] objectDetector];
    

Новый

MLKImageLabelerOptions *options =
    [[MLKImageLabelerOptions alloc] init];
options.confidenceThreshold = @(0.75);
MLKImageLabeler *labeler =
    [MLKImageLabeler imageLabelerWithOptions:options];

MLKFaceDetector *detector =
    [MLKFaceDetector faceDetectorWithOptions:options];

MLKLocalModel *localModel =
    [[MLKLocalModel alloc]
        initWithManifestPath:@"automl/manifest.json"];
MLKCustomImageLabelerOptions *options =
    [[MLKCustomImageLabelerOptions alloc] initWithLocalModel:localModel];
options.confidenceThreshold = @(0.75)
MLKImageLabeler *labeler =
    [MLKImageLabeler imageLabelerWithOptions:options];

MLKObjectDetectorOptions *options = [[MLKObjectDetectorOptions alloc] init];
MLKObjectDetector *detector = [MLKObjectDetector objectDetectorWithOptions:options];
    

изменения, специфичные для API

Обнаружение и отслеживание объектов

Если ваше приложение использует классификацию объектов, имейте в виду, что в новом SDK изменился способ возврата категории классификации для обнаруженных объектов.

VisionObjectCategory в VisionObject возвращается в виде text в объекте ObjectLabel , а не целого числа. Все возможные строковые категории включены в перечисление DetectedObjectLabel .

Обратите внимание, что категория .unknown была удалена. Когда уверенность в классификации объекта низка, классификатор не возвращает никакой метки.

Вот пример старого и нового кода на Swift:

Старый

if (object.classificationCategory == .food) {
    ...
}

Новый

if let label = object.labels.first {
  if (label.text == DetectedObjectLabel.food.rawValue) {
    ...
  }
}
// or
if let label = object.labels.first {
  if (label.index == DetectedObjectLabelIndex.food.rawValue) {
    ...
  }
}

Вот пример старого и нового кода на Objective-C:

Старый

if (object.classificationCategory == FIRVisionObjectCategoryFood) {
    ...
}

Новый

if ([object.labels[0].text isEqualToString:MLKDetectedObjectLabelFood]) {
  ...
}
// or
if ([object.labels[0].index == MLKDetectedObjectLabelIndexFood]) {
  ...
}

Удалите зависимости Firebase (необязательно)

Этот шаг применяется только при соблюдении следующих условий:

  • Firebase ML Kit — это единственный компонент Firebase, который вы используете.
  • Вы используете только API, встроенные в устройство.
  • Вы не используете подачу моделей.

В этом случае вы можете удалить зависимости Firebase после миграции. Выполните следующие шаги:

  • Удалите файл конфигурации Firebase, удалив файл GoogleService-Info.plist из каталога вашего приложения и из проекта Xcode.
  • Удалите из вашего Podfile все Cocoapod-файлы Firebase, например, pod 'Firebase/Analytics' .
  • Удалите из кода все инициализации FirebaseApp, например, FirebaseApp.configure() .
  • Удалите приложение Firebase в консоли Firebase в соответствии с инструкциями на сайте поддержки Firebase.

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

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