Рубрики
Проекты на ESP32

Использование модуля камеры ESP32 для видео трансляции и распознавания лиц

В настоящее время системы распознавания лиц (face recognition) получают все более широкое распространение, начиная от систем безопасности и заканчивая различными системами контроля доступа.

В данной статье мы рассмотрим создание системы распознавания лиц на основе модуля ESP32-CAM (ESP32 Camera module), которую можно использовать в качестве системы безопасности, предотвращающей проникновение неавторизованных лиц в охраняемое помещение. ESP32-CAM представляет собой очень маленький модуль камеры с чипом ESP32-S. На основе данного модуля мы можем достаточно просто создать систему распознавания лиц, не прибегая к каким то «тяжеловесным» технологиям как, например, система распознавания лиц на основе платы Raspberry Pi с модулем камеры и библиотеки OpenCV.

Общие сведения о модуле ESP32-CAM

Модуль ESP32-CAM содержит в своем составе чип ESP32-S, очень маленького размера камеру OV2640 и слот для карт памяти формата micro SD, на которых можно хранить снимки с камеры и различные файлы. Модуль ESP32-CAM находит широкое применение в различных проектах интернета вещей (IoT). Он может использоваться в системах обнаружения лиц в офисах, школах и других охраняемых зонах, также он может использоваться для беспроводного мониторинга, беспроводной идентификации по QR коду и многих других приложениях.

Модуль ESP32-CAM можно программировать с помощью ESP-IDF или Arduino IDE. Также модуль содержит несколько контактов ввода/вывода общего назначения (GPIO pins) для подключения внешних устройств. Модуль ESP32-CAM не содержит USB разъема, поэтому для его программирования необходима плата FTDI.

Особенности модуля ESP32-CAM:

  • самый маленький SoC модуль с поддержкой 802.11b/g/n Wi-Fi BT;
  • 32-битный процессор с низкой потребляемой мощностью;
  • тактовая частота процессора до 160MHz, суммарная вычислительная мощность до 600 DMIPS;
  • встроенная 520 KB SRAM, внешняя 4MPSRAM;
  • поддержка UART/SPI/I2C/PWM/ADC/DAC;
  • поддержка камер OV2640 и OV7670, встроенная флэш-лампа;
  • загрузка изображений через Wi-Fi;
  • поддержка TF карт;
  • поддержка нескольких типов спящих режимов;
  • можно установить Lwip и FreeRTOS;
  • поддержка режимов Wi-Fi STA/AP/STA+AP;
  • «умное» конфигурирование с помощью технологии AirKiss;
  • поддержка локальных и удаленных обновлений прошивки (FOTA).

Технические характеристики модуля ESP32-CAM:

  • SPI Flash: по умолчанию 32Mbit;
  • RAM: 520KB SRAM+ 4M PSRAM;
  • поддержка TF карт: максимум 4G;
  • поддержка интерфейсов UART, SPI, I2C, PWM;
  • выходные форматы изображений: JPEG, BMP, GRAYSCALE;
  • количество портов (IO): 9;
  • напряжение питания: 5V.

Необходимые компоненты

  1. Модуль ESP32-CAM (купить на AliExpress).
  2. Плата FTDI (купить на AliExpress).

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

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

Схема системы распознавания лиц на основе модуля ESP32-CAM представлена на следующем рисунке.

Как видите, схема очень проста. Достаточно просто подключить модуль ESP32-CAM к плате FTDI для его программирования с компьютера.

Контакты Vcc и GND модуля ESP32-CAM подключены к контактам Vcc и GND платы FTDI. Контакты Tx и Rx модуля ESP32-CAM подключены к контактам Rx и Tx платы FTDI.

Примечание: перед загрузкой кода программы в модуль замкните контакт IO0 модуля на землю. Когда контакт GPIO 0 модуля замкнут на землю (GND) – модуль находится в режиме загрузки программы (flashing mode), если он не замкнут на землю – то модуль не находится в режиме загрузки.

После загрузки программы в модуль ESP32-CAM можно отключить от него плату FTDI и подать на модуль питание 3.3V используя регулятор напряжения 7805. В результате у вас должна получиться конструкция примерно следующего вида:

Установка модуля ESP32-CAM в Arduino IDE

Мы будем программировать модуль ESP32-CAM с помощью Arduino IDE. Для этого мы в Arduino IDE должны установить дополнение (add-on) для работы с данным модулем.

Для этого в Arduino IDE выберите пункт меню File> Preferences.

Затем в открывшемся окне в поле “Additional Board Manager URLs” вставьте строку https://dl.espressif.com/dl/package_esp32_index.json как показано на рисунке ниже. После этого нажмите кнопку “OK”.

Далее в Arduino IDE выберите пункт меню Tools > Board > Boards Manager.

В открывшемся менеджера плат (Board Manager) выполните поиск ESP32, после чего из результатов поиска установите библиотеку “ESP32 by Espressif Systems“.

Код веб-сервера для камеры модуля ESP32

У нас в Arduino IDE уже есть пример кода для камеры модуля ESP32 чтобы с ее помощью осуществлять видео трансляции (video streaming) и распознавание лиц (face recognition). Откройте этот пример выбрав пункт меню File > Examples > ESP32 > Camera и из него открыв пример CameraWebServer.

Но прежде чем загружать код этого примера в свой модуль измените в нем параметры доступа к сети Wi-Fi (имя и пароль) на свои.

После этого в программе инициализируйте модуль камеры ESP32. В представленном примере представлены примеры инициализации 5 модулей камеры, для нашего проекта раскомментируйте строку “CAMERA_MODEL_AI_THINKER” и оставьте в комментариях остальные 4 строки. Теперь наш код программы готов к загрузке в модуль.

Для загрузки кода программы в модуль ESP32-CAM подключите плату FDTI в компьютеры и в качестве своей платы (модуля) выберите ‘ESP32 Wrover Module’. Также измените другие настройки как показано на следующем рисунке.

Перед загрузкой программы в модуль ESP32-CAM нажмите на нем кнопку сброса (reset button) и затем нажмите на кнопку upload в Arduino IDE.

Примечание: если во время загрузки кода программы у вас появились сообщения об ошибках, убедитесь в том, что контакт IO0 замкнут на землю (GND) и что вы выбрали правильные настройки в меню Tools.

После загрузки кода программы в модуль отключите его контакт IO0 от земли (GND). Затем откройте окно монитора последовательной связи и измените в нем бодовую скорость на 115200. После этого нажмите кнопку сброса на ESP32-CAM – в результате этого в окне монитора последовательной связи должен отобразиться IP адрес модуля и номер порта, к которому он подключен, как показано на следующем рисунке.

Теперь, чтобы получить доступ к видеотрансляции камеры, откройте браузер и введите в нем в строке адреса IP адрес вашего модуля ESP. После этого вас должно перебросить на страницу с видео трансляцией (streaming page). Чтобы начать видео трансляцию с модуля камеры ESP32 нажмите на кнопку ‘Start Stream’ внизу страницы.

Изменить качество видео трансляции можно изменяя параметр ‘Resolution’ на странице видео трансляции. Также вместо видео вы можете включить показ картинки нажав на кнопку ‘Get Still’, но используемый нами код примера не содержит опции для сохранения этих картинок.

После того как мы протестировали видео трансляцию с модуля ESP32-CAM, можно приступить к тестированию обнаружения лиц и их распознавания. Для этого в настройках выберите опции обнаружения лиц (detection) и их распознавания (Face recognition) как показано на следующем рисунке.

Для того чтобы использовать распознавание лиц вы сначала должны добавить/внести в список лицо. Вы можете добавить новое лицо в систему нажав на опцию ‘Enroll Face’. Произойдет несколько попыток сохранения лица. После сохранения лица система будем обнаруживать это лицо под именем subject 0 и после этого его можно будет использовать в нашей системе безопасности.

Более подробно работу проекта вы можете посмотреть на видео, приведенном в конце статьи.

В следующем пункте приведен код программы, также его можно скачать по следующей ссылке.

Исходный код программы (скетча)

Библиотеку esp_camera.h можно скачать по следующей ссылке (либо самостоятельно можете скачать ее с github’а).

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

14 ответов к “Использование модуля камеры ESP32 для видео трансляции и распознавания лиц”

Добрый день! Сделал всё по Вашей инструкции, но после активации с веб-сервера ползунков на нахождение и распознание лица получаю постоянный уход в перезагрузку (уменьшение качества изображения не помогает). У меня модуль ESP32-CAM c OV2640, как и у Вас. Попробовал в IDE объявлять и его и Wrover Module — реакция одинаковая.

Ниже прикрепляю последние строки с монитора порта, помогите пожалуйста:
Enrolling Face ID: 0
Enrolling Face ID: 0 sample 1
CORRUPT HEAP: Bad head at 0x3ffe2bb4. Expected 0xabba1234 got 0x00000008
abort() was called at PC 0x4008a64d on core 0

ELF file SHA256: 0000000000000000

Backtrace: 0x4008df7c:0x3ffe1d50 0x4008e1f5:0x3ffe1d70 0x4008a64d:0x3ffe1d90 0x4008a779:0x3ffe1dc0 0x400f97cf:0x3ffe1de0 0x400f5a65:0x3ffe20a0 0x400f59f4:0x3ffe20f0 0x40093545:0x3ffe2120 0x40082976:0x3ffe2140 0x4008a545:0x3ffe2160 0x4000bec7:0x3ffe2180 0x400d1bc9:0x3ffe21a0 0x401194f9:0x3ffe2350 0x40119c01:0x3ffe2380 0x40119cb9:0x3ffe2410 0x4011a08c:0x3ffe2430 0x40118778:0x3ffe2450 0x401187cf:0x3ffe2490 0x4008fe86:0x3ffe24b0

Rebooting…

Добрый вечер. У модулей ESP32 есть различные версии прошивок и я все чаще в комментариях вижу фидбек от пользователей что описанные в моей статье решения работают только на старых версиях прошивок, а на новых уже не работают. Ну тут ничего не поделаешь, эта сфера стремительно меняется и статьи постепенно устаревают и становятся неактуальными, а статей на сайте очень много, я не успеваю их с такой скоростью обновлять. Возможно, у вас именно такая ситуация. Попробуйте загрузить в модуль более старую версию прошивки по сравнению с тем, которую вы в данный момент используете

Добрый вечер! ESP32 ядро в Arduino IDE стоит версии 1.0.5, в целом должно работать (сам Arduino IDE 1.8.14)

После перехода на сайт, для настройки платы, не появляется таких настроек, как Face detection и др. С чем это может быть связано

Может быть у вас версия модуля с немного урезанной функциональностью? У вас есть на него какие нибудь документы или там, где вы его покупали, там было написано про функционал модуля? Или, может быть, на модуле есть какая-нибудь перемычка/переключатель, которая включает данную настройку? Просто версии модуля разные бывают

А как можно провести зависимость от видеофиксации лица к сервоприводам? Есть ли советы, сайты, код? Был бы очень признателен

Эти слова «Всё просто» убивают на самом деле далеко это от реальности

1 нет библиотеки esp_camera.h /\скачивал с гетХаба но её ардуино Айди не воспринимает
2 после загрузки плата стала нагреваться в руках нельзя держать, ни при подключении питания от ПК ни от аккумулятора 3.5В
3 и без библиотеки которая указана в заголовке ничего не работает пожалуйста если она у вас есть разместите её архивом, без ссылок на ГетХаб там всё меняется каждый день, новые названия и папки с дополнениями

Разместил перед кодом ссылку на скачивание этой библиотеки, но мне кажется с гитхаба ее скачивать все же лучше потому что там вы скачаете самую свежую версию библиотеки, я же свою ссылку на скачивание часто обновлять не смогу. Гитхаб для того и создан ведь чтобы у конечных пользователей не болела голова насчет того где же скачать самую свежую версию библиотеки

Не знаю, как у вас это работает, у меня ничего работает, не работает, у вас есть здесь везде отметки, начало установки на библиотеки, где вы взяли эти библиотеки, пожалуйста, загрузите на своём сайте архивы этих библиоте, потому что скачиваешь с. Там вообще нет таких названий папок, просто это не работает.

Добрый день! А Вы можете сделать камеру смартфона (Андроид) выносной? Цель : извлечь основной модуль камеры из смартфона, и соединить проводом 1-1, 5 метра. Варианты доп камеры блютуз, вай фай, USB — не подходят. Есть приложения которые работают только с основной камерой. Если это возможно, напишите на электронную почту, заранее спасибо.

Здравствуйте. Нет, к сожалению не занимался этой проблематикой, не могу подсказать по этому вопросу ничего дельного

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

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