Миграция для 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 предоставляется только в формате Coca-Cola. Совместное использование фреймворков и Coca-Cola невозможно, поэтому для использования этой библиотеки необходимо сначала перейти на Coca-Cola.

Обновление Cocoapods

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

API Старые названия модулей Новое имя(я) модуля
Сканирование штрих-кода Firebase/MLVision
Firebase/MLVisionBarcodeModel
GoogleMLKit/Сканирование штрихкодов
Распознавание лиц Firebase/MLVision
Firebase/MLVisionFaceModel
GoogleMLKit/Распознавание лиц
Маркировка изображений 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/Переводчик

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

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

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

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

Быстрый

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

Objective-C

Старый класс или тип Новый класс или тип
FIRAutoMLLocalModel MLKLocalModel
FIRAutoMLRemoteModel MLKCustomRemoteModel
FIRVisionBarcodeDetectionCallback MLKBarcodeScanningCallback
FIRVisionBarcodeDetector MLKBarcodeScanner
FIRVisionBarcodeDetectorOptions MLKBarcodeScannerOptions
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 Coca-Cola, например pod 'Firebase/Analytics' , из вашего Podfile.
  • Удалите из кода любую инициализацию FirebaseApp, например FirebaseApp.configure() .
  • Удалите приложение Firebase в консоли Firebase, следуя инструкциям на сайте поддержки Firebase.

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

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