В этом руководстве рассказывается, как перейти с 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
Встроенные модели поставляются как часть приложения. Тонкие модели нужно скачать. Некоторые 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.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
Чтобы разместить и скачать пользовательские модели, перенесите их в 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 г. Вместо этого разместите модели в облачном хранилище и добавьте в приложение логику для их скачивания. Подробнее о переносе данных из 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в каталоге модуля (на уровне приложения) вашего приложения. - Замените плагин Gradle сервисов Google в файле 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.
Если вам нужна помощь
Если у вас возникнут проблемы, ознакомьтесь с информацией на странице сообщества, где перечислены доступные способы связи с нами.