В этом руководстве объясняется, как перейти с ML Kit for Firebase для Android.
Обновите импорт Gradle.
Для каждого API ML Kit SDK требуется всего одна зависимость. Нет необходимости указывать общие библиотеки, такие как firebase-ml-vision или firebase-ml-natural-language . ML Kit использует пространство имен com.google.android.gms для библиотек, зависящих от сервисов Google Play.
API для обработки изображений
Встроенные модели поставляются как часть вашего приложения. Простые модели необходимо загрузить. Некоторые API доступны как в встроенном, так и в простом виде, другие — только в одном из двух вариантов:
| API | В комплекте | Тонкий |
|---|---|---|
| распознавание текста | x (бета) | х |
| Обнаружение лиц | х | х |
| сканирование штрихкода | х | х |
| Разметка изображений | х | х |
| Обнаружение и отслеживание объектов | х | - |
Обновите зависимости для библиотек ML Kit Android в файле Gradle вашего модуля (на уровне приложения) (обычно app/build.gradle.kts ) в соответствии со следующими таблицами:
Модели в комплекте
| API | Старинные артефакты | Новый артефакт |
|---|---|---|
| сканирование штрихкода | com.google.firebase:firebase-ml-vision:24.0.1 com.google.firebase:firebase-ml-vision-barcode-model:16.0.1 | com.google.mlkit:barcode-scanning:17.3.0 |
| контур лица | com.google.firebase:firebase-ml-vision:24.0.1 com.google.firebase:firebase-ml-vision-face-model:19.0.0 | com.google.mlkit:face-detection:16.1.7 |
| Разметка изображений | com.google.firebase:firebase-ml-vision:24.0.1 com.google.firebase:firebase-ml-vision-image-label-model:19.0.0 | com.google.mlkit:image-labeling:17.0.9 |
| Обнаружение объектов | com.google.firebase:firebase-ml-vision:24.0.1 com.google.firebase:firebase-ml-vision-object-detection-model:19.0.3 | com.google.mlkit:object-detection:17.0.2 |
Тонкие модели
| API | Старинные артефакты | Новый артефакт |
|---|---|---|
| сканирование штрихкода | com.google.firebase:firebase-ml-vision:24.0.1 | com.google.android.gms:play-services-mlkit-barcode-scanning:18.3.1 |
| Обнаружение лиц | com.google.firebase:firebase-ml-vision:24.0.1 | com.google.android.gms:play-services-mlkit-face-detection:17.1.0 |
| распознавание текста | com.google.firebase:firebase-ml-vision:24.0.1 | com.google.android.gms:play-services-mlkit-text-recognition:19.0.1 |
AutoMLVision Edge
| API | Старый артефакт | Новый артефакт |
|---|---|---|
| AutoML без скачивания | com.google.firebase:firebase-ml-vision:24.0.1 com.google.firebase:firebase-ml-vision-automl:18.0.3 | com.google.mlkit:image-labeling-custom:17.0.3 |
| AutoML с загрузкой | com.google.firebase:firebase-ml-vision:24.0.1 com.google.firebase:firebase-ml-vision-automl:18.0.3 | com.google.mlkit:image-labeling-custom:17.0.3 Чтобы размещать и загружать пользовательские модели, переместите свои модели в Cloud Storage и добавьте в приложение логику загрузки, позволяющую загружать их с помощью LocalModel . Подробности см. в руководстве по миграции Firebase ML в Cloud Storage . |
API для обработки естественного языка
Входящие в комплект модели поставляются как часть вашего приложения. Тонкие модели необходимо загрузить отдельно:
| API | В комплекте | Тонкий |
|---|---|---|
| Идентификатор языка | х | х |
| Умный ответ | х | x (бета) |
Обновите зависимости для библиотек ML Kit Android в файле Gradle вашего модуля (на уровне приложения) (обычно app/build.gradle.kts ) в соответствии со следующими таблицами:
Модели в комплекте
| API | Старинные артефакты | Новый артефакт |
|---|---|---|
| Идентификатор языка | com.google.firebase:firebase-ml-natural-language:22.0.0 com.google.firebase:firebase-ml-natural-language-language-id-model:20.0.7 | com.google.mlkit:language-id:17.0.6 |
| Умный ответ | com.google.firebase:firebase-ml-natural-language:22.0.0 com.google.firebase:firebase-ml-natural-language-smart-reply-model:20.0.7 | com.google.mlkit:smart-reply:17.0.4 |
Тонкие модели
| API | Старинные артефакты | Новый артефакт |
|---|---|---|
| Идентификатор языка | com.google.firebase:firebase-ml-natural-language:22.0.0 com.google.firebase:firebase-ml-natural-language-language-id-model:20.0.7 | com.google.android.gms:play-services-mlkit-language-id:17.0.0 |
| Умный ответ | com.google.firebase:firebase-ml-natural-language:22.0.0 com.google.firebase:firebase-ml-natural-language-smart-reply-model:20.0.7 | com.google.android.gms:play-services-mlkit-smart-reply:16.0.0-beta1 |
Обновить названия классов
Если ваш класс указан в этой таблице, внесите соответствующее изменение:
| Старый класс | Новый класс |
|---|---|
| com.google.firebase.ml.common.FirebaseMLException | com.google.mlkit.common.MlKitException |
| com.google.firebase.ml.vision.common.FirebaseVisionImage | com.google.mlkit.vision.common.InputImage |
| com.google.firebase.ml.vision.barcode.FirebaseVisionBarcodeDetector | com.google.mlkit.vision.barcode.BarcodeScanner |
| com.google.firebase.ml.vision.labeler.FirebaseVisionImageLabel | com.google.mlkit.vision.label.ImageLabeler |
| com.google.firebase.ml.vision.barcode.FirebaseVisionBarcodeDetector | com.google.mlkit.vision.barcode.BarcodeScanner |
| com.google.firebase.ml.vision.automl.FirebaseAutoMLLocalModel | com.google.mlkit.common.model.LocalModel |
| com.google.firebase.ml.vision.automl.FirebaseAutoMLRemoteModel | com.google.mlkit.common.model.LocalModel Требуется ручная загрузка. Удаленные модели, размещенные в Firebase, устарели. Подробности см. в руководстве по миграции из Firebase ML в Cloud Storage . |
| com.google.firebase.ml.vision.label.FirebaseVisionOnDeviceImageLabelerOptions | com.google.mlkit.vision.label.defaults.ImageLabelerOptions |
| com.google.firebase.ml.vision.label.FirebaseVisionImageLabel | com.google.mlkit.vision.label.ImageLabel |
| com.google.firebase.ml.vision.label.FirebaseVisionOnDeviceAutoMLImageLabelerOptions | com.google.mlkit.vision.label.custom.CustomImageLabelerOptions |
| com.google.firebase.ml.vision.objects.FirebaseVisionObjectDetectorOptions | com.google.mlkit.vision.objects.defaults.ObjectDetectorOptions |
Для других занятий следуйте этим правилам:
- Удалите префикс
FirebaseVisionиз имени класса. - Удалите из имени класса другие префиксы, начинающиеся с префикса
Firebase.
Кроме того, в названиях пакетов замените префикс com.google.firebase.ml на com.google.mlkit .
Обновить названия методов
Изменения в коде минимальны:
- Изменена процедура создания экземпляров детектора/сканера/методиста/переводчика. Теперь каждая функция имеет свою собственную точку входа. Например:
BarcodeScanning,TextRecognition,ImageLabeling,Translation... Вызовы методаgetInstance()сервиса Firebase заменены вызовами методаgetClient()точки входа функции. - Использование стандартных экземпляров
TextRecognizerбыло удалено, поскольку мы добавили дополнительные библиотеки для распознавания других шрифтов, таких как китайский и корейский. Чтобы использовать параметры по умолчанию с моделью распознавания текста на латинском языке, объявите зависимость отcom.google.android.gms:play-services-mlkit-text-recognitionи используйтеTextRecognition.getClient(TextRecognizerOptions.DEFAULT_OPTIONS). - Создание экземпляров
ImageLabelerиObjectDetectorпо умолчанию было удалено, поскольку мы ввели поддержку пользовательских моделей для этих двух функций. Например, чтобы использовать параметры по умолчанию с базовой моделью вImageLabeling, объявите зависимость отcom.google.mlkit:image-labelingи используйтеImageLabeling.getClient(ImageLabelerOptions.DEFAULT_OPTIONS)в Java. - Все объекты (детектор/сканер/метка/переводчик...) можно закрыть. Убедитесь, что метод
close()вызывается, когда эти объекты больше не будут использоваться. Если вы используете их воFragmentилиAppCompatActivity, один из способов сделать это — вызватьLifecycleOwner.getLifecycle()дляFragmentилиAppCompatActivity, а затем вызватьLifecycle.addObserver. -
processImage()иdetectInImage()в API Vision были переименованы вprocess()для обеспечения единообразия. - В API обработки естественного языка теперь используется термин «языковой тег» (как определено в стандарте BCP 47 ) вместо «языковой код».
- Методы-геттеры в классах
xxxOptionsбыли удалены. - Метод
getBitmap()в классеInputImage(заменяющийFirebaseVisionImage) больше не поддерживается как часть публичного интерфейса. Для преобразования растрового изображения из различных входных данных обратитесь к файлуBitmapUtils.javaв примере быстрого запуска ML Kit . -
FirebaseVisionImageMetadataудален, теперь вы можете просто передавать метаданные изображения, такие какwidth,height,rotationDegreesиformat, в методы конструктораInputImage.
Вот несколько примеров старых и новых методов Kotlin:
Старый
// Construct image labeler with base model and default options. val imageLabeler = FirebaseVision.getInstance().onDeviceImageLabeler // Construct object detector with base model and default options. val objectDetector = FirebaseVision.getInstance().onDeviceObjectDetector // Construct face detector with given options val faceDetector = FirebaseVision.getInstance().getVisionFaceDetector(options) // Construct image labeler with local AutoML model val localModel = FirebaseAutoMLLocalModel.Builder() .setAssetFilePath("automl/manifest.json") .build() val autoMLImageLabeler = FirebaseVision.getInstance() .getOnDeviceAutoMLImageLabeler( FirebaseVisionOnDeviceAutoMLImageLabelerOptions.Builder(localModel) .setConfidenceThreshold(0.3F) .build() )
Новый
// Construct image labeler with base model and default options. val imageLabeler = ImageLabeling.getClient(ImageLabelerOptions.DEFAULT_OPTIONS) // Optional: add lifecycle observer lifecycle.addObserver(imageLabeler) // Construct object detector with base model and default options. val objectDetector = ObjectDetection.getClient( ObjectDetectorOptions.DEFAULT_OPTIONS ) // Construct face detector with given options val faceDetector = FaceDetection.getClient(options) // Construct image labeler with local AutoML model val localModel = LocalModel.Builder() .setAssetManifestFilePath("automl/manifest.json") .build() val autoMLImageLabeler = ImageLabeling.getClient( CustomImageLabelerOptions.Builder(localModel) .setConfidenceThreshold(0.3F).build())
Вот несколько примеров старых и новых методов Java:
Старый
// Construct image labeler with base model and default options. FirebaseVisionImageLabeler imagelLabeler = FirebaseVision.getInstance().getOnDeviceImageLabeler(); // Construct object detector with base model and default options. FirebaseVisionObjectDetector objectDetector = FirebaseVision.getInstance().getOnDeviceObjectDetector(); // Construct face detector with given options FirebaseVisionFaceDetector faceDetector = FirebaseVision.getInstance().getVisionFaceDetector(options); // Construct image labeler with local AutoML model FirebaseAutoMLLocalModel localModel = new FirebaseAutoMLLocalModel.Builder() .setAssetFilePath("automl/manifest.json") .build(); FirebaseVisionImageLabeler autoMLImageLabeler = FirebaseVision.getInstance() .getOnDeviceAutoMLImageLabeler( FirebaseVisionOnDeviceAutoMLImageLabelerOptions.Builder(localModel) .setConfidenceThreshold(0.3F) .build());
Новый
// Construct image labeler with base model and default options. ImageLabeler imageLabeler = ImageLabeling.getClient( ImageLabelerOptions.DEFAULT_OPTIONS ); // Optional: add lifecycle observer getLifecycle().addObserver(imageLabeler); // Construct object detector with base model and default options. ObjectDetector objectDetector = ObjectDetection.getClient( ObjectDetectorOptions.DEFAULT_OPTIONS ); // Construct face detector with given options FaceDetector faceDetector = FaceDetection.getClient(options); // Construct image labeler with local AutoML model LocalModel localModel = new LocalModel.Builder() .setAssetManifestFilePath("automl/manifest.json") .build(); ImageLabeler autoMLImageLabeler = ImageLabeling.getClient( new CustomImageLabelerOptions.Builder(localModel) .setConfidenceThreshold(0.3F).build());
изменения, специфичные для API
Сканирование штрихкодов
Для API сканирования штрих-кодов теперь существует два способа предоставления моделей:
- Использование сервисов Google Play, также известных как «тонкий» (рекомендуется) , уменьшает размер приложения, и модель используется несколькими приложениями. Однако разработчикам необходимо убедиться, что модель загружена перед первым использованием.
- При использовании APK-файла вашего приложения, также известного как «встроенный файл» , размер приложения увеличивается, но модель становится сразу же пригодной для использования.
Две реализации немного отличаются друг от друга: «комплектная» версия имеет ряд улучшений по сравнению с «упрощенной» версией. Подробную информацию об этих различиях можно найти в руководстве по API сканирования штрих-кодов .
Распознавание лиц
Для API распознавания лиц модели могут быть предоставлены двумя способами:
- Использование сервисов Google Play, также известных как «тонкий» (рекомендуется) , уменьшает размер приложения, и модель используется несколькими приложениями. Однако разработчикам необходимо убедиться, что модель загружена перед первым использованием.
- При использовании APK-файла вашего приложения, также известного как «встроенный файл» , размер загружаемого приложения увеличивается, но это означает, что модель сразу же готова к использованию.
Поведение реализаций одинаково.
Перевод
- Теперь
TranslateLanguageиспользует читаемые имена для своих констант (например,ENGLISH) вместо языковых тегов (EN). Кроме того, теперь они имеют@StringDefвместо@IntDef, а значение константы соответствует языковому тегу BCP 47 .
Автоматическая разметка изображений AutoML (устарело)
Загрузка пользовательских моделей для разметки изображений с помощью AutoML устарела и будет отключена 15 июня 2027 года. Вам следует использовать Cloud Storage для размещения моделей и добавить в ваше приложение логику загрузки моделей. Подробности см. в руководстве по миграции Firebase ML в Cloud Storage .
Обнаружение и отслеживание объектов
Если ваше приложение использует обнаружение объектов с грубой классификацией, имейте в виду, что в новом SDK изменился способ возврата категории классификации для обнаруженных объектов.
Категория классификации возвращается в виде экземпляра класса DetectedObject.Label , а не целого числа. Все возможные категории для грубого классификатора включены в класс PredefinedCategory .
Вот пример старого и нового кода на Kotlin:
Старый
if (object.classificationCategory == FirebaseVisionObject.CATEGORY_FOOD) { ... }
Новый
if (!object.labels.isEmpty() && object.labels[0].text == PredefinedCategory.FOOD) { ... } // or if (!object.labels.isEmpty() && object.labels[0].index == PredefinedCategory.FOOD_INDEX) { ... }
Вот пример старого и нового кода на Java:
Старый
if (object.getClassificationCategory() == FirebaseVisionObject.CATEGORY_FOOD) { ... }
Новый
if (!object.getLabels().isEmpty() && object.getLabels().get(0).getText().equals(PredefinedCategory.FOOD)) { ... } // or if (!object.getLabels().isEmpty() && object.getLabels().get(0).getIndex() == PredefinedCategory.FOOD_INDEX) { ... }
Категория «неизвестно» удалена. Если уверенность в классификации объекта низка, мы просто не возвращаем никакой метки.
Удалите зависимости Firebase.
После миграции удалите зависимости Firebase. Выполните следующие шаги:
- Удалите файл конфигурации Firebase, удалив файл конфигурации
google-services.jsonв каталоге модуля (на уровне приложения) вашего приложения. - Замените плагин Google Services Gradle в файле Gradle вашего модуля (на уровне приложения) (обычно
app/build.gradle.kts) плагином Strict Version Matcher:
До
plugins { id("com.android.application") id("com.google.gms.google-services") } android { // … }
После
plugins { id("com.android.application") id("com.google.android.gms.strict-version-matcher-plugin") } android { // … }
- Замените путь к классам плагина Google Services Gradle в корневом файле Gradle (
build.gradle.kts) на путь к классам плагина Strict Version Matcher:
До
buildscript { dependencies { // ... classpath("com.google.gms:google-services:4.3.3") } }
После
buildscript { dependencies { // ... classpath("com.google.android.gms:strict-version-matcher-plugin:1.2.1") } }
Удалите приложение Firebase в консоли Firebase в соответствии с инструкциями на сайте поддержки Firebase.
Получение помощи
Если у вас возникнут какие-либо проблемы, пожалуйста, посетите нашу страницу «Сообщество» , где мы описываем доступные каналы связи с нами.