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

Представьте: хирург во время операции хочет просмотреть снимки МРТ, не отвлекаясь на стерилизацию клавиатуры. Или посетитель музея управляет интерактивной экспозицией движением руки. [Распознавание жестов](https://en.wikipedia.org/wiki/Gesture_recognition) — интерфейс будущего, но его реализация упи

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

Часто задаваемые вопросы

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

  • image_website-b2b-advance_0.webp
    Разработка сайта компании B2B ADVANCE
    1460
  • image_web-applications_feedme_466_0.webp
    Разработка веб-приложения для компании FEEDME
    1314
  • image_websites_belfingroup_462_0.webp
    Разработка веб-сайта для компании БЕЛФИНГРУПП
    1013
  • image_ecommerce_furnoro_435_0.webp
    Разработка интернет магазина для компании FURNORO
    1275
  • image_logo-advance_0.webp
    Разработка логотипа компании B2B Advance
    727
  • image_crm_enviok_479_0.webp
    Разработка веб-приложения для компании Enviok
    1019

Представьте: хирург во время операции хочет просмотреть снимки МРТ, не отвлекаясь на стерилизацию клавиатуры. Или посетитель музея управляет интерактивной экспозицией движением руки. Распознавание жестов — интерфейс будущего, но его реализация упирается в точность, задержки и адаптацию к разным условиям освещения. Часто клиенты приходят с проблемой: модель MediaPipe выдает сырые точки, но классификация жестов на их основе дает 60–70% точности из-за смещения камеры или шума. Мырешаем эти задачи, используя стек Computer Vision и машинного обучения. Разрабатываем системы под ключ — от прототипа до продакшена, гарантируя стабильность в реальных сценариях.

MediaPipe Hands — открытая библиотека Google для hand landmark detection. Она предсказывает 21 ключевую точку кисти, работая в реальном времени на мобильных CPU (30+ FPS) и десктопах (60+ FPS). Главное преимущество — готовая оптимизация под TensorFlow Lite и ONNX, что упрощает деплой на целевые устройства. Для специфичных сценариев (жестовый язык, динамические жесты) мы дообучаем модель на своих данных.

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

Задача распознавания решается двумя подходами: через скелет руки (hand landmarks) и через классификацию изображений/видео жеста целиком. Первый подход интерпретируем и работает в реальном времени, второй точнее для сложных жестов. В основе обоих лежат нейросети, оптимизированные под целевое устройство.

MediaPipe Hands: детекция ключевых точек руки

MediaPipe Hands — стандарт для hand landmark detection. 21 точка на руку, работает в реальном времени на мобильных устройствах.

import mediapipe as mp import cv2 import numpy as np class GestureRecognizer: def __init__(self, model_path: str): self.mp_hands = mp.solutions.hands self.hands = self.mp_hands.Hands( static_image_mode=False, max_num_hands=2, min_detection_confidence=0.7, min_tracking_confidence=0.5 ) # Классификатор жестов поверх landmarks self.gesture_classifier = self._load_classifier(model_path) self.gesture_names = ['open_hand', 'fist', 'ok', 'thumbs_up', 'thumbs_down', 'victory', 'pointing', 'none'] def predict(self, frame: np.ndarray) -> list[dict]: rgb = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB) results = self.hands.process(rgb) gestures = [] if results.multi_hand_landmarks: for hand_landmarks, handedness in zip( results.multi_hand_landmarks, results.multi_handedness ): # Нормализуем coordinates относительно запястья landmarks = self._normalize_landmarks(hand_landmarks) gesture = self.gesture_classifier.predict([landmarks])[0] gestures.append({ 'gesture': self.gesture_names[gesture], 'hand': handedness.classification[0].label, # Left/Right 'landmarks': landmarks }) return gestures def _normalize_landmarks(self, hand_landmarks) -> list[float]: """Нормализация относительно ограничивающего прямоугольника""" coords = [[lm.x, lm.y, lm.z] for lm in hand_landmarks.landmark] coords = np.array(coords) # Нормализация: wrist как origin, масштаб по max extent wrist = coords[0] coords -= wrist scale = np.max(np.abs(coords)) if scale > 0: coords /= scale return coords.flatten().tolist() 

Классификатор поверх landmarks

Для базовых статических жестов (8–20 классов) достаточно простого классификатора на признаках из landmarks:

from sklearn.ensemble import RandomForestClassifier import joblib # Обучение на записанных примерах clf = RandomForestClassifier(n_estimators=100, random_state=42) clf.fit(X_train, y_train) # X: [N, 63] landmarks, y: gesture_id joblib.dump(clf, 'gesture_classifier.pkl') 

Для сложных жестов и динамических жестов (движений) — LSTM или 1D-CNN поверх последовательности landmarks:

import torch.nn as nn class TemporalGestureClassifier(nn.Module): def __init__(self, input_size=63, num_classes=20, seq_len=30): super().__init__() self.lstm = nn.LSTM(input_size, 128, num_layers=2, batch_first=True, dropout=0.3) self.classifier = nn.Linear(128, num_classes) def forward(self, x): # x: [batch, seq_len, 63] _, (hidden, _) = self.lstm(x) return self.classifier(hidden[-1]) 

Почему MediaPipe Hands — стандарт для hand landmark detection?

MediaPipe Hands обеспечивает в 2 раза более высокий FPS по сравнению с подходами на основе детекции объектов (YOLO-NAS), при схожей точности landmark. LSTM классификатор превосходит RandomForest в точности на 5–7% на динамических жестах. Главное преимущество — готовая оптимизация под TensorFlow Lite и ONNX, что упрощает деплой на целевые устройства. Для специфичных сценариев (жестовый язык, динамические жесты) мы дообучаем модель на своих данных.

Как реализовать динамические жесты и распознавание жестового языка?

Для жестового языка (ASL, РЖЯ) — более сложная задача. Требуется временная модель на последовательности 15–30 кадров. Мы используем LSTM или 1D-CNN, обучаем на размеченных видео. Отдельный раздел: AI-система распознавания жестового языка. Для динамических жестов управления (swipe left/right, zoom in/out) нужна модель, учитывающая изменение landmarks во времени. Типичная ошибка — переобучение на движение пользователя; мы решаем это аугментацией данных (поворот, масштаб, шум) и кросс-валидацией.

Применения и примеры

Бесконтактное управление в медицинских учреждениях: хирург управляет PACS-системой (просмотр рентгена) без касания — актуально во время операции в стерильных условиях. Мы помогли клинике внедрить систему с точностью 97% на 10 жестах.

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

Accessibility: управление ПК для людей с ограниченными возможностями верхних конечностей. Свяжитесь с нами для обсуждения вашего сценария.

Игровые интерфейсы: управление персонажем, VR-взаимодействие. В VR важна низкая задержка — мы достигаем p99 latency <50 мс на Quest 2.

Что входит в нашу работу?

Мы предлагаем полный цикл разработки системы распознавания жестов:

  1. Аналитика требований и выбор подходов (MediaPipe / собственные нейросети)
  2. Сбор и разметка обучающей выборки (при необходимости — запись видео ваших жестов)
  3. Разработка модели классификации (RandomForest, LSTM, 1D-CNN)
  4. Интеграция с целевым устройством (веб-камера, мобильная камера, сенсор глубины)
  5. Оптимизация под продакшен (квантизация INT8, ONNX, TensorRT)
  6. Документация и передача исходного кода
  7. Обучение вашей команды работе с системой

Оценка проекта и сроки

Сроки зависят от сложности задачи. Ориентируйтесь на таблицу:

Задача Срок
8–15 статических жестов, MediaPipe 1–2 недели
20–50 жестов включая динамические 3–5 недель
Жестовый язык (50+ знаков) 6–12 недель

Ещё одна таблица — сравнение подходов:

Подход Точность на статике FPS на мобильном CPU Сложность разработки
MediaPipe + RandomForest 90–95% 30+ Низкая
MediaPipe + LSTM 95–98% 20+ Средняя
Собственная CNN на изображении 96–99% 10–20 Высокая

Стоимость рассчитывается индивидуально под ваш проект. Получите консультацию и оценку за 1 день — напишите нам, и мы подберём оптимальное решение.

Наш опыт — 5+ лет в Computer Vision, 20+ успешных проектов по распознаванию жестов. Гарантируем точность 95%+ на статических жестах при хорошем освещении. Используем только проверенные стеки: MediaPipe, PyTorch, OpenCV. Все разработки проходят этап unit-тестирования и нагрузочного тестирования для обеспечения стабильности в продакшене. Закажите консультацию, и мы покажем прототип под вашу задачу уже через неделю.