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

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

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

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

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

  • Классы точек входа в домен ( 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.

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

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