Обновить импорт 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 были переименованы вprocessprocess()
. - 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.
Получение помощи
Если у вас возникнут какие-либо проблемы, посетите нашу страницу сообщества , где мы обозначаем доступные каналы для связи с нами.