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

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

Прежде чем приступить к переносу кода, убедитесь, что вы соответствуете этим требованиям:

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

Обновить какаподы

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

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

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

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

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

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

Быстрый

Старый класс или тип Новый класс или тип
АутоМЛокальнаяМодель Локальнаямодель
AutoMLRemoteModel CustomRemoteModel
VisionBarcodeDetectionОбратный вызов Штрих-кодСканированиеОбратный вызов
ВидениеДетектор Штрих-кода Сканер штрих-кода
Параметры VisionBarcodeDetector Параметры сканера штрих-кода
ВидениеИзображение VisionImage (без изменений)
ВидениеПойнт VisionPoint (без изменений)
VisionOnDeviceAutoMLImageLabelerOptions Параметры CustomImageLabelerOptions
VisionOnDeviceImageLabelerOptions Параметры метки изображения

Цель-C

Старый класс или тип Новый класс или тип
FIRAutoMLLocalModel МЛКЛокальнаяМодель
FIRAutoMLRemoteModel MLKCustomRemoteModel
FIRVisionBarcodeDetectionОбратный вызов МЛКБаркодСканированиеОбратный вызов
FIRVisionДетектор штрих-кода MLKBarcodeScanner
Параметры FIRVisionBarcodeDetector MLKBarcodeScannerOptions
FIRVisionImage МЛКВижнИмидж
FIRVisionOnDeviceAutoMLImageLabelerOptions MLKCustomImageLabelerOptions
FIRVisionOnDeviceImageLabelerOptions MLKImageLabelerOptions
FIRVisionPoint МЛКВижнПоинт

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

Получать помощь

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