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

В этом руководстве объясняется, как перейти с ML Kit for Firebase для 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/MLVisionAutoML GoogleMLKit/ImageLabelingCustom

Чтобы размещать и загружать пользовательские модели, переместите свои модели в Cloud Storage и добавьте в приложение логику загрузки, позволяющую загружать их как локальные модели. Подробности см. в руководстве по миграции Firebase ML в Cloud Storage .
Идентификатор языка 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 LocalModel

Требуется ручная загрузка. Удаленные модели, размещенные в Firebase, устарели. Подробности см. в руководстве по миграции из Firebase ML в Cloud Storage .
VisionBarcodeDetectionCallback Сканирование штрихкода Обратный вызов
VisionBarcodeDetector Сканер штрихкодов
VisionBarcodeDetectorOptions Параметры сканера штрихкодов
VisionImage VisionImage (без изменений)
VisionPoint VisionPoint (без изменений)
VisionOnDeviceAutoMLImageLabelerOptions CustomImageLabelerOptions
VisionOnDeviceImageLabelerOptions ImageLabelerOptions

Objective-C

Старый класс или тип Новый класс или тип
FIRAutoMLLocalModel MLKLocalModel
FIRAutoMLRemoteModel MLKLocalModel

Требуется ручная загрузка. Удаленные модели, размещенные в Firebase, устарели. Подробности см. в руководстве по миграции из Firebase ML в Cloud Storage .
FIRVisionBarcodeDetectionCallback MLKBarcodeScanningCallback
Детектор штрихкодов FIRVision MLKBarcodeScanner
Параметры детектора штрихкодов FIRVision MLKBarcodeScannerOptions
FIRVisionImage MLKVisionImage
FIRVisionPoint MLKVisionPoint
FIRVisionOnDeviceAutoMLImageLabelerOptions MLKCustomImageLabelerOptions
FIRVisionOnDeviceImageLabelerOptions MLKImageLabelerOptions

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

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

  • Классы точек входа в предметную область ( 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. Выполните следующие шаги:

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

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

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