
Привет, Хабр! Сегодня хочу рассказать о своем небольшом проекте, который позволяет управлять компьютером с помощью жестов, распознаваемых через камеру.
Идея и мотивация
Меня всегда интересовала тема управления компьютером без использования традиционных периферийных устройств. Вдохновением послужили технологии компьютерного зрения и машинного обучения, которые позволяют анализировать движения рук в реальном времени. Хотелось создать систему, которая бы распознавала жесты и преобразовывала их в команды для управления курсором, кликами и прокруткой.
Эта программа будет особенно полезна для людей с ограниченными возможностями, которым сложно пользоваться традиционной мышью и клавиатурой. Кроме того, она пригодится пользователям в повседневных ситуациях: например, когда руки заняты или испачканы во время готовки, а нужно пролистать рецепт; во время работы с инструментами, когда нет возможности касаться мыши и клавиатуры; или при просмотре фильмов, чтобы легко управлять воспроизведением без пульта и нажатий.
Стек технологий
Для реализации проекта я использовал:
Python 3 — основной язык разработки.
OpenCV — обработка изображений с камеры.
Mediapipe — библиотека от Google для распознавания положения рук.
PyTorch — обучение модели распознавания жестов.
Pygame — управление курсором.
Реализация жестов
На текущий момент поддерживаются следующие жесты:
Контроль курсора — движение руки управляет положением курсора.
Левый клик — выполняется определенным жестом.
Правый клик — аналогично, но с другим положением пальцев.
Скроллинг — вертикальные движения руки прокручивают страницу.
Каждый жест проходит через нейросетевую модель, обученную на специально собранном наборе данных. Для распознавания я выбрал компактную feedforward модель, которая обеспечивает высокую точность при минимальных вычислительных затратах, что делает систему быстрой и отзывчивой.
Разработка программы
Разработка началась с изучения существующих решений в области компьютерного зрения. Я протестировал несколько библиотек, таких как OpenCV и Mediapipe, чтобы выбрать наиболее удобный инструмент для работы с жестами. Затем перешел к созданию базового прототипа, который отслеживал положение руки и управлял курсором.
Первоначально модель распознавания жестов показывала высокую задержку, поэтому я оптимизировал обработку кадров, сократив количество передаваемых данных и увеличив частоту обновления модели. В процессе тестирования пришлось несколько раз пересмотреть алгоритмы интерпретации жестов, чтобы добиться стабильного управления курсором и кликами.
Для достижения устойчивой работы в разных условиях данные с Mediapipe проходят центрирование и нормализацию, что позволяет минимизировать влияние освещения и положения камеры.
Сбор данных и обучение модели
Для увеличения точности распознавания пользователи могут самостоятельно собрать датасет, с помощью удобного скрипта:
python create_dataset.py
Во время выполнения этого скрипта система записывает изображения жестов с метками. Затем на этих данных можно обучить новую модель:
python train.py
После завершения обучения обновленная модель сохраняется в gesture_model.pth и может быть использована в основном приложении.
Итоги и перспективы
На текущий момент это простой, но достаточно удобный инструмент для управления ПК без мыши и клавиатуры. Однако есть еще много идей для улучшения:
Добавление поддержки пользовательских команд.
Расширение набора жестов (например, управление громкостью).
Оптимизация модели для работы на слабых устройствах.
Проект доступен на GitHub, и я буду рад вашему фидбеку и предложениям!
Буду рад, если подпишитесь на мой Telegram канал: https://t.me/curseknowledge