Представьте: хирург во время операции хочет просмотреть снимки МРТ, не отвлекаясь на стерилизацию клавиатуры. Или посетитель музея управляет интерактивной экспозицией движением руки. Распознавание жестов — интерфейс будущего, но его реализация упирается в точность, задержки и адаптацию к разным условиям освещения. Часто клиенты приходят с проблемой: модель 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.
Что входит в нашу работу?
Мы предлагаем полный цикл разработки системы распознавания жестов:
- Аналитика требований и выбор подходов (MediaPipe / собственные нейросети)
- Сбор и разметка обучающей выборки (при необходимости — запись видео ваших жестов)
- Разработка модели классификации (RandomForest, LSTM, 1D-CNN)
- Интеграция с целевым устройством (веб-камера, мобильная камера, сенсор глубины)
- Оптимизация под продакшен (квантизация INT8, ONNX, TensorRT)
- Документация и передача исходного кода
- Обучение вашей команды работе с системой
Оценка проекта и сроки
Сроки зависят от сложности задачи. Ориентируйтесь на таблицу:
| Задача | Срок |
|---|---|
| 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-тестирования и нагрузочного тестирования для обеспечения стабильности в продакшене. Закажите консультацию, и мы покажем прототип под вашу задачу уже через неделю.







