Нейронная сеть по распознаванию жестов глухонемых (Python v)
Распознавание жестов рук с использованием MediaPipe
Оценивание позы руки с использованием MediaPipe (Python версия).
Это пример программы, которая распознает жесты рук и пальцев с помощью простого MLP, используя обнаруженные ключевые точки.
Этот репозиторий содержит следующие материалы:
- Пример программы
- Модель распознавания жестов рук (TFLite)
- Модель распознавания жестов пальцев (TFLite)
- Данные для обучения распознаванию жестов рук и блокнот для обучения
- Данные для обучения распознаванию жестов пальцев и блокнот для обучения
Требования
- mediapipe 0.8.1
- OpenCV 3.4.2 или выше
- Tensorflow 2.3.0 или выше
tf-nightly 2.5.0.dev или выше (Только при создании TFLite для модели LSTM) - scikit-learn 0.23.2 или выше (Только если вы хотите отобразить матрицу ошибок)
- matplotlib 3.3.2 или выше (Только если вы хотите отобразить матрицу ошибок)
При запуске демо можно указать следующие параметры:
- --device
Указание номера устройства камеры (По умолчанию: 0) - --width
Ширина при захвате камеры (По умолчанию: 960) - --height
Высота при захвате камеры (По умолчанию: 540) - --use_static_image_mode
Использовать ли опцию static_image_mode для MediaPipe (По умолчанию: Не указано) - --min_detection_confidence
Порог уверенности обнаружения (По умолчанию: 0.5) - --min_tracking_confidence
Порог уверенности отслеживания (По умолчанию: 0.5)
Структура директорий
│ 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
app.py
Это пример программы для вывода.
Кроме того, вы можете собирать обучающие данные (ключевые точки) для распознавания жестов рук,
а также обучающие данные (история координат кончика пальца) для распознавания жестов пальцев.
keypoint_classification.ipynb
Это скрипт для обучения модели распознавания жестов рук.
point_history_classification.ipynb
Это скрипт для обучения модели распознавания жестов пальцев.
model/keypoint_classifier
Эта директория содержит файлы, связанные с распознаванием жестов рук.
Содержит следующие файлы:
- Обучающие данные (keypoint.csv)
- Обученная модель (keypoint_classifier.tflite)
- Метки данных (keypoint_classifier_label.csv)
- Модуль вывода (keypoint_classifier.py)
model/point_history_classifier
Эта директория содержит файлы, связанные с распознаванием жестов пальцев.
Содержит следующие файлы:
- Обучающие данные (point_history.csv)
- Обученная модель (point_history_classifier.tflite)
- Метки данных (point_history_classifier_label.csv)
- Модуль вывода (point_history_classifier.py)
utils/cvfpscalc.py
Это модуль для измерения FPS.
Обучение
Распознавание жестов рук и пальцев позволяет добавлять и изменять обучающие данные, а также переобучать модель.
Обучение распознаванию жестов рук
1. Сбор обучающих данных
Нажмите "k", чтобы перейти в режим сохранения ключевых точек (отображается как «MODE: Logging Key Point»).
Если нажать "0" до "9", ключевые точки будут добавлены в "model/keypoint_classifier/keypoint.csv" следующим образом.
1-й столбец: Нажатый номер (используется как идентификатор класса), 2-й и последующие столбцы: Координаты ключевых точек
Координаты ключевых точек — это данные, которые прошли следующую предобработку до ④.
В начальном состоянии включены три типа обучающих данных: открытая рука (класс ID: 0), закрытая рука (класс ID: 1) и указание (класс ID: 2).
При необходимости добавьте 3 и выше или удалите существующие данные из csv, чтобы подготовить обучающие данные.
2. Обучение модели
Откройте "keypoint_classification.ipynb" в Jupyter Notebook и выполните команды сверху вниз.
Чтобы изменить количество классов обучающих данных, измените значение "NUM_CLASSES = 3"
и при необходимости измените метки в "model/keypoint_classifier/keypoint_classifier_label.csv".
X. Структура модели
Структура модели, подготовленной в "keypoint_classification.ipynb", выглядит следующим образом.

Обучение распознаванию жестов пальцев
1. Сбор обучающих данных
Нажмите "h", чтобы перейти в режим сохранения истории координат кончика пальца (отображается как «MODE: Logging Point History»).

Если нажать "0" до "9", данные будут добавлены в "model/point_history_classifier/point_history.csv" следующим образом.
1-й столбец: Нажатый номер (используется как идентификатор класса), 2-й и последующие столбцы: История координат

Координаты ключевых точек — это данные, которые прошли следующую предобработку до ④.

В начальном состоянии включены 4 типа обучающих данных: неподвижное состояние (класс ID: 0), по часовой стрелке (класс ID: 1), против часовой стрелки (класс ID: 2) и движение (класс ID: 4).
При необходимости добавьте 5 и выше или удалите существующие данные из csv, чтобы подготовить обучающие данные.

2. Обучение модели
Откройте "point_history_classification.ipynb" в Jupyter Notebook и выполните команды сверху вниз.
Чтобы изменить количество классов обучающих данных, измените значение "NUM_CLASSES = 4" и
при необходимости измените метки в "model/point_history_classifier/point_history_classifier_label.csv".
X. Структура модели
Структура модели, подготовленной в "point_history_classification.ipynb", выглядит следующим образом.

Структура модели с использованием "LSTM" выглядит следующим образом.
Измените "use_lstm = False" на "True", если хотите использовать (требуется tf-nightly (на момент 2020/12/16))
