Обновление импорта Gradle
Новый SDK требует только одну зависимость для каждого API ML Kit. Вам не нужно указывать общие библиотеки, такие как firebase-ml-vision
или firebase-ml-natural-language
. ML Kit использует пространство имен com.google.android.gms
для библиотек, которые зависят от Google Play Services.
API-интерфейсы Vision
Связанные модели поставляются как часть вашего приложения. Тонкие модели должны быть загружены. Некоторые API доступны как в связанной, так и в тонкой форме, другие только в одной или другой форме:
API | В комплекте | Тонкий |
---|---|---|
Распознавание текста | х (бета) | х |
Распознавание лиц | х | х |
Сканирование штрих-кода | х | х |
Маркировка изображений | х | х |
Обнаружение и отслеживание объектов | х | - |
Обновите зависимости для библиотек Android ML Kit в файле Gradle вашего модуля (уровня приложения) (обычно app/build.gradle
) в соответствии со следующими таблицами:
Модели в комплекте
API | Старые Артефакты | Новый Артефакт |
---|---|---|
Сканирование штрих-кода | com.google.firebase:firebase-ml-vision:24.0.1 com.google.firebase:firebase-ml-vision-штрихкод-модель:16.0.1 | com.google.mlkit:сканирование-штрихкода: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:распознавание-лиц: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:обнаружение-объектов:17.0.2 |
Тонкие модели
API | Старые Артефакты | Новый Артефакт |
---|---|---|
Сканирование штрих-кода | com.google.firebase:firebase-ml-vision:24.0.1 | com.google.android.gms:play-services-mlkit-сканирование-штрихкодов:18.3.1 |
Распознавание лиц | com.google.firebase:firebase-ml-vision:24.0.1 | com.google.android.gms:play-services-mlkit-распознавание-лиц:17.1.0 |
Распознавание текста | com.google.firebase:firebase-ml-vision:24.0.1 | com.google.android.gms:play-services-mlkit-распознавание-текста: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 com.google.mlkit:linkfirebase:17.0.0 |
API естественного языка
Связанные модели поставляются как часть вашего приложения. Тонкие модели должны быть загружены:
API | В комплекте | Тонкий |
---|---|---|
Идентификатор языка | х | х |
Умный ответ | х | х (бета) |
Обновите зависимости для библиотек Android ML Kit в файле Gradle вашего модуля (уровня приложения) (обычно app/build.gradle
) в соответствии со следующими таблицами:
Модели в комплекте
API | Старые Артефакты | Новый Артефакт |
---|---|---|
Идентификатор языка | com.google.firebase:firebase-ml-естественный-язык:22.0.0 com.google.firebase:firebase-ml-естественный-язык-идентификатор-языка-модель:20.0.7 | com.google.mlkit:идентификатор-языка:17.0.6 |
Умный ответ | com.google.firebase:firebase-ml-естественный-язык:22.0.0 com.google.firebase:firebase-ml-естественный-язык-умный-ответ-модель:20.0.7 | com.google.mlkit:smart-reply:17.0.4 |
Тонкие модели
API | Старые Артефакты | Новый Артефакт |
---|---|---|
Идентификатор языка | com.google.firebase:firebase-ml-естественный-язык:22.0.0 com.google.firebase:firebase-ml-естественный-язык-идентификатор-языка-модель:20.0.7 | com.google.android.gms:play-services-mlkit-язык-id:17.0.0 |
Умный ответ | com.google.firebase:firebase-ml-естественный-язык:22.0.0 com.google.firebase:firebase-ml-естественный-язык-умный-ответ-модель: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.Сканер штрих-кода |
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.Сканер штрих-кода |
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.CustomRemoteModel |
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
.
Обновить имена методов
Изменения кода минимальны:
- Изменена реализация Detector/scanner/labeler/translator… Теперь у каждой функции есть своя точка входа. Например: BarcodeScanning, TextRecognition, ImageLabeling, Translation… Вызовы службы Firebase
getInstance()
заменены вызовами метода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()
вызывается, когда эти объекты больше не будут использоваться. Если вы используете их во фрагменте или AppCompatActivity, один из простых способов сделать это — вызвать LifecycleOwner.getLifecycle() на фрагменте или AppCompatActivity, а затем вызвать Lifecycle.addObserver -
processImage()
иdetectInImage()
в API Vision были переименованы вprocess()
для обеспечения единообразия. - API естественного языка теперь используют термин «языковой тег» (согласно определению стандарта BCP 47 ) вместо «языкового кода».
- Методы получения в классах xxxOptions были удалены.
- Метод getBitmap() в классе InputImage (заменяющий
FirebaseVisionImage
) больше не поддерживается как часть открытого интерфейса. Пожалуйста, обратитесь кBitmapUtils.java
в примере быстрого запуска ML Kit, чтобы преобразовать растровые изображения из различных входов. - FirebaseVisionImageMetadata был удален, теперь вы можете просто передавать метаданные изображения, такие как ширина, высота, угол поворота и формат, в методы построения InputImages.
Вот несколько примеров старых и новых методов 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 life cycle 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 life cycle 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 Services, также известный как «тонкий» (рекомендуется) — это уменьшает размер приложения, и модель делится между приложениями. Однако разработчикам необходимо убедиться, что модель загружена, прежде чем использовать ее в первый раз.
- С помощью APK вашего приложения, также известного как «связанный» — это увеличивает размер приложения, но означает, что модель готова к использованию немедленно.
Эти две реализации немного отличаются, причем «связанная» версия имеет ряд улучшений по сравнению с «тонкой» версией. Подробности этих различий можно найти в руководстве Barcode Scanning API .
Распознавание лиц
Для API распознавания лиц модели могут быть доставлены двумя способами:
- Через Google Play Services, также известный как «тонкий» (рекомендуется) — это уменьшает размер приложения, и модель делится между приложениями. Однако разработчикам необходимо убедиться, что модель загружена, прежде чем использовать ее в первый раз.
- С помощью APK вашего приложения, также известного как «связанный» — это увеличивает размер загружаемого приложения, но означает, что модель готова к использованию немедленно.
Поведение реализаций одинаково.
Перевод
TranslateLanguage
теперь использует читаемые имена для своих констант (например,ENGLISH
) вместо языковых тегов (EN
). Они также теперь @StringDef вместо @IntDef, а значение константы — соответствующий языковой тег BCP 47 .Если ваше приложение использует опцию условия загрузки «device idle», имейте в виду, что эта опция удалена и больше не может использоваться. Вы по-прежнему можете использовать опцию «device chargeing». Если вам нужно более сложное поведение, вы можете отложить вызов
RemoteModelManager.download
за вашей собственной логикой.
Маркировка изображений AutoML
Если ваше приложение использует опцию условия загрузки «устройство бездействует», имейте в виду, что эта опция удалена и больше не может использоваться. Вы по-прежнему можете использовать опцию «устройство заряжается».
Если вам необходимо более сложное поведение, вы можете отложить вызов RemoteModelManager.download
до завершения своей собственной логики.
Обнаружение и отслеживание объектов
Если ваше приложение использует обнаружение объектов с грубой классификацией, учтите, что новый 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 ML Kit — единственный компонент Firebase, который вы используете.
- Вы используете только API на устройстве.
- Вы не используете модель обслуживания.
Если это так, вы можете удалить зависимости Firebase после миграции. Выполните следующие шаги:
- Удалите файл конфигурации Firebase, удалив файл конфигурации google-services.json в каталоге модуля (уровня приложения) вашего приложения.
- Замените плагин Google Services Gradle в файле Gradle вашего модуля (уровня приложения) (обычно app/build.gradle) на плагин Strict Version Matcher:
До
apply plugin: 'com.android.application' apply plugin: 'com.google.gms.google-services' // Google Services plugin android { // … }
После
apply plugin: 'com.android.application' apply plugin: 'com.google.android.gms.strict-version-matcher-plugin' android { // … }
- Замените classpath плагина Google Services Gradle в файле Gradle вашего проекта (корневого уровня) (build.gradle) на classpath для плагина Strict Version Matcher:
До
buildscript { dependencies { // ... classpath 'com.google.gms:google-services:4.3.3' // Google Services plugin } }
После
buildscript { dependencies { // ... classpath 'com.google.android.gms:strict-version-matcher-plugin:1.2.1' } }
Удалите приложение Firebase в консоли Firebase, следуя инструкциям на сайте поддержки Firebase.
Получение помощи
Если у вас возникнут какие-либо проблемы, посетите страницу нашего сообщества , где мы описываем доступные каналы связи с нами.