Нейронная сеть по распознаванию жестов глухонемых (Python v)
Автор
Соавторы
Распознавание жестов рук с использованием MediaPipe<br>
<br>Оценивание позы руки с использованием MediaPipe (Python версия).<br>
Это пример программы, которая распознает жесты рук и пальцев с помощью простого MLP, используя обнаруженные ключевые точки.<br>
<br>Этот репозиторий содержит следующие материалы:<br>
1) Пример программы<br>
2) Модель распознавания жестов рук (TFLite)<br>
3) Модель распознавания жестов пальцев (TFLite)<br>
4) Данные для обучения распознаванию жестов рук и блокнот для обучения<br>
5) Данные для обучения распознаванию жестов пальцев и блокнот для обучения<br>
<br>Требования<br>
1) mediapipe 0.8.1<br>
2) OpenCV 3.4.2 или выше<br>
3) Tensorflow 2.3.0 или выше<br>tf-nightly 2.5.0.dev или выше (Только при создании TFLite для модели LSTM)<br>
4) scikit-learn 0.23.2 или выше (Только если вы хотите отобразить матрицу ошибок)<br>
5) matplotlib 3.3.2 или выше (Только если вы хотите отобразить матрицу ошибок)<br>
<br>При запуске демо можно указать следующие параметры:<br>
1) --device<br>Указание номера устройства камеры (По умолчанию: 0)<br>
2) --width<br>Ширина при захвате камеры (По умолчанию: 960)<br>
3) --height<br>Высота при захвате камеры (По умолчанию: 540)<br>
4) --use_static_image_mode<br>Использовать ли опцию static_image_mode для MediaPipe (По умолчанию: Не указано)<br>
5) --min_detection_confidence<br>Порог уверенности обнаружения (По умолчанию: 0.5)<br>
6) --min_tracking_confidence<br>Порог уверенности отслеживания (По умолчанию: 0.5)<br>
<br>Структура директорий:
<pre>
│ app.py
│ keypoint_classification.ipynb
│ point_history_classification.ipynb
│
├─model
│ ├─keypoint_classifier
│ │ │ keypoint.csv
│ │ │ keypoint_classifier.hdf5
│ │ │ keypoint_classifier.py
│ │ │ keypoint_classifier.tflite
│ │ └─ keypoint_classifier_label.csv
│ │
│ └─point_history_classifier
│ │ point_history.csv
│ │ point_history_classifier.hdf5
│ │ point_history_classifier.py
│ │ point_history_classifier.tflite
│ └─ point_history_classifier_label.csv
│
└─utils
└─cvfpscalc.py
</pre>
<br>"app.py"<br>
Это пример программы для вывода.<br>
Кроме того, вы можете собирать обучающие данные (ключевые точки) для распознавания жестов рук,<br>
а также обучающие данные (история координат кончика пальца) для распознавания жестов пальцев.<br>
<br>keypoint_classification.ipynb<br>
Это скрипт для обучения модели распознавания жестов рук.<br>
<br>point_history_classification.ipynb<br>
Это скрипт для обучения модели распознавания жестов пальцев.<br>
<br>model/keypoint_classifier<br>
Эта директория содержит файлы, связанные с распознаванием жестов рук.<br>
Содержит следующие файлы:<br>
1) Обучающие данные (keypoint.csv)<br>
2) Обученная модель (keypoint_classifier.tflite)<br>
3) Метки данных (keypoint_classifier_label.csv)<br>
4) Модуль вывода (keypoint_classifier.py)<br>
<br>model/point_history_classifier<br>
Эта директория содержит файлы, связанные с распознаванием жестов пальцев.<br>
Содержит следующие файлы:<br>
1) Обучающие данные (point_history.csv)<br>
2) Обученная модель (point_history_classifier.tflite)<br>
3) Метки данных (point_history_classifier_label.csv)<br>
4) Модуль вывода (point_history_classifier.py)<br>
<br>utils/cvfpscalc.py<br>
Это модуль для измерения FPS.<br>
<br>Обучение<br>
Распознавание жестов рук и пальцев позволяет добавлять и изменять обучающие данные, а также переобучать модель.<br>
<br>Обучение распознаванию жестов рук<br>
1. Сбор обучающих данных<br>
Нажмите "k", чтобы перейти в режим сохранения ключевых точек (отображается как «MODE: Logging Key Point»).<br>
<br>Если нажать "0" до "9", ключевые точки будут добавлены в "model/keypoint_classifier/keypoint.csv" следующим образом.<br>
1-й столбец: Нажатый номер (используется как идентификатор класса), 2-й и последующие столбцы: Координаты ключевых точек<br>
Координаты ключевых точек — это данные, которые прошли следующую предобработку до ④.<br>
В начальном состоянии включены три типа обучающих данных: открытая рука (класс ID: 0), закрытая рука (класс ID: 1) и указание (класс ID: 2).<br>
При необходимости добавьте 3 и выше или удалите существующие данные из csv, чтобы подготовить обучающие данные.<br>
<br>2. Обучение модели<br>
Откройте "[keypoint_classification.ipynb](keypoint_classification.ipynb)" в Jupyter Notebook и выполните команды сверху вниз.<br>
Чтобы изменить количество классов обучающих данных, измените значение "NUM_CLASSES = 3" <br>и при необходимости измените метки в "model/keypoint_classifier/keypoint_classifier_label.csv".<br><br>
<br>X. Структура модели<br>
Структура модели, подготовленной в "[keypoint_classification.ipynb](keypoint_classification.ipynb)", выглядит следующим образом.<br>
<img src="https://user-images.githubusercontent.com/37477845/102246723-69c76a00-3f42-11eb-8a4b-7c6b032b7e71.png" width="50%"><br><br>
<br>Обучение распознаванию жестов пальцев<br>
<br>1. Сбор обучающих данных<br>
Нажмите "h", чтобы перейти в режим сохранения истории координат кончика пальца (отображается как «MODE: Logging Point History»).<br>
<img src="https://user-images.githubusercontent.com/37477845/102249074-4d78fc80-3f45-11eb-9c1b-3eb975798871.jpg" width="60%"><br><br>
Если нажать "0" до "9", данные будут добавлены в "model/point_history_classifier/point_history.csv" следующим образом.<br>
1-й столбец: Нажатый номер (используется как идентификатор класса), 2-й и последующие столбцы: История координат<br>
<img src="https://user-images.githubusercontent.com/37477845/102345850-54ede380-3fe1-11eb-8d04-88e351445898.png" width="80%"><br><br>
Координаты ключевых точек — это данные, которые прошли следующую предобработку до ④.<br>
<img src="https://user-images.githubusercontent.com/37477845/102244148-49e27700-3f3f-11eb-82e2-fc7de42b30fc.png" width="80%"><br><br>
В начальном состоянии включены 4 типа обучающих данных: неподвижное состояние (класс ID: 0), по часовой стрелке (класс ID: 1), против часовой стрелки (класс ID: 2) и движение (класс ID: 4). <br>
При необходимости добавьте 5 и выше или удалите существующие данные из csv, чтобы подготовить обучающие данные.<br>
<img src="https://user-images.githubusercontent.com/37477845/102350939-02b0c080-3fe9-11eb-94d8-54a3decdeebc.jpg" width="20%"> <img src="https://user-images.githubusercontent.com/37477845/102350945-05131a80-3fe9-11eb-904c-a1ec573a5c7d.jpg" width="20%"> <img src="https://user-images.githubusercontent.com/37477845/102350951-06444780-3fe9-11eb-98cc-91e352edc23c.jpg" width="20%"> <img src="https://user-images.githubusercontent.com/37477845/102350942-047a8400-3fe9-11eb-9103-dbf383e67bf5.jpg" width="20%">
<br>2. Обучение модели<br>
Откройте "[point_history_classification.ipynb](point_history_classification.ipynb)" в Jupyter Notebook и выполните команды сверху вниз.<br>
Чтобы изменить количество классов обучающих данных, измените значение "NUM_CLASSES = 4" и <br>при необходимости измените метки в "model/point_history_classifier/point_history_classifier_label.csv". <br><br>
<br>X. Структура модели<br>
Структура модели, подготовленной в "[point_history_classification.ipynb](point_history_classification.ipynb)", выглядит следующим образом.<br>
<img src="https://user-images.githubusercontent.com/37477845/102246771-7481ff00-3f42-11eb-8ddf-9e3cc30c5816.png" width="50%"><br>
Структура модели с использованием "LSTM" выглядит следующим образом. <br>Измените "use_lstm = False" на "True", если хотите использовать (требуется tf-nightly (на момент 2020/12/16))<br>
<img src="https://user-images.githubusercontent.com/37477845/102246817-8368b180-3f42-11eb-9851-23a7b12467aa.png" width="60%">
<br>Команда соавторов:<br>
Токарев Виктор — студент МКИС34, ИСТ ДГТУ — id=coder — (telegram: @Netrunner_2077), роль — Backend-Developer;<br>
Заболотский Семён — студент МКИС34, ИСТ ДГТУ — id=chummba — (telegram: @Chummba), роль — ML-Developer;<br>
Сандул Кирилл — студент МКИС34, ИСТ ДГТУ — id=kirillsandul — (telegram: @KRLLSND), роль — Developer;<br>