Уявіть: хірург під час операції хоче переглянути знімки МРТ, не відволікаючись на стерилізацію клавіатури. Або відвідувач музею керує інтерактивною експозицією рухом руки. Розпізнавання жестів — інтерфейс майбутнього, але його реалізація впирається в точність, затримки та адаптацію до різних умов освітлення. Часто клієнти приходять із проблемою: модель 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-тестування та навантажувального тестування для забезпечення стабільності в продакшені. Замовте консультацію, і ми покажемо прототип під вашу задачу вже через тиждень.







