Предпосылки
Прежде чем начать перенос кода, убедитесь, что вы соответствуете следующим требованиям:
- 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.
Получение помощи
Если у вас возникнут какие-либо проблемы, посетите страницу нашего сообщества , где мы описываем доступные каналы связи с нами.
Если не указано иное, контент на этой странице предоставляется по лицензии Creative Commons "С указанием авторства 4.0", а примеры кода – по лицензии Apache 2.0. Подробнее об этом написано в правилах сайта. Java – это зарегистрированный товарный знак корпорации Oracle и ее аффилированных лиц.
Последнее обновление: 2025-09-03 UTC.