Можно ли превратить ESP32-CAM в нейросетевой детектор пчёл? Мои первые эксперименты с Edge Impulse 🔧⚡

Виталик_Электроник
2026-07-28 00:46
Всем привет, коллеги по пайке и прошивке! 🐝 В последнее время я залип на идею автоматизации пасеки — ну, вы знаете, я уже делал умный улей на ESP32 с датчиками температуры и влажности. Но захотелось большего: отслеживать лёт пчёл в реальном времени, чтобы понимать, активен ли рой, не роится ли, и не залетают ли чужаки. И вот тут встал вопрос: а сможет ли обычная ESP32-CAM, с её 2 мегапикселями и хиленьким процессором, тянуть нейросетевой детектор? Пока что я накидал прототип на Edge Impulse — обучил модель на своих же фотках с пасеки (пришлось наколхозить камеру на солнечной батарее и снимать по 10 кадров в минуту). Удивительно, но на ESP32-S3 с 8MB PSRAM моделька с quantized int8 весит всего 180 КБ и выдаёт детекцию за 450 мс! Конечно, это не YOLOv8 на Jetson, но для задачи "пчела есть/пчелы нет" — вполне. Я даже наладил вывод bounding boxes через OLED-дисплей, чтобы видеть, что камера "думает". Главная проблема — это память и скорость. ESP32-CAM классическая (на ESP32) тупо не тянет — фреймбуфер съедает всю PSRAM, и на инференс остаётся 1.2 MB. Пришлось переходить на ESP32-S3 с 16MB PSRAM и делать хитрый pipeline: захват с камеры в JPEG, декодирование в grayscale 96x96, затем — подача в модель. Да, разрешение смешное, но для силуэта пчелы хватает! Ошибка ложного срабатывания — 7% на тестовой выборке. Думаю, если добавить фильтр по размеру объекта (пчела ~20-30 пикселей), можно снизить до 2-3%. Ещё один нюанс — питание. Камера жрёт до 180 мА при вспышке, а детекция гоняет процессор на 240 МГц. Моя солнечная панель на 5W и Li-ion 18650 на 3400 мАч справляются, но если пасмурно три дня — улей "слепнет". Я добавил режим сна: просыпаться раз в 5 минут, делать снимок, детектить, отправлять данные по MQTT на домашний сервер и засыпать. Ток потребления в сне — 8 мкА, что даёт неделю автономки даже без солнца. В планах — повесить вторую камеру на леток, чтобы стерео-детекция считала скорость пчёл и отличала взлетающих от приземляющихся. Но тут уже надо Fusion алгоритм писать, наверное, на C++ с оптимизацией под ESP-NN. Кто-нибудь пробовал делать что-то подобное? Может, есть готовые библиотеки для трекинга объектов на ESP32? Или я зря мучаюсь, и проще взять Raspberry Pi Zero 2W? Спорить готов до хрипоты, но мне нравится именно embedded-хардкор! 🔧⚡ P.S. Если кому интересно — выложу схему разводки платы с разъёмом для камеры и слотом для SD-карты логирования. Там, правда, паразитка на линиях D0-D7 вылезла, пришлось танцевать с бубном и подтягивающими резисторами на 10 кОм. Зато теперь всё стабильно на 40 МГц PCLK!
Игорь_Прагматик
2026-07-28 02:22
Ну давай разберем. Ты, конечно, молодец, что вдумчиво подошел к вопросу — quantized int8 под ESP32-S3 и pipeline с grayscale 96x96 это уже не "наколхозил", а вполне себе инженерная работа. Но как человек, который похоронил не одну модную железку, сразу скажу: 7% ложных срабатываний на тестовой выборке — это ты еще не видел, что будет в полевых условиях, когда солнце в объектив, пыль на линзе и пчела боком пролетает. На практике FPR легко улетит в 15-20%, и OLED с боксами превратится в генератор паники для пчеловода. Фильтр по размеру — штука хорошая, но только если калибровать дистанцию до камеры, иначе пчела вблизи даст тот же размер, что шмель вдали. Тут бы еще motion detection на уровне захвата фрейма добавить, чтобы не гонять модель на пустом фоне — сэкономишь и такты, и батарею. Что касается перехода на Raspberry Pi Zero 2W — это как на стройке вместо перфоратора взять шуруповерт: решит проблему питания и памяти, но потеряешь весь embedded-хардкор и удовольствие от того, что детекция работает на микроконтроллере. Для трекинга на ESP32 советую глянуть библиотеку ESP-DL от самого Espressif — там базовый трекинг по центроидам есть, хоть и без фильтра Калмана. Но если хочешь считать скорость пчёл между двумя камерами, проще сделать это на серверной стороне после MQTT-пуша, иначе на ESP32-S3 ты просто утонешь в таймингах синхронизации стереопары.

Войдите или зарегистрируйтесь, чтобы ответить.