Миграция для Android

В этом руководстве объясняется, как перейти с ML Kit for Firebase для Android.

Обновите импорт Gradle.

Для каждого API ML Kit SDK требуется всего одна зависимость. Нет необходимости указывать общие библиотеки, такие как firebase-ml-vision или firebase-ml-natural-language . ML Kit использует пространство имен com.google.android.gms для библиотек, зависящих от сервисов Google Play.

API для обработки изображений

Встроенные модели поставляются как часть вашего приложения. Простые модели необходимо загрузить. Некоторые API доступны как в встроенном, так и в простом виде, другие — только в одном из двух вариантов:

API В комплекте Тонкий
распознавание текста 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 .

API для обработки естественного языка

Входящие в комплект модели поставляются как часть вашего приложения. Тонкие модели необходимо загрузить отдельно:

API В комплекте Тонкий
Идентификатор языка х х
Умный ответ х 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 ... Вызовы метода 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() вызывается, когда эти объекты больше не будут использоваться. Если вы используете их во Fragment или AppCompatActivity , один из способов сделать это — вызвать LifecycleOwner.getLifecycle() для Fragment или AppCompatActivity , а затем вызвать Lifecycle.addObserver .
  • processImage() и detectInImage() в API Vision были переименованы в process() для обеспечения единообразия.
  • В 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

Сканирование штрихкодов

Для API сканирования штрих-кодов теперь существует два способа предоставления моделей:

  • Использование сервисов Google Play, также известных как «тонкий» (рекомендуется) , уменьшает размер приложения, и модель используется несколькими приложениями. Однако разработчикам необходимо убедиться, что модель загружена перед первым использованием.
  • При использовании APK-файла вашего приложения, также известного как «встроенный файл» , размер приложения увеличивается, но модель становится сразу же пригодной для использования.

Две реализации немного отличаются друг от друга: «комплектная» версия имеет ряд улучшений по сравнению с «упрощенной» версией. Подробную информацию об этих различиях можно найти в руководстве по API сканирования штрих-кодов .

Распознавание лиц

Для API распознавания лиц модели могут быть предоставлены двумя способами:

  • Использование сервисов Google Play, также известных как «тонкий» (рекомендуется) , уменьшает размер приложения, и модель используется несколькими приложениями. Однако разработчикам необходимо убедиться, что модель загружена перед первым использованием.
  • При использовании APK-файла вашего приложения, также известного как «встроенный файл» , размер загружаемого приложения увеличивается, но это означает, что модель сразу же готова к использованию.

Поведение реализаций одинаково.

Перевод

  • Теперь TranslateLanguage использует читаемые имена для своих констант (например, ENGLISH ) вместо языковых тегов ( EN ). Кроме того, теперь они имеют @StringDef вместо @IntDef , а значение константы соответствует языковому тегу BCP 47 .

Автоматическая разметка изображений AutoML (устарело)

Загрузка пользовательских моделей для разметки изображений с помощью 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.

Получение помощи

Если у вас возникнут какие-либо проблемы, пожалуйста, посетите нашу страницу «Сообщество» , где мы описываем доступные каналы связи с нами.

,

В этом руководстве объясняется, как перейти с ML Kit for Firebase для Android.

Обновите импорт Gradle.

Для каждого API ML Kit SDK требуется всего одна зависимость. Нет необходимости указывать общие библиотеки, такие как firebase-ml-vision или firebase-ml-natural-language . ML Kit использует пространство имен com.google.android.gms для библиотек, зависящих от сервисов Google Play.

API для обработки изображений

Встроенные модели поставляются как часть вашего приложения. Простые модели необходимо загрузить. Некоторые API доступны как в встроенном, так и в простом виде, другие — только в одном из двух вариантов:

API В комплекте Тонкий
распознавание текста 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 .

API для обработки естественного языка

Входящие в комплект модели поставляются как часть вашего приложения. Тонкие модели необходимо загрузить отдельно:

