Идея управлять компьютером жестами давно живёт в кино, но на практике упирается в усталость рук и случайные срабатывания. Автор туториала на Habr нашёл компромисс: не полноценное управление, а привязка нескольких конкретных действий — отключение звука, сворачивание окон, прокрутка ленты — к жестам перед веб-камерой. Для сборки понадобились камера HP Webcam 4310 с разрешением 1920×1080, Python и библиотека Google MediaPipe.
MediaPipe Solutions — это open-source проект Google, предоставляющий готовые модели машинного обучения для задач компьютерного зрения. Библиотека устанавливается одной командой через pip и даёт высокоуровневый доступ к сложным нейросетям: запустить распознавание жестов можно в 20–30 строк кода. Для задачи управления жестами в MediaPipe есть две подходящие модели. HandLandmarker определяет положение рук по 21 ключевой точке и различает левую и правую ладонь, но не интерпретирует жесты как таковые — она просто фиксирует координаты точек. Это удобно для управления курсором мыши, но для распознавания конкретных жестов потребовался бы отдельный математический алгоритм. HandGestureClassifier решает задачу напрямую: модель обучена определять жест по взаимному расположению тех же 21 точки и базово распознаёт семь вариантов — сжатый кулак, открытую ладонь, указательный палец вверх, большой палец вверх и вниз, знак виктори и жест «любовь».
| Модель | Что определяет | Подходит для |
|---|---|---|
| HandLandmarker | Координаты 21 ключевой точки кисти, различает левую и правую руку | Управление курсором мыши, отслеживание движений |
| HandGestureClassifier | Конкретный жест по взаимному расположению 21 точки, 7 базовых жестов | Привязка жестов к командам, управление приложениями |
Автор выбрал HandGestureClassifier как более подходящий вариант: меньше кода, не нужна геометрия. Скрипт строится на двух зависимостях — opencv-python для захвата и отображения видео и mediapipe для распознавания. Основной цикл получает кадры с камеры, зеркалирует их по горизонтали для удобства работы и передаёт в распознаватель. Модель запускается в режиме RunningMode.VIDEO — покадровая обработка видеопотока. Параметр num_hands ограничивает поиск одной рукой: увеличение числа замедляет работу и снижает точность.
Ключевой параметр настройки — порог уверенности min_hand_detection_confidence, он варьируется от 0 до 1. При высоких значениях модель требовательна к качеству изображения и перестаёт видеть жесты при плохом освещении или низком разрешении. При низких — начинает находить «жесты» там, где их нет: в ходе тестов ИИ распознавал лайк в пересвеченном плече автора. Оптимальное значение подбирается под конкретные условия съёмки.
Для отладки автор добавил функцию draw_hand_landmarks, которая рисует прямо на кадре OpenCV ключевые точки и соединяющие их линии — так видно, как именно нейросеть воспринимает положение руки. Это упрощает подбор порогов и понимание ошибок модели. Если семи базовых жестов недостаточно, MediaPipe предоставляет инструмент Model Maker для дообучения HandGestureClassifier на собственных данных — можно добавить произвольные жесты под конкретные задачи. Проект разрабатывался под Windows, но переносится на Linux и macOS: основные отличия касаются системных вызовов для управления звуком и другими функциями ОС.


