Обновить импорт Gradle
Для нового SDK требуется только одна зависимость для каждого API ML Kit. Вам не нужно указывать общие библиотеки, такие как firebase-ml-vision
или firebase-ml-natural-language
. ML Kit использует пространство имен com.google.android.gms
для библиотек, которые зависят от сервисов Google Play.
API-интерфейсы визуализации
Модели в комплекте поставляются как часть вашего приложения. Тонкие модели необходимо скачать. Некоторые 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-barcode-model: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:маркировка изображения: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-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 |
АвтоMLVision Edge
API | Старый Артефакт | Новый Артефакт |
---|---|---|
АвтоМЛ без скачивания | 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.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-natural-language-language-id-model:20.0.7 | com.google.mlkit:идентификатор языка:17.0.6 |
Умный ответ | com.google.firebase:firebase-ml-естественный-язык: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-естественный-язык: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-естественный-язык: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
.
Обновить имена методов
Изменения кода минимальны:
- Детектор/сканер/маркировщик/переводчик… экземпляр изменен. У каждой функции теперь есть своя точка входа. Например: сканирование штрих-кода, распознавание текста, маркировка изображений, перевод…. Вызовы службы Firebase
getInstance()
заменяются вызовами методаgetClient()
точки входа функции. - Создание экземпляра TextRecouncer по умолчанию было удалено, поскольку мы ввели дополнительные библиотеки для распознавания других сценариев, таких как китайский и корейский. Чтобы использовать параметры по умолчанию с моделью распознавания текста на латинице, объявите зависимость от
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()
в Vision API были переименованыprocess()
. - API естественного языка теперь используют термин «языковой тег» (согласно определению стандарта BCP 47 ) вместо «языкового кода».
- Методы получения в классах xxxOptions были удалены.
- Метод getBitmap() в классе InputImage (заменяющий
FirebaseVisionImage
) больше не поддерживается как часть общедоступного интерфейса. Пожалуйста, обратитесь кBitmapUtils.java
в образце быстрого запуска ML Kit , чтобы преобразовать растровое изображение из различных входных данных. - FirebaseVisionImageMetadata были удалены, вы можете просто передать метаданные изображения, такие как ширина, высота, RotationDegrees, формат, в методы построения 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 { // … }
- Замените путь к классам плагина Google Services Gradle в файле Gradle вашего проекта (корневого уровня) (build.gradle) на путь к плагину 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.
Получение помощи
Если у вас возникнут какие-либо проблемы, посетите нашу страницу сообщества , где мы обозначаем доступные каналы для связи с нами.