API В комплекте Тонкий
Идентификатор языка х х
Умный ответ х 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 ... Вызовы метода 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() вызывается, когда эти объекты больше не будут использоваться. Если вы используете их во Fragment или AppCompatActivity , один из способов сделать это — вызвать LifecycleOwner.getLifecycle() для Fragment или AppCompatActivity , а затем вызвать Lifecycle.addObserver .
  • processImage() и detectInImage() в API Vision были переименованы в process() для обеспечения единообразия.
  • В 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

Сканирование штрихкодов

Для API сканирования штрих-кодов теперь существует два способа предоставления моделей:

  • Использование сервисов Google Play, также известных как «тонкий» (рекомендуется) , уменьшает размер приложения, и модель используется несколькими приложениями. Однако разработчикам необходимо убедиться, что модель загружена перед первым использованием.
  • При использовании APK-файла вашего приложения, также известного как «встроенный файл» , размер приложения увеличивается, но модель становится сразу же пригодной для использования.

Две реализации немного отличаются друг от друга: «комплектная» версия имеет ряд улучшений по сравнению с «упрощенной» версией. Подробную информацию об этих различиях можно найти в руководстве по API сканирования штрих-кодов .

Распознавание лиц

Для API распознавания лиц модели могут быть предоставлены двумя способами:

  • Использование сервисов Google Play, также известных как «тонкий» (рекомендуется) , уменьшает размер приложения, и модель используется несколькими приложениями. Однако разработчикам необходимо убедиться, что модель загружена перед первым использованием.
  • При использовании APK-файла вашего приложения, также известного как «встроенный файл» , размер загружаемого приложения увеличивается, но это означает, что модель сразу же готова к использованию.

Поведение реализаций одинаково.

Перевод

  • Теперь TranslateLanguage использует читаемые имена для своих констант (например, ENGLISH ) вместо языковых тегов ( EN ). Кроме того, теперь они имеют @StringDef вместо @IntDef , а значение константы соответствует языковому тегу BCP 47 .

Автоматическая разметка изображений AutoML (устарело)

Загрузка пользовательских моделей для разметки изображений с помощью 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.

Получение помощи

Если у вас возникнут какие-либо проблемы, пожалуйста, посетите нашу страницу «Сообщество» , где мы описываем доступные каналы связи с нами.

,

В этом руководстве объясняется, как перейти с ML Kit for Firebase для Android.

Обновите импорт Gradle.

Для каждого API ML Kit SDK требуется всего одна зависимость. Нет необходимости указывать общие библиотеки, такие как firebase-ml-vision или firebase-ml-natural-language . ML Kit использует пространство имен com.google.android.gms для библиотек, зависящих от сервисов Google Play.

API для обработки изображений

Встроенные модели поставляются как часть вашего приложения. Простые модели необходимо загрузить. Некоторые API доступны как в встроенном, так и в простом виде, другие — только в одном из двух вариантов:

API В комплекте Тонкий
распознавание текста 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 .

API для обработки естественного языка

Входящие в комплект модели поставляются как часть вашего приложения. Тонкие модели необходимо загрузить отдельно:

API В комплекте Тонкий
Идентификатор языка х х
Умный ответ х 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 ... Вызовы метода 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() вызывается, когда эти объекты больше не будут использоваться. Если вы используете их во Fragment или AppCompatActivity , один из способов сделать это — вызвать LifecycleOwner.getLifecycle() для Fragment или AppCompatActivity , а затем вызвать Lifecycle.addObserver .
  • processImage() и detectInImage() в API Vision были переименованы в process() для обеспечения единообразия.
  • В 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

Сканирование штрихкодов

Для API сканирования штрих-кодов теперь существует два способа предоставления моделей:

  • Использование сервисов Google Play, также известных как «тонкий» (рекомендуется) , уменьшает размер приложения, и модель используется несколькими приложениями. Однако разработчикам необходимо убедиться, что модель загружена перед первым использованием.
  • При использовании APK-файла вашего приложения, также известного как «встроенный файл» , размер приложения увеличивается, но модель становится сразу же пригодной для использования.

Две реализации немного отличаются друг от друга: «комплектная» версия имеет ряд улучшений по сравнению с «упрощенной» версией. Подробную информацию об этих различиях можно найти в руководстве по API сканирования штрих-кодов .

