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

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

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

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

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

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

Обновите зависимости для библиотек ML Kit Android в файле 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: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
com.google.mlkit:linkfirebase:17.0.0

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

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

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

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

Модели в комплекте

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.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 .

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

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

  • Изменена процедура создания экземпляров детектора/сканера/методиста/переводчика… Теперь каждая функция имеет свою собственную точку входа. Например: сканирование штрихкодов, распознавание текста, маркировка изображений, перевод… Вызовы метода 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() вызывается, когда эти объекты больше не будут использоваться. Если вы используете их во фрагменте или AppCompatActivity, один из простых способов сделать это — вызвать LifecycleOwner.getLifecycle() для фрагмента или AppCompatActivity, а затем вызвать Lifecycle.addObserver.
  • processImage() и detectInImage() в API Vision были переименованы в process() для обеспечения единообразия.
  • В API обработки естественного языка теперь используется термин «языковой тег» (как определено в стандарте BCP 47 ) вместо «языковой код».
  • Методы-геттеры в классах xxxOptions были удалены.
  • Метод getBitmap() в классе InputImage (заменяющий FirebaseVisionImage ) больше не поддерживается как часть публичного интерфейса. Для преобразования растровых изображений из различных входных данных обратитесь к BitmapUtils.java в примере быстрого запуска ML Kit .
  • Параметр FirebaseVisionImageMetadata удален, теперь вы можете передавать метаданные изображения, такие как ширина, высота, угол поворота и формат, в методы конструктора 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.

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

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