Задача MediaPipe Interactive Image Segmenter берет местоположение на изображении, оценивает границы объекта в этом месте и возвращает сегментацию объекта в виде данных изображения. В этих инструкциях показано, как использовать интерактивный сегментатор изображений для Node и веб-приложений. Дополнительные сведения о возможностях, моделях и параметрах конфигурации этой задачи см. в разделе Обзор .
Пример кода
В примере кода интерактивного сегментатора изображений представлена полная реализация этой задачи на языке JavaScript. Этот код поможет вам протестировать эту задачу и приступить к созданию собственного приложения для интерактивной сегментации изображений. Вы можете просматривать, запускать и редактировать пример кода интерактивного сегментатора изображений, используя только веб-браузер. Вы также можете просмотреть код этого примера на GitHub .
Настраивать
В этом разделе описаны ключевые шаги по настройке среды разработки и проектов кода специально для использования интерактивного сегментатора изображений. Общие сведения о настройке среды разработки для использования задач MediaPipe, включая требования к версии платформы, см. в руководстве по установке для Интернета .
JavaScript-пакеты
Код интерактивного сегментатора изображений доступен через пакет MediaPipe @mediapipe/tasks-vision
NPM . Вы можете найти и загрузить эти библиотеки по ссылкам, приведенным в руководстве по установке платформы.
Вы можете установить необходимые пакеты с помощью следующего кода для локальной установки, используя следующую команду:
npm install --save @mediapipe/tasks-vision
Если вы хотите импортировать код задачи через службу сети доставки контента (CDN), добавьте следующий код в
тег в вашем HTML-файле:<head>
<script src="https://cdn.jsdelivr.net/npm/@mediapipe/tasks-vision/vision_bundle.js"
crossorigin="anonymous"></script>
</head>
Модель
Для задачи интерактивного сегментатора изображений MediaPipe требуется обученная модель, совместимая с этой задачей. Дополнительную информацию о доступных обученных моделях для Interactive Image Segmenter см. в разделе «Модели» обзора задач.
Выберите и загрузите модель, а затем сохраните ее в каталоге проекта:
<dev-project-root>/app/shared/models/
Создать задачу
Используйте одну из функций createFrom...()
интерактивного сегментатора изображений, чтобы подготовить задачу к выполнению выводов. Используйте функцию createFromModelPath()
с относительным или абсолютным путем к файлу обученной модели. Если ваша модель уже загружена в память, вы можете использовать метод createFromModelBuffer()
.
В приведенном ниже примере кода показано использование функции createFromOptions()
для настройки задачи. Функция createFromOptions
позволяет настраивать интерактивный сегментатор изображений с помощью параметров конфигурации. Дополнительные сведения о параметрах конфигурации см. в разделе Параметры конфигурации .
Следующий код демонстрирует, как создать и настроить задачу с настраиваемыми параметрами:
async function createSegmenter() {
const vision = await FilesetResolver.forVisionTasks(
"https://cdn.jsdelivr.net/npm/@mediapipe/tasks-vision@latest/wasm"
);
interactiveSegmenter = await InteractiveSegmenter.createFromOptions(vision, {
baseOptions: {
modelAssetPath:
"https://storage.googleapis.com/mediapipe-tasks/interactive_segmenter/ptm_512_hdt_ptm_woid.tflite"
},
});
}
createSegmenter();
Варианты конфигурации
Эта задача имеет следующие параметры конфигурации для веб-приложений:
Название опции | Описание | Диапазон значений | Значение по умолчанию |
---|---|---|---|
outputCategoryMask | Если установлено значение True , выходные данные включают маску сегментации в виде изображения uint8, где каждое значение пикселя указывает, является ли пиксель частью объекта, расположенного в интересующей области. | { True, False } | False | outputConfidenceMasks | Если установлено значение True , выходные данные включают маску сегментации в виде изображения с плавающим значением, где каждое значение с плавающей запятой представляет уверенность в том, что пиксель является частью объекта, расположенного в интересующей области. | { True, False } | True |
displayNamesLocale | Задает язык меток, которые будут использоваться для отображаемых имен, представленных в метаданных модели задачи, если они доступны. По умолчанию en английский язык. Вы можете добавить локализованные метки к метаданным пользовательской модели с помощью API записи метаданных TensorFlow Lite. | Код региона | ru |
Подготовьте данные
Интерактивный сегментатор изображений может сегментировать объекты на изображениях в любом формате, поддерживаемом хост-браузером. Задача также выполняет предварительную обработку входных данных, включая изменение размера, поворот и нормализацию значений.
Вызовы методов сегментации segment()
segmentForVideo()
интерактивного сегментатора изображений выполняются синхронно и блокируют поток пользовательского интерфейса. Если вы сегментируете объекты в кадрах видео с камеры устройства, каждая задача сегментации блокирует основной поток. Вы можете предотвратить это, внедрив веб-воркеры для запуска segment()
и segmentForVideo()
в другом потоке.
Запустить задачу
Интерактивный сегментатор изображений использует метод segment()
для инициирования выводов. Интерактивный сегментатор изображений возвращает обнаруженные сегменты в виде данных изображения в функцию обратного вызова, которую вы установили при выполнении вывода для задачи.
Следующий код демонстрирует, как выполнить обработку с помощью модели задачи:
const image = document.getElementById("image") as HTMLImageElement; interactiveSegmenter.segment( image, { keypoint: { x: event.offsetX / event.target.width, y: event.offsetY / event.target.height } }, callback);