й проект заключается в разработке системы, которая может различать жесты и выдавать соответствующий сигнал. Например, если перед камерой показать жест "", система отобразит сообщение "отлично" или "хорошо".
Для реализации этой системы я использовал следующие технологии:
- OpenCV для компьютерного зрения;
- Mediapipe для распознавания и чтения движений рук;
- XGBoost для обучения модели классификации жестов.
Стоит отметить, что я сам создал уникальный датасет для обучения модели, что делает мой проект отличным от типичных задач с использованием данных из открытых источников, таких как Kaggle.
Первую очередь надо открыть datacollect.py для подготовки тренеровчных данных. Что оно делает?
При нажатии на букву “Q” оно будет фоткать 500 раз , в это время можно показывать жест . Но стоит учесть , что когда она будет фоткать надо показывать жест с разных ракурсов и с разных расстоянии .
Тут dataset_size отвечает за количество фотографии , а number_of_classes количество жестов
“number_of_classes = 3
dataset_size = 500”. Все фотографии будут хранится в папке data.
Также скажу самое главное перед тем как готовить фотографии . Первое нажатие “Q” или первые 500 фоток , желательно не показывать жест который вы хотите классифицировать , а просто рандомные жесты .
Теперь в папке находятся три подкатегории, каждая из которых хранит по 500 фотографий для каждого жеста.
Для создания датасета из этих фотографий и последующего обучения модели нужно выполнить следующие шаги:
- Создание датасета:
- Откройте файл createdataset.py. В нем скрипт переходит в папку с фотографиями и обрабатывает каждую фотографию для расчета координат.
- Фотографии загружаются с использованием cv2.imread.
- Каждая рука распознается с помощью results = hands.process(img_rgb).
- Если руки обнаружены (hand_landmarks.landmark), извлекаются координаты ключевых точек рук и нормализуются относительно минимальных значений координат x и y.
- В скрипте есть два списка: data и labels. Data хранит координаты (x) для датасета, а labels — метки (y), которые уже разделены.
- Все данные сохраняются в файл формата pickle для дальнейшего использования.
- Обучение модели:
- Откройте файл train_classifier.ipynb. В нем загружаются данные из файла pickle.
- Данные уже разделены на data и labels.
- Затем модель обучается на этих данных. Предполагается, что data_dict — это словарь, содержащий ключи data и labels, где каждый из них содержит список последовательностей.
Таким образом, процесс включает в себя предварительную обработку фотографий для создания датасета и последующее обучение модели на этих данных.
Как видим данные неправильные надо их правильно преобразовать
Благодаря этим строк кода:
data = [seq[:shortest_length] for seq in data_dict['data']]
data_array = array(data)
shortest_length_label = min(len(seq) for seq in data_dict['labels'])
label = [seq[:shortest_length_label] for seq in data_dict['labels']]
label = array(label)
label = label.astype(int)
- Тестирование модели:
- Откройте файл test.py.
- Перед запуском файла test.py, задайте значения для названий жестов: pythonCopy code
labels_dict = {0: 'nothing', 1: 'Nice', 2: 'Ok'}
- Числа 0, 1 и 2 соответствуют папкам с фотографиями для каждого жеста.
Теперь, следуя этим шагам, вы сможете создать датасет, обучить модель, сохранить ее и протестировать работу системы распозавания жестов.
Если нет , то обращайтесь ко мне @yaloxtima мой тг