Интерактивное руководство по сегментации изображений для Python

Задача MediaPipe Interactive Image Segmenter берет местоположение на изображении, оценивает границы объекта в этом месте и возвращает сегментацию объекта в виде данных изображения. Эти инструкции покажут вам, как использовать интерактивный сегментатор изображений с языком Python. Дополнительные сведения о возможностях, моделях и параметрах конфигурации этой задачи см. в разделе Обзор .

Пример кода

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

Настраивать

В этом разделе описаны ключевые шаги по настройке среды разработки и проектов кода специально для использования интерактивного сегментатора изображений. Общие сведения о настройке среды разработки для использования задач MediaPipe, включая требования к версии платформы, см. в руководстве по настройке Python . Вы можете просмотреть исходный код этого примера на GitHub.

Пакеты

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

$ python -m pip install mediapipe

Импорт

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

import mediapipe as mp
from mediapipe.tasks import python
from mediapipe.tasks.python import vision

Модель

Для задачи интерактивного сегментатора изображений MediaPipe требуется обученная модель, совместимая с этой задачей. Дополнительную информацию о доступных обученных моделях для Interactive Image Segmenter см. в разделе «Модели » обзора задач.

Выберите и загрузите модель, а затем сохраните ее в каталоге вашего проекта:

model_path = '/absolute/path/to/model.tflite'

Укажите путь к модели в параметре model_asset_path , как показано ниже:

base_options = BaseOptions(model_asset_path=model_path)

Создать задачу

Задача MediaPipe Interactive Image Segmenter использует функцию create_from_options для настройки задачи. Функция create_from_options принимает значения для обрабатываемых параметров конфигурации. Дополнительные сведения о параметрах конфигурации см. в разделе Параметры конфигурации . Следующий код демонстрирует, как создать и настроить эту задачу.

BaseOptions = mp.tasks.BaseOptions
InteractiveSegmenter = mp.tasks.vision.InteractiveSegmenter
InteractiveSegmenterOptions = mp.tasks.vision.InteractiveSegmenterOptions
VisionRunningMode = mp.tasks.vision.RunningMode

# Create a image segmenter instance with the image mode:
options = InteractiveSegmenterOptions(
    base_options=BaseOptions(model_asset_path='/path/to/model.task'),
    running_mode=VisionRunningMode.IMAGE,
    output_type=InteractiveSegmenterOptions.OutputType.CATEGORY_MASK)
with InteractiveSegmenter.create_from_options(options) as segmenter:
# segmenter is initialized and ready to use

Варианты конфигурации

Эта задача имеет следующие параметры конфигурации для приложений Python:

Название опции Описание Диапазон значений Значение по умолчанию
output_category_mask Если установлено значение True , выходные данные включают маску сегментации в виде изображения uint8, где каждое значение пикселя указывает, является ли пиксель частью объекта, расположенного в интересующей области. { True, False } False
output_confidence_masks Если установлено значение True , выходные данные включают маску сегментации в виде изображения с плавающим значением, где каждое значение с плавающей запятой представляет уверенность в том, что пиксель является частью объекта, расположенного в интересующей области. { True, False } True
display_names_locale Задает язык меток, которые будут использоваться для отображаемых имен, представленных в метаданных модели задачи, если они доступны. По умолчанию en английский язык. Вы можете добавить локализованные метки к метаданным пользовательской модели с помощью API записи метаданных TensorFlow Lite. Код региона ru

Подготовьте данные

Подготовьте входные данные в виде файла изображения или массива numpy, а затем преобразуйте их в объект mediapipe.Image .

# Load the input image from an image file.
mp_image = mp.Image.create_from_file('/path/to/image')

# Load the input image from a numpy array.
mp_image = mp.Image(image_format=mp.ImageFormat.SRGB, data=numpy_image)

Пример кода, показывающий подготовку данных для интерактивного сегментатора изображений, см. в примере кода .

Запустить задачу

Интерактивный сегментатор изображений использует функцию segment для инициирования выводов. Для сегментации изображения это включает предварительную обработку входных данных, запуск модели сегментации и постобработку необработанных выходных данных модели в сегментированные маски.

В следующем примере кода показано, как выполнить обработку с помощью модели задачи.

RegionOfInterest = vision.InteractiveSegmenterRegionOfInterest
# Perform image segmentation on the provided single image.
# The image segmenter must be created with the image mode.
roi = RegionOfInterest(format=RegionOfInterest.Format.KEYPOINT,
                          keypoint=NormalizedKeypoint(x, y))
segmented_masks = segmenter.segment(mp_image, roi)

Более полный пример выполнения выводов Interactive Image Segmenter см. в примере кода .

Обработка и отображение результатов

Выходные результаты для интерактивного сегментатора изображений представляют собой список данных Image и могут включать маску категории, маски достоверности или и то, и другое, в зависимости от того, что вы установили при настройке задачи. Если вы установите для output_category_mask значение True , выходные данные представляют собой список, содержащий одну сегментированную маску в виде изображения uint8. Значение пикселя указывает, является ли он частью объекта в интересующей области. распознанный индекс категории входного изображения. Если вы установите для output_confidence_masks значение True , выходные данные представляют собой список каналов, содержащих значения пикселей в диапазоне [0,1] , представляющие показатель достоверности пикселя, принадлежащего объекту в интересующей области.

В следующих разделах дополнительно объясняются выходные данные этой задачи:

Маска категории

На следующих изображениях показана визуализация результатов задачи для маски значений категории с указанием интересующей области. Каждый пиксель представляет собой значение uint8 , указывающее, является ли пиксель частью объекта, расположенного в интересующей области. Черно-белый кружок на втором изображении указывает выбранную область интереса.

Вывод исходного изображения и маски категории. Исходное изображение из набора данных Pascal VOC 2012 .

Маска уверенности

Выходные данные маски доверия содержат значения с плавающей запятой между [0, 1] для каждого входного канала изображения. Более высокие значения указывают на более высокую уверенность в том, что пиксель изображения является частью объекта, расположенного в интересующей области.