Обновление импорта Gradle
Новый SDK требует только одну зависимость для каждого API ML Kit. Вам не нужно указывать распространённые библиотеки, такие как firebase-ml-vision
или firebase-ml-natural-language
. ML Kit использует пространство имён com.google.android.gms
для библиотек, зависящих от сервисов Google Play.
API-интерфейсы Vision
Связанные модели поставляются как часть вашего приложения. Тонкие модели необходимо загрузить. Некоторые API доступны как в связанной, так и в тонкой форме, другие — только в одной из этих форм:
API | В комплекте | Тонкий |
---|---|---|
Распознавание текста | х (бета) | х |
Распознавание лиц | х | х |
Сканирование штрих-кода | х | х |
Маркировка изображений | х | х |
Обнаружение и отслеживание объектов | х | - |
Обновите зависимости для библиотек ML Kit Android в файле Gradle вашего модуля (уровня приложения) (обычно app/build.gradle
) в соответствии со следующими таблицами:
Модели в комплекте
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 com.google.mlkit:linkfirebase:17.0.0 |
API естественного языка
Модели в комплекте поставляются вместе с заявкой. Тонкие модели необходимо загрузить:
API | В комплекте | Тонкий |
---|---|---|
Идентификатор языка | х | х |
Умный ответ | х | х (бета) |
Обновите зависимости для библиотек ML Kit Android в файле Gradle вашего модуля (уровня приложения) (обычно app/build.gradle
) в соответствии со следующими таблицами:
Модели в комплекте
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.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
.
Обновить имена методов
Изменения кода минимальны:
- Изменена реализация детектора/сканера/маркировщика/транслятора… Теперь у каждой функции есть своя точка входа. Например: 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()
вызывается, когда эти объекты больше не будут использоваться. Если вы используете их во фрагменте или 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 (также известные как «тонкие») (рекомендуется) — это уменьшает размер приложения и позволяет использовать модель совместно с другими приложениями. Однако разработчикам необходимо убедиться, что модель загружена перед первым использованием.
- С APK вашего приложения, также известным как «связанный» — это увеличивает размер приложения, но означает, что модель готова к использованию немедленно.
Эти две реализации немного отличаются: «комплектная» версия имеет ряд улучшений по сравнению с «тонкой». Подробности этих различий можно найти в руководстве по API сканирования штрихкодов .
Распознавание лиц
Для API распознавания лиц модели могут быть доставлены двумя способами:
- Через сервисы Google Play (также известные как «тонкие») (рекомендуется) — это уменьшает размер приложения и позволяет использовать модель совместно с другими приложениями. Однако разработчикам необходимо убедиться, что модель загружена перед первым использованием.
- С APK вашего приложения, также известным как «связанный» — это увеличивает размер загружаемого приложения, но означает, что модель готова к использованию немедленно.
Поведение реализаций одинаково.
Перевод
TranslateLanguage
теперь использует читаемые имена для своих констант (например,ENGLISH
) вместо языковых тегов (EN
). Они также теперь @StringDef вместо @IntDef, а значением константы является соответствующий языковой тег BCP 47 .Если ваше приложение использует опцию загрузки при бездействии устройства, учтите, что она удалена и больше не может использоваться. Вы по-прежнему можете использовать опцию зарядки устройства. Если вам требуется более сложное поведение, вы можете отложить вызов
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.
Получение помощи
Если у вас возникнут какие-либо проблемы, посетите страницу нашего сообщества , где мы описываем доступные каналы связи с нами.