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