Распознавание жестов рук с помощью ESP32, Python и OpenCV


Этот проект на ESP32 представляет собой увлекательный и интерактивный способ управления светодиодами с помощью жестов. Мы будем использовать плату ESP32, Python, MediaPipe и OpenCV для создания системы, которая может распознавать определённые жесты рук и преобразовывать их в действия, управляющие светодиодами. MediaPipe будет использоваться для распознавания жестов, а OpenCV будет захватывать видеосигнал с веб-камеры в режиме реального времени. На основе жестов (таких как открытая ладонь, кулак или движение пальцев) команды будут отправляться на ESP32, который будет управлять подключенными к нему светодиодами. Это позволит нам включать и выключать светодиоды, изменять их яркость и даже управлять различными светодиодами с помощью определённых жестов. Это практичный и увлекательный способ изучить распознавание жестов, аппаратное управление и взаимодействие между Python и микроконтроллерами.

Управление светодиодами с помощью жестов рук

Также на нашем сайте вы можете посмотреть другие проекты, связанные с распознванием жестов:

Обзор проекта

В этом проекте демонстрируется управление светодиодами с помощью жестов руки, реализованное с помощью Python, OpenCV и микроконтроллера ESP32. Жесты руки распознаются веб-камерой и обрабатываются с помощью MediaPipe — библиотеки, разработанной для отслеживания движений рук и распознавания жестов. Каждому распознанному жесту присваивается команда управления светодиодом, например, включение или выключение светодиодов. Это позволяет интерактивно управлять светодиодами простыми движениями руки.

Команды, генерируемые жестами, передаются по беспроводной сети на ESP32 через Wi-Fi с помощью HTTP-запросов. Выступая в роли сервера, ESP32 получает эти команды и управляет светодиодами, подключенными к его контактам GPIO. Этот проект объединяет компьютерное зрение, встраиваемые системы и сетевые технологии, предлагая отличную отправную точку для новичков, интересующихся системами управления на основе жестов, Интернетом вещей и интеграцией аппаратного и программного обеспечения.

Требуемые компоненты

1. Плата ESP32 - 1 (ESP32 используется в качестве контроллера для обработки команд, отправляемых на основе жестов руки, распознаваемых камерой) (купить на AliExpress).
2. Светодиоды (5 шт.) для каждого пальца (большой, указательный, средний, безымянный, мизинец) (купить на AliExpress).
3. Резисторы (пять по 220 Ом для каждого светодиода).
4. Соединительные провода (штекер-гнездо).
5. Макетная плата.

Реклама: ООО "АЛИБАБА.КОМ (РУ)" ИНН: 7703380158

Схема проекта

Схема проекта распознавания жестов рук с помощью ESP32, Python и OpenCV представлена на следующем рисунке.

Схема проекта распознавания жестов рук с помощью ESP32, Python и OpenCV

Для управления пятью светодиодами с помощью ESP32 светодиоды подключаются к определённым контактам GPIO на ESP32, при этом каждый светодиод соответствует определённому жесту руки. Положительный вывод (анод) каждого светодиода подключается к выделенному контакту GPIO, например, к контактам GPIO 14, 27, 26, 25 и 33, которые управляют светодиодами. Эти контакты GPIO обеспечивают необходимое напряжение для включения каждого светодиода. Чтобы предотвратить повреждение светодиодов или ESP32 избыточным током, последовательно с каждым светодиодом подключается резистор сопротивлением 220 Ом или 330 Ом. Резисторы имеют решающее значение, поскольку ограничивают ток, протекающий через светодиоды, обеспечивая их безопасную работу.

Модуль ESP32 с макетной платой проекта

Отрицательный вывод (катод) каждого светодиода подключается к заземлению (GND) ESP32. Это обеспечивает замкнутую электрическую цепь для каждого светодиода. Когда вывод GPIO установлен в положение HIGH, он подаёт напряжение на анод светодиода, заставляя его загораться. И наоборот, когда вывод GPIO установлен в положение LOW, светодиод выключается. При правильном подключении система управления жестами может эффективно включать и выключать каждый светодиод в зависимости от распознанного жеста, что делает систему интерактивной и полезной для различных приложений.

Собранная на макетной плате конструкция проекта

Код ESP32 для управления светодиодами жестами руки

Этот код настраивает ESP32 как веб-сервер, управляющий пятью светодиодами, соответствующими большому, указательному, среднему, безымянному пальцам и мизинцу. Каждый светодиод подключен к определённому выводу GPIO и может включаться и выключаться с помощью HTTP-запросов. ESP32 подключается к Wi-Fi, используя предоставленные учётные данные, и после подключения служит конечными точками для управления каждым светодиодом. Когда пользователь переходит по URL-адресу, соответствующему светодиоду (например, "/led/thumb/on"), соответствующий светодиод включается и отправляет сообщение. Сервер работает на порту 80 и обрабатывает запросы на управление светодиодами.

Используемые библиотеки

