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

Обновить импорт Gradle

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

API-интерфейсы визуализации

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

API В комплекте Тонкий
Распознавание текста х (бета) Икс
Распознавание лиц Икс Икс
Сканирование штрих-кода Икс Икс
Маркировка изображений Икс Икс
Обнаружение и отслеживание объектов Икс -

Обновите зависимости для библиотек Android ML Kit в файле Gradle вашего модуля (на уровне приложения) (обычно app/build.gradle ) в соответствии со следующими таблицами:

Комплектные модели

API Старые Артефакты Новый Артефакт
Сканирование штрих-кода com.google.firebase:firebase-ml-vision:24.0.1
com.google.firebase:firebase-ml-vision-barcode-model:16.0.1
com.google.mlkit:сканирование штрих-кода:17.2.0
Контур лица com.google.firebase:firebase-ml-vision:24.0.1
com.google.firebase:firebase-ml-vision-face-model:19.0.0
com.google.mlkit:распознавание лиц:16.1.6
Маркировка изображений com.google.firebase:firebase-ml-vision:24.0.1
com.google.firebase:firebase-ml-vision-image-label-model:19.0.0
com.google.mlkit:маркировка изображений:17.0.8
Обнаружение объектов com.google.firebase:firebase-ml-vision:24.0.1
com.google.firebase:firebase-ml-vision-object-detection-model:19.0.3
com.google.mlkit:обнаружение объекта:17.0.1

Тонкие модели

API Старые Артефакты Новый Артефакт
Сканирование штрих-кода com.google.firebase:firebase-ml-vision:24.0.1 com.google.android.gms:play-services-mlkit-barcode-scanning:18.3.0
Распознавание лиц 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.0

АвтоMLVision Edge

API Старый Артефакт Новый Артефакт
АвтоМЛ без скачивания com.google.firebase:firebase-ml-vision:24.0.1
com.google.firebase:firebase-ml-vision-automl:18.0.3
com.google.mlkit:image-labeling-custom:17.0.2
АвтоМЛ с загрузкой 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.2
com.google.mlkit:linkfirebase:17.0.0

API естественного языка

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

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

Обновите зависимости для библиотек Android ML Kit в файле Gradle вашего модуля (на уровне приложения) (обычно app/build.gradle ) в соответствии со следующими таблицами:

Комплектные модели

API Старые Артефакты Новый Артефакт
Идентификатор языка com.google.firebase:firebase-ml-естественный-язык:22.0.0
com.google.firebase:firebase-ml-natural-language-language-id-model:20.0.7
com.google.mlkit:идентификатор языка:17.0.5
Умный ответ com.google.firebase:firebase-ml-естественный-язык:22.0.0
com.google.firebase:firebase-ml-natural-language-smart-reply-model:20.0.7
com.google.mlkit:smart-reply:17.0.3

Тонкие модели

API Старые Артефакты Новый Артефакт
Идентификатор языка com.google.firebase:firebase-ml-естественный-язык:22.0.0
com.google.firebase:firebase-ml-natural-language-language-id-model:20.0.7
com.google.android.gms:play-services-mlkit-language-id:17.0.0
Умный ответ com.google.firebase:firebase-ml-естественный-язык:22.0.0
com.google.firebase:firebase-ml-natural-language-smart-reply-model:20.0.7
com.google.android.gms:play-services-mlkit-smart-reply:16.0.0-beta1

Обновить имена классов

Если ваш класс присутствует в этой таблице, внесите указанное изменение:

Старый класс Новый класс
com.google.firebase.ml.common.FirebaseMLException com.google.mlkit.common.MlKitException
com.google.firebase.ml.vision.common.FirebaseVisionImage com.google.mlkit.vision.common.InputImage
com.google.firebase.ml.vision.barcode.FirebaseVisionBarcodeDetector com.google.mlkit.vision.barcode.BarcodeScanner
com.google.firebase.ml.vision.labeler.FirebaseVisionImageLabel com.google.mlkit.vision.label.ImageLabeler
com.google.firebase.ml.vision.barcode.FirebaseVisionBarcodeDetector com.google.mlkit.vision.barcode.BarcodeScanner
com.google.firebase.ml.vision.automl.FirebaseAutoMLLocalModel com.google.mlkit.common.model.LocalModel
com.google.firebase.ml.vision.automl.FirebaseAutoMLRemoteModel com.google.mlkit.common.model.CustomRemoteModel
com.google.firebase.ml.vision.label.FirebaseVisionOnDeviceImageLabelerOptions com.google.mlkit.vision.label.defaults.ImageLabelerOptions
com.google.firebase.ml.vision.label.FirebaseVisionImageLabel com.google.mlkit.vision.label.ImageLabel
com.google.firebase.ml.vision.label.FirebaseVisionOnDeviceAutoMLImageLabelerOptions com.google.mlkit.vision.label.custom.CustomImageLabelerOptions
com.google.firebase.ml.vision.objects.FirebaseVisionObjectDetectorOptions com.google.mlkit.vision.objects.defaults.ObjectDetectorOptions

