Приложение для управления клавиатурой и мышью с помощью жестов.
- Склонировать репозиторий
git clone https://github.com/Samoed/MyFirstDatascienceProject
- Установить зависимости
pip install -r requirements.txt
- Запуск приложения
Если при запуске приложения не появилось окно с камерой, то нужно запустить
python ui_app.py
ui_app.py
с флагом-d
или--device
для смены камеры:python ui_app.py -d 1
При разработке приложения возникла идея собирать его в Docker с помощью PyInstaller. Однако, возникла проблема при использовании библиотеки Pynput, которая взаимодействует с клавиатурой и мышью в Linux при помощи X-libs и evdev.
Для работы с Pynput внутри Docker-контейнера необходимо установить linux-headers. Однако, это требуется делать отдельно для каждого типа системы. В случае debian-подобных систем, установка заголовочных файлов через apt осуществляется без проблем. Однако, для других систем, таких как arch-подобные, возникают трудности с добавлением linux-headers.
Возможным решением является копирование заголовочных файлов внутрь контейнера, однако это не кажется оптимальным решением.
Видеопоток из камеры получается с помощью opencv
и передаются в MediaPipe
, откуда передаются точки руки. Затем эти точки передаются в модель, которая предсказывает жест. После этого, в зависимости от жеста, происходит определенное действие (движение мышью или нажатие клавиш мыши или клавиатуры).
Данные были взяты с сайта Kaggle. Из этого датасета я взял 11 классов положения руки. Так же еще для 4-х жестов я записал видео для обучения. Всего было собрано более 15 000 фотографий. Примерно по 1000 для каждого класса.
Фото жестов были обработаны с помощью Mediapipe
и сохранены в виде numpy
массивов.
Были проведены эксперименты с различными моделями. Для оценки качества моделей была использована метрика accuracy
, так как классы получились сбалансированными, но дополнительно считалось f1
. В качестве моделей использовались:
- Логистическая регрессия
- Метод опорных векторов
- Случайный лес
- Градиентный бустинг (XGBoost, sklearn, CatBoost)
- Нейронная сеть (PyTorch)
Код обучения моделей в папке experiments
. Для сохранения результатов экспериментов был использован mlflow
.
Для каждой модели были подобраны оптимальные гиперпараметры. Для этого использовалась библиотека optuna
.
В результате обучения было решено выбрать SVM, так как эта модель показала наилучшее качество.
Модель | accuracy | f1 |
---|---|---|
Логистическая регрессия | 0.942 | 0.942 |
Метод опорных векторов | 0.991 | 0.99 |
Случайный лес | 0.969 | 0.969 |
XGBoost | 0.989 | 0.989 |
CatBoost | 0.987 | 0.987 |
Нейронная сеть | 0.978 | 0.978 |
Матрица ошибок для SVM:
![](https://raw.githubusercontent.com/Samoed/MyFirstDatascienceProject/main/img/training_confusion_matrix.png)
- two_fingers_near
- one ☝️
- two ✌️
- three
- four
- five
- ok 👌
- C
- heavy 🤟
- hang 🤙
- palm ✋
- L
- like 👍
- dislike 👎
- fist ✊