ItsGiving: веб-камера, которая надевает мем поверх головы - LostGant
Пишу о Ai, технологиях, разработке и личном. Делаю приложения.
Новости

ItsGiving: веб-камера, которая надевает мем поверх головы

0 6

Открытый проект ItsGiving превращает веб-камеру в распознаватель гримас: ты корчишь рожу, скрипт понимает, какую именно, и накладывает подходящий мем поверх головы, продолжая отслеживать её по кадру. Название отсылает к интернет-обороту «it’s giving…» — «это отдаёт вот таким вайбом», и ровно этим инструмент и занимается. Самое важное для практики: он отдаётся как виртуальная камера, поэтому Zoom, Meet, Teams, Discord и OBS видят её как обычную вебку.

Как это работает в звонке

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

Именно такой сценарий — «сделал за вечер, работает прямо сейчас» — и есть суть вайбкодинга: не строить платформу, а собрать из готовых кирпичей то, что хочется получить сегодня. Тут этими кирпичами стали MediaPipe, OpenCV и вебка.

Виртуальная камера подменяет обычную вебку в любом мессенджере
Виртуальная камера подменяет обычную вебку в любом мессенджере

Что распознаётся из коробки

  • heart hands — сердечко из пальцев;
  • crashing out — руки к голове, рот открыт;
  • dance — руки за голову;
  • nose pinch — зажали нос;
  • tongue out, gasp, disgust — язык, изумление, отвращение;
  • side-eye — повернул голову и прищурился;
  • spin — вышел из кадра целиком;
  • а также time out, flirty, cover face, hand up и talking to the wall.

Набор хорош тем, что это не абстрактные «эмоции», а конкретные механические позы: их легко и показать, и детектировать. Для интерактива в звонке или стриме этого более чем достаточно.

Под капотом: MediaPipe и нормализация

Основа — MediaPipe: 478 лендмарков (опорных точек) лица плюс 52 blendshape-канала. Blendshape — это числовые коэффициенты, описывающие, насколько сильно «выкручен» каждый мимический параметр: приоткрыт рот, поднята бровь, растянуты губы. Отдельно отслеживаются руки (2×21 точка) и плечи с локтями — без этого жесты вроде «руки за голову» не отличить от «руки в стороны».

Ключевая инженерная деталь: все расстояния нормализуются к ширине лица. Это значит, что логика работает одинаково и когда ты сидишь в 40 сантиметрах от камеры, и когда отошёл на полтора метра. Простое, но обязательное решение — без него пороги пришлось бы пересчитывать под каждую посадку.

Калибровка под конкретное лицо

В версии v2 добавили семисекундную калибровку:你先 показываешь нейтральное лицо, а дальше выражения считаются в сигмах (стандартных отклонениях) от твоего базового уровня. Причина простая и знакомая любому, кто делал ML на людях: фиксированный порог вроде jawOpen > 0.5 означает для разных лиц совершенно разное. У одного рот приоткрыт в покое, у другого он плотно сжат — и статичный порог разваливает детекцию на второй минуте.

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

Свои мемы за 30 секунд

Кастомизация сделана максимально низкоуровнево и от этого приятно: просто бросаешь свой файл в папку assets/ с именем нужной позы — heart.png, spin.gif — и всё. Поддерживаются JPEG, PNG и анимированные GIF, учитываются прозрачность и тайминги кадров. Новые позы добавляются парой строк в функцию decide().

Для вайбкодинга это правильный дизайн: точка расширения — не конфиг с двадцатью полями, а «положи файл и назови его как надо». Хочешь своё — не читаешь документацию, а просто делаешь.

Стек и запуск

Всё предельно скромно: Python 3.11 или 3.12, MediaPipe и OpenCV. Запуск — одной командой:

  • python its_giving_v2.py

Ни Docker, ни билд-систем, ни облака. Проект лежит в открытом доступе на GitHub (репозиторий itsgiving) — можно форкнуть и докрутить под свой формат звонков и мемов.

Выводы

  • ItsGiving — компактный инструмент, который по гримасе и жесту определяет позу и накладывает мем поверх головы в реальном времени.
  • Он отдаётся как виртуальная камера, поэтому подключается в Zoom, Meet, Teams, Discord и OBS без правок самих приложений.
  • Под капотом — MediaPipe с 478 лендмарками лица и 52 blendshape-каналами, плюс руки (2×21 точка) и плечи с локтями.
  • Нормализация расстояний к ширине лица и калибровка по сигмам от нейтрального выражения — то, что делает детекцию устойчивой на любой дистанции и для любого лица.
  • Расширение через папку assets/ и пару строк в decide() — хороший пример минималистичной, дружелюбной к кастомизации архитектуры.

Оставить комментарий

Чтобы оставить комментарий, войдите через VK ID.