Мы с важной новостью: с 28 февраля 2025 года сервис Хабр Фриланс прекратит свою работу.

Купить услуги можно до 28 февраля 2025, но пополнить баланс уже нельзя. Если на вашем счете остались средства, вы можете потратить их на небольшие услуги — служба поддержки готова поделиться бонусами, на случай, если средств немного не хватает.
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