Распознавание лиц

Для API распознавания лиц модели могут быть предоставлены двумя способами:

  • Использование сервисов Google Play, также известных как «тонкий» (рекомендуется) , уменьшает размер приложения, и модель используется несколькими приложениями. Однако разработчикам необходимо убедиться, что модель загружена перед первым использованием.
  • При использовании APK-файла вашего приложения, также известного как «встроенный файл» , размер загружаемого приложения увеличивается, но это означает, что модель сразу же готова к использованию.

Поведение реализаций одинаково.

Перевод

  • Теперь TranslateLanguage использует читаемые имена для своих констант (например, ENGLISH ) вместо языковых тегов ( EN ). Кроме того, теперь они имеют @StringDef вместо @IntDef , а значение константы соответствует языковому тегу BCP 47 .

Автоматическая разметка изображений AutoML (устарело)

Загрузка пользовательских моделей для разметки изображений с помощью 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 {
  // …
}
  • Replace the Google Services Gradle plugin classpath in your project (root-level) Gradle file ( build.gradle.kts ) with the one for the Strict Version Matcher plugin:

До

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")
  }
}

Delete your Firebase app at the Firebase console according to the instructions on the Firebase support site.

Получение помощи

If you run into any issues, please check out our Community page where we outline the channels available for getting in touch with us.

,

This guide explains how to migrate away from ML Kit for Firebase for Android.

Update gradle imports

The ML Kit SDK only requires one dependency for each ML Kit API. You don't need to specify common libraries like firebase-ml-vision or firebase-ml-natural-language . ML Kit uses the com.google.android.gms namespace for libraries that depend on Google Play services.

Vision APIs

Bundled models are delivered as part of your application. Thin models must be downloaded. Some APIs are available in both bundled and thin form, others only in one form or the other:

API В комплекте Тонкий
распознавание текста x (beta) х
Обнаружение лиц х х
сканирование штрих-кода х х
Разметка изображений х х
Object detection and tracking х -

Update the dependencies for the ML Kit Android libraries in your module (app- level) Gradle file (usually app/build.gradle.kts ) according to the following tables:

Bundled models

API Old Artifacts New Artifact
сканирование штрих-кода 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
Face contour 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

Thin models

API Old Artifacts New Artifact
сканирование штрих-кода 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 Old Artifact New Artifact
AutoML without downloading 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 with downloading 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

To host and download custom models, move your models to Cloud Storage and add download logic in your app to load them using LocalModel . For details, see the Firebase ML to Cloud Storage migration guide .

Natural Language APIs

Bundled models are delivered as part of your application. Thin models must be downloaded:

API В комплекте Тонкий
Идентификатор языка х х
Умный ответ х x (beta)

Update the dependencies for the ML Kit Android libraries in your module (app- level) Gradle file (usually app/build.gradle.kts ) according to the following tables:

Bundled models

API Old Artifacts New Artifact
Идентификатор языка 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

Thin models

API Old Artifacts New Artifact
Идентификатор языка 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

Update class names

If your class appears in this table, make the indicated change:

Старый класс Новый класс
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

Requires manual download. Firebase-hosted remote models are deprecated. For details, see the Firebase ML to Cloud Storage migration guide .
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

For other classes, follow these rules:

  • Remove the FirebaseVision prefix from the class name.
  • Remove other prefixes that start with Firebase prefix from the class name.

Also, in package names replace the com.google.firebase.ml prefix with com.google.mlkit .

Update method names

