Avatar r50 a6ce93fe35b158fd29ba0e8681c918c22117160e9586a56eee4ffbc20df9bda1
Инженер Програмист

OpenCV project

Добавлено 27 июл 2024 в 14:03
й проект заключается в разработке системы, которая может различать жесты и выдавать соответствующий сигнал. Например, если перед камерой показать жест "", система отобразит сообщение "отлично" или "хорошо".

Для реализации этой системы я использовал следующие технологии:

  • OpenCV для компьютерного зрения;
  • Mediapipe для распознавания и чтения движений рук;
  • XGBoost для обучения модели классификации жестов.
Стоит отметить, что я сам создал уникальный датасет для обучения модели, что делает мой проект отличным от типичных задач с использованием данных из открытых источников, таких как Kaggle.
Первую очередь надо открыть datacollect.py для подготовки тренеровчных данных. Что оно делает?


При нажатии на букву “Q” оно будет фоткать 500 раз , в это время можно показывать жест . Но стоит учесть , что когда она будет фоткать надо показывать жест с разных ракурсов и с разных расстоянии .

Тут dataset_size отвечает за количество фотографии , а number_of_classes количество жестов

“number_of_classes = 3

dataset_size = 500”. Все фотографии будут хранится в папке data.

Также скажу самое главное перед тем как готовить фотографии . Первое нажатие “Q” или первые 500 фоток , желательно не показывать жест который вы хотите классифицировать , а просто рандомные жесты .




Теперь в папке находятся три подкатегории, каждая из которых хранит по 500 фотографий для каждого жеста.

Для создания датасета из этих фотографий и последующего обучения модели нужно выполнить следующие шаги:

  1. Создание датасета:

    • Откройте файл createdataset.py. В нем скрипт переходит в папку с фотографиями и обрабатывает каждую фотографию для расчета координат.
    • Фотографии загружаются с использованием cv2.imread.
    • Каждая рука распознается с помощью results = hands.process(img_rgb).
    • Если руки обнаружены (hand_landmarks.landmark), извлекаются координаты ключевых точек рук и нормализуются относительно минимальных значений координат x и y.
    • В скрипте есть два списка: data и labels. Data хранит координаты (x) для датасета, а labels — метки (y), которые уже разделены.
    • Все данные сохраняются в файл формата pickle для дальнейшего использования.
  2. Обучение модели:

    • Откройте файл 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)



  1. Тестирование модели:

    • Откройте файл test.py.
    • Перед запуском файла test.py, задайте значения для названий жестов: pythonCopy code
      labels_dict = {0: 'nothing', 1: 'Nice', 2: 'Ok'}

    • Числа 0, 1 и 2 соответствуют папкам с фотографиями для каждого жеста.
Теперь, следуя этим шагам, вы сможете создать датасет, обучить модель, сохранить ее и протестировать работу системы распозавания жестов.

Если нет , то обращайтесь ко мне @yaloxtima мой тг

6e28441708 047ce00aea 26615a4ef7