Предпосылки
Прежде чем начать перенос кода, убедитесь, что вы соответствуете следующим требованиям:
- 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-10-23 UTC.