К содержанию
fohbookбета/ TouchDesigner

MediaPipe: тело, руки, лицо

Открытый плагин Torin Blankensmith и Dom Scott: модели MediaPipe в Chromium внутри TouchDesigner. Как подать картинку через виртуальную камеру, что приходит на выходе и как не дать точкам дрожать.

Ветка вашего пульта:
Быстрый выбор:

MediaPipe TouchDesigner — открытый плагин под MIT от Torin Blankensmith и Dom Scott: модели Google MediaPipe внутри TouchDesigner, на Windows и macOS, на видеокарте, без установки. Продукт не Derivative, но уроки по нему Derivative публикует у себя. Для интерактива — первая попытка.

Задача Что даёт
Pose Точки тела
Hands Точки кистей и жесты
Face Landmarks Плотная сетка лица
Face Detection Лица, в том числе несколько
Object Detection Объекты
Image Segmentation Маска фигуры, несколько моделей
Image Classification Что в кадре

Внутри — Web Render TOP, то есть Chromium: страница гоняет модели через WebAssembly и шлёт результат JSON по WebSocket. Модели встроены в компонент, интернет не нужен. Отсюда две особенности. Вход — системная веб-камера, а картинку из сети подают виртуальной камерой: Spout и SpoutCam на Windows, Syphon через OBS на macOS. И вход не больше 720p — трекингу хватает.

release.zip берут в Releases репозитория torinmb/mediapipe-touchdesigner, MediaPipe TouchDesigner.toe в нём — готовый пример. В свой проект переносят MediaPipe.tox из toxes и нужные разборщики для лица, рук, позы, объектов, сегментации, классификации. При импорте — Enable External .tox, иначе файл проекта раздувается. Камеру выбирают, лишние модели выключают: каждая отнимает время.

На выходе TOP с видео и разметкой, DAT с результатами задач и CHOP служебных цифр — detectTime, totalInToOutDelay и isRealTime, успевает ли плагин.

Точки

Координаты нормализованы по кадру, дальше обычная цепочка:

mediapipe ──▶ select (нужные точки) ──▶ math (в координаты сцены)
          ──▶ lag / filter ──▶ null ──▶ инстансинг / параметры

Сглаживать обязательно: сырые точки дрожат даже на неподвижном человеке, Сглаживание. Мёртвая зона — иначе пустой зал шевелится. И заранее решить, что делает сцена, когда человека нет: замирает, уходит в покой или ждёт.

Что Как
Рука ведёт параметр Кисть → Math CHOP → параметр, с фильтром
«Щипок» — кнопка Большой и указательный ближе порога → Trigger CHOP
Частицы за человеком Точки скелета → источники, Частицы
Силуэт — маска Segmentation → композит
Лицо крутит объект Точки лица → поворот геометрии

Один человек — надёжно, толпа — нет: номер человека между кадрами может смениться. Контровой, дым и строб ломают трекинг, зоне нужен свой ровный свет. Задержка плагина ложится поверх задержки камеры и виртуальной камеры — totalInToOutDelay в помощь.

Реальные люди, реальный свет

Работает на разработчике за столом днём — разваливается в тёмном зале на человеке в чёрной куртке. Проверяют в условиях площадки до монтажа.

Следствие, а не точки

Скелет поверх видео радует разработчика, зрителя радует то, что происходит от поднятой руки, Зачем нейросети. Зона целиком — Интерактив с камерой.

Нашли в статье ошибку, устаревшее или непонятное место?

рядом по смыслу