В этом руководстве рассказывается, как перейти с ML Kit для Firebase для iOS.
Требования
Прежде чем начать перенос кода, убедитесь, что соблюдены следующие требования:
- 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/BarcodeScanning |
| Распознавание лица | Firebase/MLVision Firebase/MLVisionFaceModel |
GoogleMLKit/FaceDetection |
| Маркировка изображений | Firebase/MLVision Firebase/MLVisionLabelModel |
GoogleMLKit/ImageLabeling |
| Обнаружение и отслеживание объектов | Firebase/MLVisionObjectDetection | GoogleMLKit/ObjectDetection |
| Распознавание текста | Firebase/MLVision Firebase/MLVisionTextModel |
GoogleMLKit/TextRecognition |
| Автоматическая разметка изображений с помощью AutoML (встроенная модель) | Firebase/MLVisionAutoML | GoogleMLKit/ImageLabelingCustom |
| Автоматическая разметка изображений с помощью AutoML (модель скачана) | Firebase/MLVisionAutoML | GoogleMLKit/ImageLabelingCustom Чтобы разместить и скачать собственные модели, перенесите их в Cloud Storage и добавьте в приложение логику скачивания, чтобы загружать их как локальные модели. Подробную информацию вы найдете в руководстве по переносу данных из Firebase ML в Cloud Storage. |
| Идентификатор языка | Firebase/MLNaturalLanguage Firebase/MLNLLanguageID |
GoogleMLKit/LanguageID |
| Быстрый ответ | Firebase/MLNaturalLanguage Firebase/MLNLSmartReply |
GoogleMLKit/SmartReply |
| Перевести | Firebase/MLNaturalLanguage Firebase/MLNLTranslate |
GoogleMLKit/Translate |
Обновление названий классов, перечислений и типов
В общем случае классы, перечисления и типы нужно переименовать следующим образом:
- Swift: удалите префикс
Visionиз названий классов и перечислений. - Objective-C: замените префиксы класса и перечисления
FIRVisionиFIRнаMLK.
Для некоторых названий и типов классов это общее правило не применяется:
Swift
| Старый класс или тип | Новый класс или тип |
|---|---|
| AutoMLLocalModel | LocalModel |
| AutoMLRemoteModel | LocalModel Требуется скачать вручную. Удаленные модели, размещенные в Firebase, больше не поддерживаются. Подробную информацию можно найти в руководстве по переносу данных из Firebase ML в Cloud Storage. |
| VisionBarcodeDetectionCallback | BarcodeScanningCallback |
| VisionBarcodeDetector | BarcodeScanner |
| VisionBarcodeDetectorOptions | BarcodeScannerOptions |
| VisionImage | VisionImage (без изменений) |
| VisionPoint | VisionPoint (без изменений) |
| VisionOnDeviceAutoMLImageLabelerOptions | CustomImageLabelerOptions |
| VisionOnDeviceImageLabelerOptions | ImageLabelerOptions |
Objective-C
| Старый класс или тип | Новый класс или тип |
|---|---|
| FIRAutoMLLocalModel | MLKLocalModel |
| FIRAutoMLRemoteModel | MLKLocalModel Требуется скачать вручную. Удаленные модели, размещенные в Firebase, больше не поддерживаются. Подробную информацию можно найти в руководстве по переносу данных из Firebase ML в Cloud Storage. |
| FIRVisionBarcodeDetectionCallback | MLKBarcodeScanningCallback |
| FIRVisionBarcodeDetector | MLKBarcodeScanner |
| FIRVisionBarcodeDetectorOptions | MLKBarcodeScannerOptions |
| FIRVisionImage | MLKVisionImage |
| FIRVisionPoint | MLKVisionPoint |
| FIRVisionOnDeviceAutoMLImageLabelerOptions | MLKCustomImageLabelerOptions |
| FIRVisionOnDeviceImageLabelerOptions | MLKImageLabelerOptions |
Обновление названий методов
Названия методов должны соответствовать следующим правилам:
Классы точек входа домена (
Vision,NaturalLanguage) больше не существуют. Они были заменены классами, предназначенными для решения определенных задач. Замените вызовы различных заводских методов для получения детекторов прямыми вызовами заводского метода каждого детектора.Класс
VisionImageMetadataбыл удален вместе с перечислениемVisionDetectorImageOrientation. Чтобы задать ориентацию изображения, используйте свойствоorientationобъектаVisionImage.Метод
onDeviceTextRecognizer, который получает новый экземплярTextRecognizer, переименован вtextRecognizer.Свойство confidence удалено из классов результатов распознавания текста, включая
TextElement,TextLineиTextBlock.Методы
onDeviceImageLabelerиonDeviceImageLabeler(options:)для получения нового экземпляраImageLabelerбыли объединены и переименованы вimageLabeler(options:).Удален метод
objectDetector, позволяющий получить новый экземплярObjectDetector. Используйте вместо негоobjectDetector(options:).Свойство
typeудалено изImageLabeler, а свойствоentityID– из класса результатов маркировки изображенийImageLabel.API сканирования штрихкодов
detect(in _:, completion:)переименован вprocess(_:, completion:), чтобы соответствовать другим API Vision.В Natural Language 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. Для этого выполните следующие действия:
- Удалите файл конфигурации Firebase, удалив файл
GoogleService-Info.plistиз каталога приложения и проекта Xcode. - Удалите из файла Podfile все CocoaPods, связанные с Firebase, например
pod 'Firebase/Analytics'. - Удалите из кода все инициализации FirebaseApp, например
FirebaseApp.configure(). - Удалите приложение Firebase в консоли Firebase, следуя инструкциям на сайте поддержки Firebase.
Если вам нужна помощь
Если у вас возникнут проблемы, ознакомьтесь с информацией на странице сообщества, где перечислены доступные способы связи с нами.