Система распознавания жестов: от MediaPipe до продакшена

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

Распознавание жестов: где ломается пилот и почему

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

Разберём, где именно ломается переход от прототипа к продакшену. Первая точка отказа — данные: модель учили на записях одного человека и одного помещения, поэтому на новых людях и ракурсах она ошибается предсказуемо. Вторая — разметка: жесты, похожие по траектории кисти, но разные по смыслу, размечены одним классом, и классификатор физически не может их различить. Третья — задержка: тяжёлая модель на слабом железе отвечает медленнее, чем человек двигает рукой, и интерфейс «плывёт».

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

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

Что даёт промышленное распознавание жестов

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

Устойчивость к свету и фону даёт связка: нормализация кадра перед подачей в модель, обучение на расширенном наборе с искусственно испорченным освещением и отсечение областей по глубине или по трекингу кисти. В результате распознавание жестов не разваливается при смене времени суток и перестановке оборудования, а порог уверенности настраивается под задачу — где-то важнее не пропустить жест, где-то не поймать лишний.

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

Ложные срабатывания снижаем тремя приёмами: временное подтверждение (жест должен удержаться несколько кадров), пространственная привязка к зоне взаимодействия и отдельный классификатор на «похожие, но не целевые» движения. Доля ложных срабатываний падает с десятков за смену до единиц, и оператор перестаёт бороться с системой.

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

Подходы к распознаванию жестов и их ограничения

Выбор метода распознавания жестов определяется не «модностью» модели, а условиями съёмки: фон, освещение, число камер, допустимая задержка отклика. Ниже — рабочие варианты, между которыми реально выбирают на старте проекта, и их границы применимости.

Вариант Когда подходит Ограничения
Классический трекинг кисти по ключевым точкам Одна камера, фронтальный ракурс, жесты рук в кадре крупно Теряет кисть при перекрытии пальцев, быстром движении, слабом контрасте с фоном
Скелетная модель на видеопотоке Нужны динамические жесты и траектория движения Чувствительна к ракурсу, требует калибровки под сцену
Классификация по глубине (сенсор глубины) Плохое освещение, сложный фон, несколько рук Привязка к конкретному сенсору, ограничение по дистанции
Гибрид: трекинг + нейросетевой классификатор Продакшен с потоком пользователей и разными условиями Сложнее в поддержке, нужен сбор данных под сцену заказчика

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

Ключевой вопрос — не какой метод выбрать, а как связать трекинг кисти с логикой приложения: где заканчивается распознавание жеста и начинается реакция интерфейса. Ошибки на этой границе дают ложные срабатывания чаще, чем сама модель.

Как мы ведём проект распознавания жестов

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

Этапы проекта

  1. Постановка задачи и словарь жестов. Фиксируем список жестов, их визуальные отличия и конфликтующие пары (например, похожие положения пальцев). Определяем целевую точность и допустимые ложные срабатывания.
  2. Сбор и разметка данных. Записываем видео с реальных ракурсов и условий освещения, размечаем кадры. Отдельно готовим «сложные» примеры: частично перекрытые руки, движение, разные типы кожи и одежды.
  3. Прототип на MediaPipe. Собираем быстрый прототип на готовых моделях трекинга рук, чтобы оценить, хватает ли точности без обучения собственной сети. Это дешёвый способ отсеять нереалистичные требования до вложений в разметку.
  4. Обучение и дообучение модели. Если прототипа недостаточно, обучаем классификатор на собранных данных, подбираем архитектуру и пороги уверенности. Проверяем модель на отложенной выборке, а не на тех кадрах, что использовались при обучении.
  5. Проверка модели. Прогоняем систему на записях, которых модель не видела: другие люди, другое освещение, другая камера. Считаем точность по каждому жесту отдельно — средний показатель скрывает провалы на отдельных классах.
  6. Интеграция и оптимизация. Встраиваем модель в целевое приложение, настраиваем потоковую обработку кадров и поведение при потере трекинга. Добиваемся стабильного отклика без просадок при длительной работе.
  7. Передача системы заказчику. Передаём код, веса модели, инструкцию по развёртыванию и дообучению на новых данных. Проводим обучение команды и фиксируем порядок обновления словаря жестов.

Каждый этап заканчивается артефактом, который можно проверить: словарь жестов, размеченный датасет, отчёт по точности, работающий прототип. Это позволяет остановить проект на ранней стадии, если требования не сходятся с реальностью, и не тратить ресурсы на заведомо слабое решение.

