Своими рукамипрактическая инструкция

Нейросеть + ESP32-CAM: автоматический контроль здоровья растений

Редакция Фермозавра·25 июля 2026 г.·9 мин чтения

Камера в ряду снимает листья по расписанию, Raspberry Pi гоняет TFLite-модель, бот шепчет: «посмотри ряд три». Собираем рабочий контур «ESP32-CAM + нейросеть» без облака и без слепого опрыскивания.

Нейросеть + ESP32-CAM: автоматический контроль здоровья растений

Отдельная камера умеет снимать. Отдельная нейросеть умеет классифицировать лист. По отдельности это «железо в коробке» и «модель в ноутбуке». Вместе они дают то, чего не хватает в сезон: ранний звонок, пока болезнь ещё не «пошла» по всей теплице. Раз в несколько часов кадр уходит на Raspberry Pi, модель говорит «похоже на проблему, уверенность 82%», а вам в телефон приходит короткое сообщение — без требования немедленно опрыскать.

Эта статья — про сборку именно такого контура. База уже есть: фотоловушка на ESP32-CAM, готовая модель на Raspberry Pi, при желании — своя модель на фото с фермы. Здесь связываем куски в ежедневный рабочий ритм: куда ставить камеру, как не утонуть в ложных тревогах, сколько это стоит и как вводить систему постепенно. Общий контекст серии — в плане статей и во вводной про нейросети.

Зачем это хозяйству, а не «ради ИИ»

Обойти три теплицы и внимательно посмотреть каждый ряд — это время. Часто пятно замечают, когда оно уже на соседних кустах. Камера в контрольной точке не заменяет обход. Она делает другое: напоминает, что в ряду 3 что-то изменилось относительно «нормы», которую модель видела на обучении.

Аналогия простая. Вы не ставите сторожа у каждой грядки круглосуточно. Но ставите человека, который раз в четыре часа проходит контрольные кусты и кричит, если видит странное. Нейросеть — такой «глазастый помощник» с узкой специальностью: сравнивать лист с тысячами примеров. Решает, что делать с СЗР, по-прежнему человек — по регламенту, по погоде, по своему сорту.

Важно сразу: контур «камера → модель → алерт» не должен сам включать насос опрыскивателя. Слепое опрыскивание по мнению модели — путь к лишним затратам, резистентности и штрафам. Система шепчет. Вы смотрите. Потом действуете.

Кто что делает: роли железа

Путать роли — частая причина разочарований. ESP32-CAM плохо тянет тяжёлую модель «на борту». Raspberry Pi плохо ставить в каждый ряд по цене и питанию. Поэтому делим труд как в бригаде: один снимает, другой думает, третий зовёт хозяина.

УстройствоЗадачаПочему так
ESP32-CAMСъёмка JPEG, отправка на PiДёшево, можно несколько точек
Raspberry Pi 4TFLite / классификация, логМодель комфортно «живёт» здесь
MQTT или HTTPТранспорт кадра и статусаУже знаком по DIY-стеку
Бот (Telegram / VK)Алерт человекуРешение остаётся за вами

Транспорт сообщений между устройствами у нас уже разобран в статье про MQTT-хаб. Для больших фото часто удобнее HTTP-загрузка файла, а по MQTT слать только статус: «CAM-3 сняла, размер 180 КБ, ожидает разбора».

Рабочий день системы: от кадра до «посмотри ряд»

Представьте один спокойный цикл — без магии, по шагам.

  1. По таймеру (например, в 7:00, 11:00, 15:00, 19:00) ESP32-CAM делает снимок контрольного листа или куста.
  2. Кадр уходит на Raspberry Pi: POST /ingest с полем cam_id и файлом JPEG. Либо камера кладёт файл на сетевую папку, а Pi забирает его скриптом.
  3. Pi сохраняет снимок в папку дня, запускает модель (TFLite), получает класс и уверенность: например late_blight 0.87 или healthy 0.94.
  4. Результат пишется в CSV/SQLite: время, камера, класс, вероятность, путь к файлу.
  5. Если класс не «здоровый» и вероятность выше порога (скажем, 0.75) — бот шлёт: «Теплица 2, CAM-3: похоже на фитофтору, 87%. Фото в логе».
  6. Вы утром открываете ряд, смотрите глазами. Если ложная тревога — жмёте в боте «ложное» (или просто кладёте фото в папку false_positive для будущего дообучения).
