Samoed / MyFirstDatascienceProject

Приложение для управления клавиатурой и мышью с помощью жестов.

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

MyFirstDatascienceProject

Описание

Приложение для управления клавиатурой и мышью с помощью жестов.

Демо работы

  1. Набор жестов
  2. Работа с Miro

Установка

  1. Склонировать репозиторий
    git clone https://github.com/Samoed/MyFirstDatascienceProject
  2. Установить зависимости
    pip install -r requirements.txt
  3. Запуск приложения
    python ui_app.py
    Если при запуске приложения не появилось окно с камерой, то нужно запустить ui_app.py с флагом -d или --device для смены камеры:
    python ui_app.py -d 1

Проблема с сборкой приложения в Docker

При разработке приложения возникла идея собирать его в 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. В качестве моделей использовались:

Код обучения моделей в папке 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

mlflow_table

Матрица ошибок для SVM:

  1. two_fingers_near
  2. one ☝️
  3. two ✌️
  4. three
  5. four
  6. five
  7. ok 👌
  8. C
  9. heavy 🤟
  10. hang 🤙
  11. palm ✋
  12. L
  13. like 👍
  14. dislike 👎
  15. fist ✊


Accuracy на тестовой выборки для нейронной модели: torch_train_acc

About

Приложение для управления клавиатурой и мышью с помощью жестов.


Languages

Language:Jupyter Notebook 80.7%Language:Python 19.1%Language:Makefile 0.3%