Артефакты и настройки, которые остаются у заказчика

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

  • Конфигурация модели — веса обученной сети, гиперпараметры инференса, пороги уверенности по каждому жесту и словарь классов. С этим набором переобучение на новых жестах воспроизводится один в один, а не «как получилось в прошлый раз».
  • Схемы интеграции — диаграммы потоков от камеры до потребителя события: где идёт захват кадров, где инференс, где буферизация и как результат уходит в вашу систему. С явными точками отказа и поведением при потере кадров.
  • Документация системы — описание архитектуры, форматы входных и выходных данных, требования к железу и сети, инструкция по локальному запуску стенда для отладки.
  • Регламенты эксплуатации — порядок обновления модели, правила отката на предыдущую версию, контроль дрейфа точности по распознаванию жестов и периодичность перекалибровки под новое освещение или расстановку камер.
  • Набор тестовых сценариев — эталонные видеопоследовательности с разметкой, на которых проверяется, что после любого изменения точность не просела.
  • Скрипты развёртывания — автоматизированная установка на целевое окружение и повторяемая сборка, чтобы стенд поднимался одинаково у вас и у нас.
  • Матрица доступов и ролей — кто может менять пороги, кто обновлять модель, кто только смотреть метрики; с журналом изменений.

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

Кейс: распознавание жестов на производственной линии

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

Пилот собрали на камере над рабочим местом и модели распознавания жестов. Первая версия на тестовом стенде давала около 70% верных срабатываний: мешали блики от цехового освещения и похожие жесты «стоп» и «подать». Пересобрали датасет под реальные условия цеха, добавили второй ракурс и ограничили набор команд шестью однозначными жестами.

MediaPipe на этапе прототипа позволил быстро проверить гипотезу на записях с линии, но для продакшена инференс перенесли на локальный вычислительный модуль рядом с камерой — кадры не уходят во внешнюю сеть, а отклик не зависит от канала связи.

Метрики до и после

Показатель До После
Доля распознанных жестов ~70% на стенде 96-98% в смене
Задержка отклика 400-600 мс на пульте до 150 мс
Ложные срабатывания 1 на 8-10 команд 1 на 200+ команд
Простой линии на переключениях регулярные остановки единичные случаи

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

Кейс распознавания показал главное: метрики внедрения решаются не моделью, а условиями съёмки и дисциплиной набора данных под конкретную производственную линию.

Чем отличается распознавание жестов от трекинга рук?

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

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

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

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

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

Частые технические сомнения по распознаванию жестов

Распознавание жестов ломается не на модели, а на входных данных: смена освещения, ракурс кисти, фон, синхронность потоков с нескольких камер. Поэтому первый вопрос к подрядчику — не «какой фреймворк», а «как вы измеряете точность жестов на нашем сценарии». Метрика должна считаться на вашем материале: доля верно распознанных жестов, доля пропущенных срабатываний, задержка между жестом и реакцией системы. Без этого разговор о точности остаётся теоретическим.

Насколько точность падает при плохом освещении и что с этим делают?

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

Какие камеры подойдут и можно ли обойтись уже установленными?

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

Как распознавание жестов встраивается в наш продукт?

Интеграция идёт через сервисный интерфейс: ваш продукт отправляет поток или кадры и получает события с распознанным жестом и уровнем уверенности. Логика реакции остаётся на вашей стороне — мы не зашиваем бизнес-правила в модель. Такой контур переживает замену модели и не требует переписывать продукт при следующем обновлении.

Что если точность на нашем сценарии окажется ниже ожидаемой?

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

Обсудим задачу распознавания жестов

Чтобы разговор был предметным, а не «расскажите про задачу в общих словах», на старте достаточно четырёх вводных: какие жесты и в каком количестве распознаём, на каком оборудовании работает система (камера, глубина, инфракрасные сенсоры), в каком режиме — офлайн на устройстве или через сервер, и что происходит при ошибке распознавания. Этого хватает, чтобы оценить проект и собрать план работ, не уходя в преждевременное прототипирование.

Дальше мы фиксируем рамки и возвращаемся с оценкой и планом. Что понадобится от вас для старта:

  • Видеозаписи или живой поток с реальных условий съёмки — свет, фон, ракурс, скорость жестов.
  • Список жестов с описанием, какие из них критичны, а какие можно распознавать с меньшей точностью.
  • Сценарий использования жестового интерфейса: кто и в какой момент подаёт жест, что система должна сделать в ответ.
  • Требования к задержке реакции — насколько быстро интерфейс обязан откликаться на жест.
  • Ограничения по оборудованию и среде: где стоит камера, есть ли посторонние в кадре, меняется ли освещение.
  • Допустимая доля ошибок и что делать, когда жест не распознан — игнорировать, переспросить или откатить действие.
  • Точки интеграции: с какой системой связываем распознавание и по какому каналу передаём результат.

По этим вводным мы оцениваем объём разметки данных, сложность модели и сроки. Опишите задачу — вернёмся с оценкой и планом работ.

Направления AI-разработки

Последние работы

  • Разработка сайта компании B2B ADVANCE
    Разработка сайта компании B2B ADVANCE
    1542
  • Разработка веб-приложения для компании FEEDME
    Разработка веб-приложения для компании FEEDME
    1393
  • Разработка веб-сайта для компании БЕЛФИНГРУПП
    Разработка веб-сайта для компании БЕЛФИНГРУПП
    1081
  • Разработка интернет магазина для компании FURNORO
    Разработка интернет магазина для компании FURNORO
    1368
  • Разработка логотипа компании B2B Advance
    Разработка логотипа компании B2B Advance
    815
  • Разработка веб-приложения для компании Enviok
    Разработка веб-приложения для компании Enviok
    1139