# идея мини-API на Pi (FastAPI / Flask)
@app.post("/ingest")
def ingest(cam_id: str, file: UploadFile):
    path = save(file, cam_id)
    label, prob = predict(path)  # TFLite
    log(cam_id, label, prob, path)
    if label != "healthy" and prob >= 0.75:
        if not recently_alerted(cam_id, label, hours=6):
            notify(f"{cam_id}: {label} {prob:.0%}")
    return {"label": label, "prob": prob}

Это не «диагноз врача». Это очередь на осмотр, отсортированная по подозрительности. Как в метеостанции: датчик сказал «риск заморозка» — вы решаете, укрывать или нет.

Как ставить камеру, чтобы модель не врала зря

Модель учится на том, что видит. Если сегодня лист в кадре, а завтра — только земля и шланг, она будет «болеть» от смены сцены. Поэтому монтаж важнее выбора «самой умной» сети.

  • Фиксированный ракурс. Один контрольный куст или один ярус листьев. Закрепите кронштейн так, чтобы его не сбивали лейкой и шлангом.
  • Дистанция 20–40 см до листа (ориентир; подстройте под объектив). Слишком далеко — мелочь болезни не видна. Слишком близко — дрожь и конденсат.
  • Свет. Избегайте прямого солнца в объектив утром. Лёгкий рассеиватель или ориентация на северную сторону ряда часто спасают от бликов.
  • Конденсат и пыль. Короб с вентиляцией, антизапотевание, периодическая протирка. Грязный объектив даёт «болезнь» чаще, чем настоящая мучнистая роса.
  • Питание. Стабильный 5 В, запас по току. Просадки при вспышке LED дают тёмные кадры и ложные классы.
  • Не чаще, чем нужно. Для старта хватает 4–6 кадров в сутки. Каждые пять минут — гора мусора и износ карты памяти.

Если у вас уже стоят датчики и влажность почвы, полезно вешать камеру рядом с контрольной зоной полива: потом проще сопоставлять «странный лист» и «странный график влажности».

Ложные тревоги: нормальный этап, не провал

В первые недели система будет иногда «кричать» зря. Это ожидаемо — как новый сторож, который пугается каждой тени. Ваша задача не выключить всё в гневе, а научить контур вашим условиям.

Типичные причины ложных алертов:

  • ожог от солнца, который модель путает с пятнистостью;
  • капля конденсата и блик;
  • тень руки или лейки в кадре;
  • другой сорт / другая фаза листа, чем в обучающей выборке;
  • ночные тёмные кадры без нормальной подсветки.

Как снизить шум без потери пользы:

  1. Порог уверенности. Начните с 0.80–0.85. Лучше пропустить сомнительное, чем получать десять сообщений в день.
  2. Антиспам. Не слать повтор того же класса с той же камеры чаще, чем раз в 6–12 часов.
  3. Ночной режим. Ночью только логировать; алерты — пачкой утром.
  4. Кнопка «ложное». Каждое такое фото — золото для дообучения.
  5. Человек подтверждает осмотр. В боте: «посмотрел, всё ок» / «реально проблема». Через месяц вы увидите, где модель сильна.

Полезный сценарий: система шепчет «CAM-3, похоже на проблему». Вы тратите три минуты на ряд. Если зря — фото в false_positive. Если правда — вы раньше обработали очаг. Через месяц ложных звонков меньше, пропусков тоже меньше.

Сколько это примерно стоит

Грубо, на одну контрольную точку (цены плавают — смотрите актуальные):

  • ESP32-CAM + корпус + питание: порядка 1–2,5 тыс. ₽;
  • кронштейн / короб / кабель: 0,5–1,5 тыс. ₽;
  • Raspberry Pi 4 + карта + БП (если ещё нет «мозга»): 6–10 тыс. ₽ на весь контур, не на каждую камеру;
  • время: один выходной на монтаж первой точки, потом быстрее.

Сравните с ценой потерянной партии рассады или недели химии «на всякий случай». Пилот на одной камере часто окупается уже тем, что вы перестаёте ходить «вслепую» по всем рядам одинаково часто и начинаете приоритизировать.

