Миграция для 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/Сканирование штрихкодов
Распознавание лиц Firebase/MLVision
Firebase/MLVisionFaceModel
GoogleMLKit/Распознавание лиц
Маркировка изображений Firebase/MLVision
Firebase/MLVisionLabelModel
GoogleMLKit/ИзображениеМаркировка
Обнаружение и отслеживание объектов Firebase/MLVisionОбнаружениеОбъектов GoogleMLKit/Обнаружение объектов
Распознавание текста 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/MLNLSmartОтветить
GoogleMLKit/SmartReply
Переводить Firebase/MLNaturalLanguage
Firebase/MLNLTranslate
GoogleMLKit/Переводчик

Обновить имена классов, перечислений и типов

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

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

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

Быстрый

Старый класс или тип Новый класс или тип
AutoMLLocalModel ЛокальнаяМодель
AutoMLRemoteModel CustomRemoteModel
VisionBarcodeDetectionОбратный звонок ШтрихкодСканированиеОбратный звонок
VisionBarcodeDetector BarcodeScanner
VisionBarcodeDetectorOptions BarcodeScannerОпции
ВидениеИзображение VisionImage (без изменений)
VisionPoint VisionPoint (без изменений)
VisionOnDeviceAutoMLImageLabelerOptions CustomImageLabelerOptions
VisionOnDeviceImageLabelerOptions ImageLabelerOptions

Objective-C

Старый класс или тип Новый класс или тип
FIRAutoMLLocalModel MLKLocalModel
FIRAutoMLRemoteModel MLKCustomRemoteModel
FIRVisionBarcodeDetectionCallback MLKBrcodeScanningCallback
FIRVisionBarcodeDetector MLKBarcodeScanner
FIRVisionBarcodeDetectorOptions MLKBrcodeScannerОпции
FIRVisionImage MLKVisionImage
FIRVisionOnDeviceAutoMLImageLabelerOptions MLKCustomImageLabelerOptions
FIRVisionOnDeviceImageLabelerOptions MLKImageLabelerOptions
FIRVisionPoint MLKVisionPoint

Objective-C

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

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

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

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

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

  • Свойство достоверности было удалено из классов результатов распознавания текста, включая 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.
  • Удалите все модули Firebase CocacooPod, например pod 'Firebase/Analytics' , из вашего Podfile.
  • Удалите из кода любую инициализацию FirebaseApp, например FirebaseApp.configure() .
  • Удалите приложение Firebase в консоли Firebase, следуя инструкциям на сайте поддержки Firebase.

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

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