Задача MediaPipe Interactive Image Segmenter берет местоположение на изображении, оценивает границы объекта в этом месте и возвращает сегментацию объекта в виде данных изображения. В этих инструкциях показано, как использовать интерактивный сегментатор изображений с приложениями Android. Пример кода, описанный в этой инструкции, доступен на GitHub . Дополнительные сведения о возможностях, моделях и параметрах конфигурации этой задачи см. в разделе Обзор .
Пример кода
Пример кода задач MediaPipe — это простая реализация приложения интерактивного сегментатора изображений для Android. Пример работает с изображениями, выбранными из галереи устройства.
Вы можете использовать это приложение в качестве отправной точки для своего собственного приложения для Android или обращаться к нему при изменении существующего приложения. Пример кода Interactive Image Segmenter размещен на GitHub .
Загрузите код
Следующие инструкции показывают, как создать локальную копию кода примера с помощью инструмента командной строки git .
Чтобы загрузить пример кода:
- Клонируйте репозиторий git, используя следующую команду:
git clone https://github.com/google-ai-edge/mediapipe-samples
- При желании настройте свой экземпляр git на использование разреженной проверки, чтобы у вас были только файлы для примера приложения Interactive Image Segmenter:
cd mediapipe git sparse-checkout init --cone git sparse-checkout set examples/interactive_segmentation/android
После создания локальной версии кода примера вы можете импортировать проект в Android Studio и запустить приложение. Инструкции см. в Руководстве по установке для Android .
Ключевые компоненты
Следующие файлы содержат ключевой код для этого примера приложения сегментации изображений:
- InteractiveSegmentationHelper.kt — инициализирует задачу интерактивного сегментирования изображений и обрабатывает выбор модели и делегата.
- OverlayView.kt — обрабатывает и форматирует результаты сегментации.
Настраивать
В этом разделе описаны ключевые шаги по настройке среды разработки и проектов кода для использования интерактивного сегментатора изображений. Общие сведения о настройке среды разработки для использования задач MediaPipe, включая требования к версии платформы, см. в руководстве по настройке для Android .
Зависимости
Интерактивный сегментатор изображений использует библиотеку com.google.mediapipe:tasks-vision
. Добавьте эту зависимость в файл build.gradle
вашего проекта разработки приложения для Android. Импортируйте необходимые зависимости с помощью следующего кода:
dependencies {
...
implementation 'com.google.mediapipe:tasks-vision:latest.release'
}
Модель
Для задачи интерактивного сегментатора изображений MediaPipe требуется обученная модель, совместимая с этой задачей. Дополнительную информацию о доступных обученных моделях для Interactive Image Segmenter см. в разделе «Модели» обзора задач.
Выберите и загрузите модель, а затем сохраните ее в каталоге вашего проекта:
<dev-project-root>/src/main/assets
Используйте метод BaseOptions.Builder.setModelAssetPath()
чтобы указать путь, используемый моделью. Этот метод показан в примере кода в следующем разделе.
В примере кода Interactive Image Segmenter модель определяется в классе InteractiveSegmenterHelper.kt
в функции setupInteractiveSegmenter()
.
Создать задачу
Вы можете использовать функцию createFromOptions
для создания задачи. Функция createFromOptions
принимает параметры конфигурации, включая типы вывода маски. Дополнительные сведения о параметрах конфигурации см. в разделе Обзор конфигурации .
InteractiveSegmenterOptions options = InteractiveSegmenterOptions.builder() .setBaseOptions( BaseOptions.builder().setModelAssetPath("model.tflite").build()) .setOutputCategoryMask(true) .setOutputConfidenceMasks(false) .setResultListener((result, inputImage) -> { // Process the segmentation result here. }) .setErrorListener(exception -> { // Process the segmentation errors here. }) .build(); interactivesegmenter = InteractiveSegmenter.createFromOptions(context, options);
outputCategoryMask
True
, выходные данные включают маску сегментации в виде изображения uint8, где каждое значение пикселя указывает, является ли пиксель частью объекта, расположенного в интересующей области.True, False
}False
outputConfidenceMasks
True
, выходные данные включают маску сегментации в виде изображения с плавающим значением, где каждое значение с плавающей запятой представляет уверенность в том, что пиксель является частью объекта, расположенного в интересующей области.True, False
}True
displayNamesLocale
en
английский язык. Вы можете добавить локализованные метки к метаданным пользовательской модели с помощью API записи метаданных TensorFlow Lite.errorListener
Подготовьте данные
Интерактивный сегментатор изображений работает с изображениями, и эта задача выполняет предварительную обработку входных данных, включая изменение размера, поворот и нормализацию значений. Вам необходимо преобразовать входное изображение в объект com.google.mediapipe.framework.image.MPImage
перед передачей его задаче.
import com.google.mediapipe.framework.image.BitmapImageBuilder; import com.google.mediapipe.framework.image.MPImage; // Load an image on the user’s device as a Bitmap object using BitmapFactory. // Convert an Android’s Bitmap object to a MediaPipe’s Image object. MPImage mpImage = new BitmapImageBuilder(bitmap).build();
RegionOfInterest roi = RegionOfInterest.create( NormalizedKeypoint.create( normX * it.width, normY * it.height ) ); ImageSegmenterResult segmenterResult = interactivesegmenter.segment(image, roi);