Перенос данных на Android

В этом руководстве рассказывается, как перейти с 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
Распознавание лицаxx
Сканирование штрихкодовxx
Маркировка изображенийxx
Обнаружение и отслеживание объектов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ПакетныйТонкий
Идентификатор языкаxx
Быстрый ответxX (бета-версия)

Обновите зависимости для библиотек 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 и т. д. Вызовы сервиса Firebase getInstance() заменяются вызовами метода 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.

Если вам нужна помощь

Если у вас возникнут проблемы, ознакомьтесь с информацией на странице сообщества, где перечислены доступные способы связи с нами.