Для других классов следуйте этим правилам:

  • Удалите префикс FirebaseVision из имени класса.
  • Удалите из имени класса другие префиксы, начинающиеся с префикса Firebase .

Кроме того, в именах пакетов замените префикс com.google.firebase.ml на com.google.mlkit .

Обновить имена методов

Изменения кода минимальны:

  • Детектор/сканер/маркировщик/переводчик… экземпляр изменен. У каждой функции теперь есть своя точка входа. Например: сканирование штрих-кода, распознавание текста, маркировка изображений, перевод…. Вызовы службы Firebase getInstance() заменяются вызовами метода getClient() точки входа функции.
  • Создание экземпляра TextRecouncer по умолчанию было удалено, поскольку мы ввели дополнительные библиотеки для распознавания других сценариев, таких как китайский и корейский. Чтобы использовать параметры по умолчанию с моделью распознавания текста на латинице, объявите зависимость от com.google.android.gms:play-services-mlkit-text-recognition и используйте TextRecognition.getClient(TextRecognizerOptions.DEFAULT_OPTIONS) .
  • Создание экземпляров по умолчанию для ImageLabeler и ObjectDetector было удалено, поскольку мы представили поддержку пользовательских моделей для этих двух функций. Например, чтобы использовать параметры по умолчанию с базовой моделью в ImageLabeling, объявите зависимость от com.google.mlkit:image-labeling и используйте ImageLabeling.getClient(ImageLabelerOptions.DEFAULT_OPTIONS) в Java.
  • Все ручки (детектор/сканер/маркировщик/переводчик…) закрываются. Убедитесь, что метод close() вызывается, когда эти объекты больше не будут использоваться. Если вы используете их во Fragment или AppCompatActivity, один из простых способов сделать это — вызвать LifecycleOwner.getLifecycle() для Fragment или AppCompatActivity, а затем вызвать Lifecycle.addObserver.
  • В целях единообразия processImage() detectInImage() в API Vision были переименованы вprocess process() .
  • API естественного языка теперь используют термин «языковой тег» (согласно определению стандарта BCP 47 ) вместо «языкового кода».
  • Методы получения в классах xxxOptions были удалены.
  • Метод getBitmap() в классе InputImage (заменяющий FirebaseVisionImage ) больше не поддерживается как часть общедоступного интерфейса. Пожалуйста, обратитесь к BitmapUtils.java в образце быстрого запуска ML Kit , чтобы преобразовать растровое изображение из различных входных данных.
  • FirebaseVisionImageMetadata были удалены, вы можете просто передать метаданные изображения, такие как ширина, высота, RotationDegrees, формат, в методы построения InputImages.

Вот несколько примеров старых и новых методов Kotlin:

Старый

// Construct image labeler with base model and default options.
val imageLabeler = FirebaseVision.getInstance().onDeviceImageLabeler

// Construct object detector with base model and default options.
val objectDetector = FirebaseVision.getInstance().onDeviceObjectDetector

// Construct face detector with given options
val faceDetector = FirebaseVision.getInstance().getVisionFaceDetector(options)

// Construct image labeler with local AutoML model
val localModel =
    FirebaseAutoMLLocalModel.Builder()
      .setAssetFilePath("automl/manifest.json")
      .build()
val autoMLImageLabeler =
    FirebaseVision.getInstance()
      .getOnDeviceAutoMLImageLabeler(
          FirebaseVisionOnDeviceAutoMLImageLabelerOptions.Builder(localModel)
            .setConfidenceThreshold(0.3F)
            .build()
    )

Новый

// Construct image labeler with base model and default options.
val imageLabeler = ImageLabeling.getClient(ImageLabelerOptions.DEFAULT_OPTIONS)
// Optional: add life cycle observer
lifecycle.addObserver(imageLabeler)

// Construct object detector with base model and default options.
val objectDetector = ObjectDetection.getClient(ObjectDetectorOptions.DEFAULT_OPTIONS)

// Construct face detector with given options
val faceDetector = FaceDetection.getClient(options)

// Construct image labeler with local AutoML model
val localModel =
  LocalModel.Builder()
    .setAssetManifestFilePath("automl/manifest.json")
    .build()
val autoMLImageLabeler =
  ImageLabeling.getClient(
    CustomImageLabelerOptions.Builder(localModel)
    .setConfidenceThreshold(0.3F).build())
  

Вот несколько примеров старых и новых методов Java:

Старый

// Construct image labeler with base model and default options.
FirebaseVisionImageLabeler imagelLabeler =
     FirebaseVision.getInstance().getOnDeviceImageLabeler();

// Construct object detector with base model and default options.
FirebaseVisionObjectDetector objectDetector =
     FirebaseVision.getInstance().getOnDeviceObjectDetector();

