Предварительные условия
Прежде чем приступить к переносу кода, убедитесь, что вы соответствуете этим требованиям:
- ML Kit поддерживает Xcode 13.2.1 или более поздней версии.
- ML Kit поддерживает iOS версии 10 или более поздней.
- 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 | Параметры метки изображения |
Цель-C
Старый класс или тип | Новый класс или тип |
---|---|
FIRAutoMLLocalModel | МЛКЛокальнаяМодель |
FIRAutoMLRemoteModel | MLKCustomRemoteModel |
FIRVisionBarcodeDetectionОбратный вызов | МЛКБаркодСканированиеОбратный вызов |
FIRVisionДетектор штрих-кода | MLKBarcodeScanner |
Параметры FIRVisionBarcodeDetector | MLKBarcodeScannerOptions |
FIRVisionImage | МЛКВижнИмидж |
FIRVisionOnDeviceAutoMLImageLabelerOptions | MLKCustomImageLabelerOptions |
FIRVisionOnDeviceImageLabelerOptions | MLKImageLabelerOptions |
FIRVisionPoint | МЛКВижнПоинт |
Цель-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, например
pod 'Firebase/Analytics'
. - Удалите из своего кода любую инициализацию FirebaseApp, например
FirebaseApp.configure()
. - Удалите приложение Firebase на консоли Firebase, следуя инструкциям на сайте поддержки Firebase.
Получение помощи
Если у вас возникнут какие-либо проблемы, посетите нашу страницу сообщества , где мы обозначаем доступные каналы для связи с нами.
Если не указано иное, контент на этой странице предоставляется по лицензии Creative Commons "С указанием авторства 4.0", а примеры кода – по лицензии Apache 2.0. Подробнее об этом написано в правилах сайта. Java – это зарегистрированный товарный знак корпорации Oracle и ее аффилированных лиц.
Последнее обновление: 2024-08-20 UTC.