Постепенный запуск: не ставьте десять камер в первый день

Хороший порядок внедрения похож на ввод нового работника:

  1. Неделя 0. Модель на Pi работает с фото с телефона (как в статье про Pi). Вы понимаете, какие классы она путает на вашей культуре.
  2. Неделя 1. Одна ESP32-CAM, только съёмка и сохранение файлов — без алертов. Смотрите качество кадров глазами.
  3. Неделя 2. Включаете классификацию в лог, алерты — себе в тихий чат, порог высокий.
  4. Неделя 3–4. Правите порог, копите false_positive / true_positive, при необходимости дообучаете.
  5. Месяц 2. Вторая камера в другой теплице или на другом ярусе. Не раньше, чем первая перестала раздражать.

Параллельно не забывайте «железную» базу: полив и климат должны быть предсказуемыми. Кривой автополив и перегрев из-за вентиляции портят листья так, что любая модель начнёт «болеть» от стресса, а не от патогена. Сначала вентиляция и датчики, потом зрение.

Типичный день хозяина после внедрения

Утро. В телефоне одно-два сообщения, не двадцать. «CAM-1: всё спокойно (healthy 0.91)». «CAM-3: похоже на проблему, 79% — посмотрите ряд». Вы пьёте чай и решаете: идти сразу или после кормления животных. На месте — три минуты осмотра. Если зря — отмечаете ложное. Если правда — фиксируете очаг раньше, чем он стал «полосой».

День. Камеры молчат или только пишут лог. Вы не сидите у экрана: система для того и нужна, чтобы не превратить ферму в call-центр уведомлений.

Вечер. Раз в неделю открываете папку false_positive и true_positive. Пять минут. Если ложных больше половины — поднимаете порог или правите свет/ракурс. Если модель стабильно ловит реальные случаи — можно добавить вторую точку. Так выглядит зрелый ритм: меньше героизма, больше привычки.

Частые ошибки монтажа и софта

  • «Поставил и забыл». Объектив за месяц покрывается пыльцой и пылью — растёт доля мусорных кадров.
  • Съёмка всего ряда целиком. Модели зрения на старте лучше один лист/куст, а не панорама теплицы.
  • Алерты в общий семейный чат. Лучше отдельный тихий канал; иначе через неделю все отключат бота.
  • Порог 0.5 «чтобы ничего не пропустить». Получите спам и потеряете доверие к инструменту.
  • Хранение только последних суток. Без истории не разберёте, когда началось, и не дообучите модель.
  • Питание от слабого USB-хаба. Просадки = тёмные кадры = ложные классы. Отдельный нормальный БП окупается нервами.

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

Когда контур уже «созрел»

Признаки, что можно масштабировать:

  1. Вы реально реагируете на алерты, а не смахиваете их.
  2. Доля ложных за неделю ниже комфортного для вас порога (например, меньше трети).
  3. В логе есть и true_positive — то есть система хоть раз помогла поймать проблему раньше обычного обхода.
  4. Питание и Wi‑Fi стабильны две недели без «пропала камера».

Только тогда имеет смысл третья камера или связка «класс с камеры → вопрос текстовому консультанту». Иначе вы масштабируете шум.

Связка с остальной серией

Камера + модель — это «глаза». Дальше по плану:

Про типы сетей (почему здесь CNN, а не «чат») — в статье про CNN / RNN / LLM. Короткая версия этой же темы как черновик контура — рядом в серии под slug нейросеть + ESP32-CAM.

Главное

Контур «ESP32-CAM → Raspberry Pi → алерт» — это не автоматический агроном и не кнопка «опрыскать». Это способ вовремя сказать: «посмотри вот этот ряд». Польза появляется, когда вы реально выходите после сообщения, честно помечаете ложные срабатывания и не даёте модели права на химию без человека. Начните с одной камеры, высокого порога и хорошего монтажа. Остальное — донастройка, как у любого инструмента в сарае: сначала привыкнуть, потом масштабировать.

💬 Комментарии

Чтобы оставить комментарий, войдите или зарегистрируйтесь

Загрузка комментариев...

Похожие статьи