// Construct face detector with given options
FirebaseVisionFaceDetector faceDetector =
     FirebaseVision.getInstance().getVisionFaceDetector(options);

// Construct image labeler with local AutoML model
FirebaseAutoMLLocalModel localModel =
    new FirebaseAutoMLLocalModel.Builder()
      .setAssetFilePath("automl/manifest.json")
      .build();
FirebaseVisionImageLabeler autoMLImageLabeler =
    FirebaseVision.getInstance()
      .getOnDeviceAutoMLImageLabeler(
          FirebaseVisionOnDeviceAutoMLImageLabelerOptions.Builder(localModel)
            .setConfidenceThreshold(0.3F)
            .build());

Новый

// Construct image labeler with base model and default options.
ImageLabeler imageLabeler = ImageLabeling.getClient(ImageLabelerOptions.DEFAULT_OPTIONS);
// Optional: add life cycle observer
getLifecycle().addObserver(imageLabeler);

// Construct object detector with base model and default options.
ObjectDetector objectDetector = ObjectDetection.getClient(ObjectDetectorOptions.DEFAULT_OPTIONS);

// Construct face detector with given options
FaceDetector faceDetector = FaceDetection.getClient(options);

// Construct image labeler with local AutoML model
LocalModel localModel =
  new LocalModel.Builder()
    .setAssetManifestFilePath("automl/manifest.json")
    .build();
ImageLabeler autoMLImageLabeler =
  ImageLabeling.getClient(
    new CustomImageLabelerOptions.Builder(localModel)
    .setConfidenceThreshold(0.3F).build());
  

Изменения, специфичные для API

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

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

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

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

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

Для API распознавания лиц существует два способа доставки моделей:

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

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

Перевод

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

  • Если ваше приложение использует параметр условия загрузки «устройство в режиме ожидания», имейте в виду, что этот параметр был удален и больше не может использоваться. Вы по-прежнему можете использовать опцию «зарядка устройства». Если вам нужно более сложное поведение, вы можете отложить вызов RemoteModelManager.download , следуя своей собственной логике.

Маркировка изображений AutoML

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

Если вам нужно более сложное поведение, вы можете отложить вызов RemoteModelManager.download , следуя своей собственной логике.

Обнаружение и отслеживание объектов

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

Категория классификации возвращается как экземпляр DetectedObject.Label вместо целого числа. Все возможные категории для грубого классификатора включены в класс PredefinedCategory .

Вот пример старого и нового кода Kotlin:

Старый

if (object.classificationCategory == FirebaseVisionObject.CATEGORY_FOOD) {
    ...
}

Новый

if (!object.labels.isEmpty() && object.labels[0].text == PredefinedCategory.FOOD) {
    ...
}
// or
if (!object.labels.isEmpty() && object.labels[0].index == PredefinedCategory.FOOD_INDEX) {
    ...
}

Вот пример старого и нового кода Java:

Старый

if (object.getClassificationCategory() == FirebaseVisionObject.CATEGORY_FOOD) {
    ...
}

Новый

if (!object.getLabels().isEmpty()
    && object.getLabels().get(0).getText().equals(PredefinedCategory.FOOD)) {
    ...
}
// or
if (!object.getLabels().isEmpty()
    && object.getLabels().get(0).getIndex() == PredefinedCategory.FOOD_INDEX) {
    ...
}

Категория «неизвестно» удалена. Когда достоверность классификации объекта низкая, мы просто не возвращаем метку.

Удалить зависимости Firebase (необязательно)

Этот шаг применим только при соблюдении следующих условий:

  • Firebase ML Kit — единственный компонент Firebase, который вы используете.
  • Вы используете только API на устройстве.
  • Вы не используете модельное обслуживание.

В этом случае вы можете удалить зависимости Firebase после миграции. Следуй этим шагам:

  • Удалите файл конфигурации Firebase, удалив файл конфигурации google-services.json в каталоге модуля (на уровне приложения) вашего приложения.
  • Замените плагин Google Services Gradle в файле Gradle вашего модуля (на уровне приложения) (обычно app/build.gradle) на плагин Strict Version Matcher:

До

apply plugin: 'com.android.application'
apply plugin: 'com.google.gms.google-services'  // Google Services plugin

android {
  // …
}

После

apply plugin: 'com.android.application'
apply plugin: 'com.google.android.gms.strict-version-matcher-plugin'

android {
  // …
}
  • Замените путь к классам плагина Google Services Gradle в файле Gradle вашего проекта (корневого уровня) (build.gradle) на путь к плагину Strict Version Matcher:

До

buildscript {
  dependencies {
    // ...

    classpath 'com.google.gms:google-services:4.3.3'  // Google Services plugin
  }
}

После

buildscript {
  dependencies {
    // ...

    classpath 'com.google.android.gms:strict-version-matcher-plugin:1.2.1'
  }
}

Удалите приложение Firebase на консоли Firebase в соответствии с инструкциями на сайте поддержки Firebase.

Получать помощь

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