В этом руководстве объясняется, как перейти с ML Kit для Firebase для Android.
Обновите импорт Gradle
Для каждого API ML Kit требуется только одна зависимость. Указывать распространенные библиотеки, такие как firebase-ml-vision или firebase-ml-natural-language, не нужно. ML Kit использует пространство имен com.google.android.gms для библиотек, которые зависят от сервисов Google Play.
Vision API
Встроенные модели поставляются как часть приложения. Необходимо скачать модели Thin. Некоторые API доступны как в виде пакета, так и в виде тонкого клиента, а другие – только в одном из этих вариантов.
| API | Пакетный | Тонкий |
|---|---|---|
| Распознавание текста | x (бета-версия) | x |
| Распознавание лица | x | x |
| Сканирование штрихкодов | x | x |
| Маркировка изображений | x | x |
| Обнаружение и отслеживание объектов | 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.2 |
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. |
Natural Language API
Встроенные модели поставляются как часть приложения. Необходимо скачать модели Thin:
| API | Пакетный | Тонкий |
|---|---|---|
| Идентификатор языка | x | x |
| Быстрый ответ | x | 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и т. д. Вызовы сервиса FirebasegetInstance()заменяются вызовами метода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()в Vision API переименованы вprocess(). - В Natural Language 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
Сканирование штрихкодов
Для Barcode Scanning API теперь есть два способа доставки моделей:
- Через сервисы Google Play, также известные как "тонкие" (рекомендуется). Это уменьшает размер приложения, а модель используется совместно с другими приложениями. Однако разработчикам необходимо убедиться, что модель загружена перед ее первым использованием.
- Вместе с APK-файлом приложения. Это увеличивает размер приложения, но позволяет сразу использовать модель.
Эти две реализации немного отличаются, причем "пакетная" версия имеет ряд улучшений по сравнению с "тонкой" версией. Подробную информацию об этих различиях можно найти в руководстве по Barcode Scanning API.
Распознавание лиц
Для API распознавания лиц модели могут быть предоставлены двумя способами:
- Через сервисы Google Play, также известные как "тонкие" (рекомендуется). Это уменьшает размер приложения, а модель используется совместно с другими приложениями. Однако разработчикам необходимо убедиться, что модель загружена перед ее первым использованием.
- Вместе с APK-файлом приложения. В этом случае размер скачиваемого файла увеличится, но модель будет готова к использованию сразу после установки.
Оба варианта работают одинаково.
Translation
- В
TranslateLanguageтеперь используются понятные названия констант (например,ENGLISH) вместо языковых тегов (EN). Кроме того, теперь они имеют тип@StringDef, а не@IntDef, а значение константы – это соответствующий языковой тег BCP 47.
AutoML Image Labeling (поддержка прекращена)
Скачивание пользовательских моделей для маркировки изображений с помощью 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.
Если вам нужна помощь
Если у вас возникнут проблемы, посетите страницу сообщества, где перечислены доступные каналы связи с нами.