ESPAsyncWebServer — доступен в диспетчере библиотек
Wire — библиотека по умолчанию

Полный код ESP32

Объяснение работы кода

Инициализация: ESP32 инициализирует последовательную связь со скоростью 115200 бод и настраивает контакты GPIO (27, 26, 25, 33, 32) для светодиодов.

Настройка светодиодов: все светодиоды изначально выключены путем установки их контактов GPIO в положение LOW.

Подключение к WiFi: ESP32 пытается подключиться к указанной сети WiFi, используя предоставленные SSID и пароль.

Проверка статуса WiFi: если соединение установлено успешно, выводится IP-адрес; если нет, то попытки продолжаются до 20 секунд.

Настройка сервера: после подключения к WiFi ESP32 запускает HTTP-сервер на порту 80.

Определения конечных точек: обработчики запросов HTTP GET определены для каждого светодиода с URL-адресами для включения или выключения каждого светодиода (например, «/led/thumb/on»).

Управление светодиодом: при получении запроса на определенной конечной точке (например, «/led/thumb/on») соответствующий светодиод включается или выключается.

Ответ: каждый HTTP-запрос отправляет ответ с подтверждающим сообщением, например «Светодиод большого пальца включен» или «Цена - 300».

Запуск сервера: сервер начинает прослушивать входящие запросы и обеспечивает управление светодиодами через конечные веб-точки.

Цикл: Функция loop() пуста, поскольку сервер работает асинхронно, обрабатывая запросы без необходимости постоянных проверок в цикле.

Код Python с использованием OpenCV и Media Pipe

Этот код использует OpenCV и MediaPipe для распознавания жестов руки через веб-камеру. Он определяет положение каждого пальца (поднят или опущен) и отправляет соответствующие команды управления на ESP32, например, для включения/выключения светодиодов. ESP32 задаётся IP-адрес, и он взаимодействует с сервером для отправки и получения команд с помощью HTTP-запросов. Код проверяет, все ли пальцы опущены, и в этом случае отправляет специальную команду. Распознанный жест руки отображается на экране, а команда ESP32 отображается в режиме реального времени.

Используемые библиотеки

pip install opencv-python
pip install mediapipe
pip install requests

Полный код Python

Объяснение кода Python

Инициализация библиотек: импортируются OpenCV и MediaPipe для обработки захвата видео и распознавания жестов рук.

Установить IP-адрес ESP32: Определяется IP-адрес ESP32, который будет использоваться для отправки и получения HTTP-запросов.

Инициализация MediaPipe: инициализируется модель отслеживания рук MediaPipe для обнаружения и обработки ориентиров рук на видеопотоке.

Определите функцию control_led: эта функция отправляет команду ESP32 для управления светодиодами на основе жеста руки (например, включение или выключение светодиодов).

Определите функцию fetch_esp32_command: эта функция извлекает команды из ESP32, отправляя HTTP-запрос GET на определенный URL.

Определите функцию count_fingers: эта функция анализирует ориентиры руки, чтобы определить, поднят или опущен каждый палец, и отправляет соответствующие команды управления светодиодом в ESP32.

Захват видео: код открывает видеопоток (камеру) и захватывает кадры для обработки.

Обработка ориентиров руки: MediaPipe обрабатывает каждый кадр для обнаружения ориентиров руки и определения состояния каждого пальца (поднят или опущен).

Отправка команд в ESP32: на основе обнаруженных состояний пальцев в ESP32 отправляются команды для управления светодиодами (например, включение или выключение определенных светодиодов).

Результаты отображения: жест руки и команда ESP32 отображаются в реальном времени на экране с помощью OpenCV, и программа продолжает обрабатывать видео до тех пор, пока пользователь не нажмет клавишу «Esc».

Основные моменты, которые следует запомнить:
обязательно замените « http://192.168.xx » на фактический IP-адрес из последовательного монитора Arduino IDE.

Тестирование работы проекта

Система обеспечивает интуитивно понятное управление светодиодами с помощью жестов. Определяя положение пальцев с помощью MediaPipe, проект определяет поднятые пальцы и отправляет соответствующие команды на ESP32. Каждому пальцу (большому, указательному, среднему, безымянному и мизинцу) соответствует определённый светодиод. При поднятии пальца соответствующий светодиод загорается, а при опускании — гаснет. Проект отправляет эти команды управления на ESP32 посредством HTTP-запросов, что упрощает управление несколькими светодиодами в режиме реального времени. Кроме того, если все пальцы опущены, система запускает предопределённое действие, например, выключает все светодиоды. Это решение интегрирует распознавание жестов с Интернетом вещей, обеспечивая бесперебойное взаимодействие между пользователем и модулем ESP32.

Тестирование работы проекта (часть 1)

Тестирование работы проекта (часть 2)

Полный код нашего проекта можно скачать с Github по следующей ссылке.

Видео, демонстрирующее работу проекта

(Проголосуй первым!)
Загрузка...
34 просмотров

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *