ESP32-CAM: Веб-камера и распознавание лиц своими руками

Пошаговое руководство по созданию умной камеры на ESP32-CAM с распознаванием лиц. Прошивка, подключение, интеграция с умным домом. DIY проект для энтузиастов.
Приветствую всех энтузиастов умного дома и DIY-электроники! Сегодня мы погрузимся в увлекательный мир компьютерного зрения на микроконтроллерах. Я покажу вам, как превратить недорогую плату ESP32-CAM в полноценную веб-камеру с функцией распознавания лиц. Это отличный проект для домашней безопасности, автоматизации или просто для экспериментов.
Зачем это нужно? В отличие от обычных IP-камер, ESP32-CAM работает автономно, не требует постоянного подключения к облаку (что важно для приватности) и может принимать интеллектуальные решения прямо на устройстве. Например, она может отправлять вам уведомление только тогда, когда в кадре появился человек, а не каждый раз, когда мимо пробежала кошка.
Что нам понадобится
- Плата ESP32-CAM — сердце нашего проекта. Убедитесь, что у вас версия с OV2640 (2 МП) — она наиболее распространена.
- Адаптер FTDI (USB-to-Serial) или любой другой UART-программатор для прошивки. У ESP32-CAM нет встроенного USB-порта.
- Макетная плата и провода «папа-папа» для удобного подключения.
- Источник питания 5В — можно использовать Power Bank или стабильный блок питания.
- (Опционально) Светодиодная подсветка для съёмки в темноте.
Подготовка среды разработки
Мы будем использовать PlatformIO — мощное расширение для VS Code. Если вы новичок в работе с ESP32, рекомендую сначала ознакомиться с нашей статьей ESP32 для начинающих: первый проект за 30 минут.
- Установите VS Code и расширение PlatformIO IDE.
- Создайте новый проект:
- Назовите его, например,
esp32-cam-face-recognition. - Выберите платформу Espressif ESP32.
- В качестве фреймворка выберите Arduino.
- Дождитесь завершения инициализации проекта.
- Назовите его, например,
Схема подключения
Внимание! Это самый критичный этап. Неправильное подключение может сжечь плату.
Подключите ESP32-CAM к программатору (FTDI) по следующей схеме:
ESP32-CAM -> FTDI Программатор
===================================
GND -> GND
5V/VCC -> 5V (НЕ 3.3V!)
U0R/RXD -> TX
U0T/TXD -> RX
GPIO 0 -> GND (ТОЛЬКО на время прошивки!)
Важные нюансы: * GPIO 0 должен быть подключен к GND только в момент прошивки. После успешной загрузки кода отсоедините этот провод, иначе модуль не запустится в нормальном режиме. * Питание 5V важно, потому что OV2640-камера требует именно такого напряжения. Подача 3.3V может привести к нестабильной работе или её отсутствию. * Для стабильной работы после прошивки рекомендуется использовать отдельный источник питания 5В с током не менее 1А, подключенный к пинам 5V и GND на ESP32-CAM.
Прошивка базового примера «Камера»
Давайте сначала убедимся, что железо работает, и зальём простейший скетч для видеопотока.
- В окне PlatformIO откройте файл
src/main.cppи полностью замените его содержимое на код из примера «CameraWebServer».- В левой панели PlatformIO нажмите PIO Home -> Projects -> Your Project -> Open.
- Перейдите в «Examples», найдите «esp32-camera» -> «CameraWebServer» и откройте файл
app_main.cpp. - Скопируйте его код в ваш
src/main.cpp.
-
Критический шаг: Нам нужно отредактировать файл конфигурации платформы. Откройте файл
platformio.iniв корне проекта и приведите его к следующему виду:```ini [env:esp32cam] platform = espressif32 board = esp32cam framework = arduino monitor_speed = 115200 upload_speed = 115200
; Важно: Указываем правильную модель камеры build_flags = -DBOARD_ESP32CAM_AITHINKER -DCAMERA_MODEL_AI_THINKER ```
Комментарий
;в INI-файлах — это аналог//в C++. -
В файле
main.cppнайдите строки с определением модели камеры (около 30-й строки) и раскомментируйте строчку для нашей платы:```cpp // Выбираем модель платы. Раскомментируйте только одну строку! // #define CAMERA_MODEL_WROVER_KIT // #define CAMERA_MODEL_ESP_EYE // #define CAMERA_MODEL_M5STACK_PSRAM // #define CAMERA_MODEL_M5STACK_WIDE
define CAMERA_MODEL_AI_THINKER // <--- ДОЛЖНА БЫТЬ РАСКОММЕНТИРОВАНА ТОЛЬКО ЭТА СТРОКА
```
-
Настройте параметры Wi-Fi. Найдите в коде секцию с константами и введите данные вашей сети:
cpp const char* ssid = "ВАШ_SSID_WIFI"; const char* password = "ВАШ_ПАРОЛЬ_WIFI"; -
Прошиваем!
- Убедитесь, что GPIO 0 подключен к GND.
- В VS Code нажмите на значок стрелки внизу панели PlatformIO (Upload).
- Дождитесь завершения процесса. В конце вы должны увидеть надпись
SUCCESS. - Отключите провод с GPIO 0 от GND.
- Нажмите кнопку Reset (RST) на плате ESP32-CAM или просто переподключите питание.
Проверка результата: Первый видеопоток
Откройте Монитор порта в PlatformIO (значок с розеткой). После загрузки вы увидите логи. Самый важный для нас — IP-адрес, который микроконтроллер получил в вашей сети. Выглядит это так:
...
WiFi connected
Camera Ready! Use 'http://192.168.1.100' to connect
- Скопируйте этот IP-адрес и вставьте в адресную строку браузера на любом устройстве в той же сети Wi-Fi.
- Откроется веб-интерфейс камеры. Выберите желаемое разрешение (например,
UXGA (1600x1200)) и нажмите «Start Stream». - Поздравляю! Вы только что запустили свою собственную беспроводную камеру. Теперь давайте научим её распознавать лица.
Добавляем распознавание лиц
Мы будем использовать встроенный в ESP32 алгоритм распознавания, который, хоть и базовый, отлично работает для демонстрации и простых задач.
- Создайте новый проект в PlatformIO (или скопируйте файлы из старого).
-
Нам понадобятся дополнительные библиотеки. Откройте файл
platformio.iniи добавьте зависимость:```ini [env:esp32cam] platform = espressif32 board = esp32cam framework = arduino monitor_speed = 115200 upload_speed = 115200
build_flags = -DBOARD_ESP32CAM_AITHINKER -DCAMERA_MODEL_AI_THINKER
; Подключаем библиотеку для работы с камерой и Face Recognition lib_deps = espressif/esp32-camera@^2.0.10 https://github.com/espressif/esp-face.git ```
Сохраните файл. PlatformIO автоматически скачает указанные библиотеки.
-
Замените содержимое
src/main.cppна более сложный скетч, который включает детектирование лиц. Полный код довольно объёмный, но его суть в следующем:- Инициализация камеры и Wi-Fi (как в предыдущем примере).
- Настройка детектора лиц (
face_detect). - В основном цикле: захват кадра, его преобразование в градации серого (для скорости), запуск детектора.
- Если лицо найдено, функция вернёт координаты прямоугольника вокруг него.
- Веб-сервер будет накладывать этот прямоугольник поверх видеопотока.
Готовый скетч с комментариями вы можете найти в официальном репозитории примеров ESP-Face. Ищите пример
web_camera. Скопируйте его код, не забудьте снова указать модель камеры (AI_THINKER) и данные Wi-Fi. -
Прошейте обновлённый код на ESP32-CAM, соблюдая ту же процедуру с GPIO 0.
Тестирование функции распознавания
После перепрошивки и перезагрузки снова откройте веб-интерфейс по IP-адресу.
- Теперь в интерфейсе должна появиться дополнительная кнопка или настройка, например, «Enable Face Detection».
- Включите её и направьте камеру на себя.
- Если всё настроено верно, вокруг вашего лица в реальном времени появится зелёный или синий прямоугольник.
- Поэкспериментируйте с освещением и расстоянием до камеры. Алгоритм работает лучше при хорошем свете и когда лицо занимает значительную часть кадра.
Интеграция с умным домом (Home Assistant)
Самое интересное начинается, когда мы подключаем нашу умную камеру к экосистеме. ESP32-CAM может не только показывать картинку, но и отправлять события.
- Как MQTT-клиент: Напишите скетч, который при обнаружении лица будет публиковать сообщение в MQTT-брокер (например,
home/esp32cam/face_detected). Home Assistant легко ловит такие сообщения и может запустить автоматизацию: записать видео, включить свет, отправить push-уведомление. - Через HTTP-запросы: При обнаружении объекта ESP32 может отправить POST-запрос на веб-хук в Home Assistant.
- Используя ESPHome: Если не хотите писать код, обратите внимание на проект ESPHome: прошиваем ESP32 без единой строки кода. С его помощью можно настроить многие функции через конфигурационный YAML-файл, хотя поддержка ESP32-CAM там требует дополнительных манипуляций.
Для полноценной интеграции систем умного дома рекомендую нашу статью о Zigbee2MQTT + Home Assistant: Собираем локальную сеть умного дома без облаков.
Типичные проблемы и их решение
- «Camera init failed with error 0xffffffff» — Самая частая ошибка. Причины: неправильная модель камеры в
platformio.iniилиmain.cpp, недостаточное питание (используйте 5В 1А+), бракованная камера. - Нестабильный видеопоток, обрывы — Снизьте разрешение (попробуйте SVGA), убедитесь в хорошем уровне сигнала Wi-Fi. ESP32 и камера создают высокую нагрузку на беспроводной интерфейс.
- Плата не прошивается — В 99% случаев проблема в подключении GPIO 0 к GND во время загрузки. Также проверьте, что выбран правильный COM-порт в PlatformIO и драйверы FTDI установлены.
- Детектор лиц не работает — Убедитесь, что вы подключили библиотеку
esp-faceи используете правильные функции инициализации. Проверьте освещение.
Заключение и идеи для развития
Мы прошли путь от простой платы до умной камеры с локальным распознаванием лиц. ESP32-CAM — это потрясающий инструмент для экспериментов, который открывает двери в мир IoT и компьютерного зрения.
Куда двигаться дальше? 1. Распознавание конкретного лица: Библиотека ESP-Face поддерживает и это. Вы можете «обучить» её, запомнив несколько изображений своего лица, и тогда камера сможет отличать вас от других. 2. Детекция движения: Более простая, но не менее полезная функция для охранных систем. 3. Сервер на Raspberry Pi: Вы можете перенести «мозги» на более мощный одноплатник. ESP32-CAM будет отправлять кадры, а Raspberry Pi — обрабатывать их с помощью OpenCV. О том, как выбрать плату, читайте в нашем гиде Выбор одноплатника в 2024. 4. Физические действия: Подключите реле к ESP32, и при обнаружении лица она сможет открывать электрозамок или включать подсветку.
Творите, экспериментируйте и делитесь своими проектами! Мир DIY-электроники безграничен.
Понравилась статья?
Поставьте лайк и сохраните полезный материал в закладки.
Что можно сделать на LILYGO T-Dongle S3: 10 практических проектов
ESP: как Espressif переписала правила DIY-электроники
ESP32 Web Server: Управляем реле через браузер
ESP32 Deep Sleep: как сделать датчик на батарейках, работающий месяцами
ESP32 Marauder: что это такое, как выбрать плату и где скачать прошивку
ESP32 vs ESP8266: Что выбрать для своего DIY-проекта в 2024 году