There are minimal code changes:

  • Detector/scanner/labeler/translator... instantiation has been changed. Each feature now has its own entry point. For example: BarcodeScanning , TextRecognition , ImageLabeling , Translation ... Calls to Firebase service getInstance() are replaced by calls to the feature entry point's getClient() method.
  • Default instantiation for TextRecognizer has been removed, since we introduced additional libraries for recognizing other scripts like Chinese and Korean. To use default options with the Latin script text recognition model, declare a dependency on com.google.android.gms:play-services-mlkit-text-recognition and use TextRecognition.getClient(TextRecognizerOptions.DEFAULT_OPTIONS) .
  • Default instantiation for ImageLabeler and ObjectDetector has been removed, since we introduced custom model support for these two features. For example, to use default options with base model in ImageLabeling , declare a dependency on com.google.mlkit:image-labeling and use ImageLabeling.getClient(ImageLabelerOptions.DEFAULT_OPTIONS) in Java.
  • All handles (detector/scanner/labeler/translator...) are closeable. Ensure that the close() method is called when those objects will no longer be used. If you are using them in a Fragment or AppCompatActivity , one way to do that is call LifecycleOwner.getLifecycle() on the Fragment or AppCompatActivity , and then call Lifecycle.addObserver .
  • processImage() and detectInImage() in the Vision APIs have been renamed to process() for consistency.
  • The Natural Language APIs now use the term "language tag" (as defined by the BCP 47 standard ) instead of "language code".
  • Getter methods in xxxOptions classes have been removed.
  • getBitmap() method in the InputImage class (replacing FirebaseVisionImage ) is not supported anymore as part of the public interface. Refer to BitmapUtils.java in ML Kit quickstart sample to get bitmap converted from various inputs.
  • FirebaseVisionImageMetadata has been removed, you can just pass image metadata such as width , height , rotationDegrees , format into the InputImage 's construction methods.

Here are some examples of old and new Kotlin methods:

Старый

// 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())
  

Here are some examples of old and new Java methods:

Старый

// 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-specific changes

Сканирование штрихкодов

For the Barcode Scanning API, there are now two ways the models can be delivered:

  • Through Google Play Services aka "thin" (recommended) - this reduces the app size and the model is shared between applications. However, developers will need to ensure that the model is downloaded before using it for the first time.
  • With your app's APK aka "bundled" - this increases the app size but it means the model is immediately usable.

The two implementations are slightly different, with the "bundled" version having a number of improvements over the "thin" version. Details on these differences can be found in the Barcode Scanning API guidelines.

Распознавание лиц

For the Face Detection API, there are two ways the models can be delivered:

  • Through Google Play Services aka "thin" (recommended) - this reduces the app size and the model is shared between applications. However, developers will need to ensure that the model is downloaded before using it for the first time.
  • With your app's APK aka "bundled" - this increases the app download size but it means the model is immediately usable.

The behavior of the implementations are the same.

Перевод

  • TranslateLanguage now uses readable names for its constants (eg ENGLISH ) instead of language tags ( EN ). They are also now @StringDef , instead of @IntDef , and the value of the constant is the matching BCP 47 language tag .

AutoML Image Labeling (deprecated)

Downloading custom models for image labeling using AutoML is deprecated and will be turned down on June 15, 2027. You should use Cloud Storage to host models and add download logic to your app to download the models instead. For details, see the Firebase ML to Cloud Storage migration guide .

Object Detection and Tracking

If your app uses object detection with coarse classification, be aware that the new SDK has changed the way it returns the classification category for detected objects.

The classification category is returned as an instance of DetectedObject.Label instead of an integer. All possible categories for the coarse classifier are included in the PredefinedCategory class.

Here is an example of the old and new Kotlin code:

Старый

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) {
    ...
}

Here is an example of the old and new Java code:

Старый

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) {
    ...
}

The "unknown" category has been removed. When the confidence of an object's classification is low, we just don't return any label.

Remove Firebase dependencies

Remove the Firebase dependencies after the migration. Follow these steps:

  • Remove the Firebase configuration file by deleting the google-services.json config file at the module (app-level) directory of your app.
  • Replace the Google Services Gradle plugin in your module (app-level) Gradle file (usually app/build.gradle.kts ) with the Strict Version Matcher plugin:

До

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 {
  // …
}
  • Replace the Google Services Gradle plugin classpath in your project (root-level) Gradle file ( build.gradle.kts ) with the one for the Strict Version Matcher plugin:

До

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")
  }
}

Delete your Firebase app at the Firebase console according to the instructions on the Firebase support site.

Получение помощи

If you run into any issues, please check out our Community page where we outline the channels available for getting in touch with us.