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