Отдельная камера умеет снимать. Отдельная нейросеть умеет классифицировать лист. По отдельности это «железо в коробке» и «модель в ноутбуке». Вместе они дают то, чего не хватает в сезон: ранний звонок, пока болезнь ещё не «пошла» по всей теплице. Раз в несколько часов кадр уходит на Raspberry Pi, модель говорит «похоже на проблему, уверенность 82%», а вам в телефон приходит короткое сообщение — без требования немедленно опрыскать.
Эта статья — про сборку именно такого контура. База уже есть: фотоловушка на ESP32-CAM, готовая модель на Raspberry Pi, при желании — своя модель на фото с фермы. Здесь связываем куски в ежедневный рабочий ритм: куда ставить камеру, как не утонуть в ложных тревогах, сколько это стоит и как вводить систему постепенно. Общий контекст серии — в плане статей и во вводной про нейросети.
Зачем это хозяйству, а не «ради ИИ»
Обойти три теплицы и внимательно посмотреть каждый ряд — это время. Часто пятно замечают, когда оно уже на соседних кустах. Камера в контрольной точке не заменяет обход. Она делает другое: напоминает, что в ряду 3 что-то изменилось относительно «нормы», которую модель видела на обучении.
Аналогия простая. Вы не ставите сторожа у каждой грядки круглосуточно. Но ставите человека, который раз в четыре часа проходит контрольные кусты и кричит, если видит странное. Нейросеть — такой «глазастый помощник» с узкой специальностью: сравнивать лист с тысячами примеров. Решает, что делать с СЗР, по-прежнему человек — по регламенту, по погоде, по своему сорту.
Важно сразу: контур «камера → модель → алерт» не должен сам включать насос опрыскивателя. Слепое опрыскивание по мнению модели — путь к лишним затратам, резистентности и штрафам. Система шепчет. Вы смотрите. Потом действуете.
Кто что делает: роли железа
Путать роли — частая причина разочарований. ESP32-CAM плохо тянет тяжёлую модель «на борту». Raspberry Pi плохо ставить в каждый ряд по цене и питанию. Поэтому делим труд как в бригаде: один снимает, другой думает, третий зовёт хозяина.
| Устройство | Задача | Почему так |
|---|---|---|
| ESP32-CAM | Съёмка JPEG, отправка на Pi | Дёшево, можно несколько точек |
| Raspberry Pi 4 | TFLite / классификация, лог | Модель комфортно «живёт» здесь |
| MQTT или HTTP | Транспорт кадра и статуса | Уже знаком по DIY-стеку |
| Бот (Telegram / VK) | Алерт человеку | Решение остаётся за вами |
Транспорт сообщений между устройствами у нас уже разобран в статье про MQTT-хаб. Для больших фото часто удобнее HTTP-загрузка файла, а по MQTT слать только статус: «CAM-3 сняла, размер 180 КБ, ожидает разбора».
Рабочий день системы: от кадра до «посмотри ряд»
Представьте один спокойный цикл — без магии, по шагам.
- По таймеру (например, в 7:00, 11:00, 15:00, 19:00) ESP32-CAM делает снимок контрольного листа или куста.
- Кадр уходит на Raspberry Pi:
POST /ingestс полемcam_idи файлом JPEG. Либо камера кладёт файл на сетевую папку, а Pi забирает его скриптом. - Pi сохраняет снимок в папку дня, запускает модель (TFLite), получает класс и уверенность: например
late_blight 0.87илиhealthy 0.94. - Результат пишется в CSV/SQLite: время, камера, класс, вероятность, путь к файлу.
- Если класс не «здоровый» и вероятность выше порога (скажем, 0.75) — бот шлёт: «Теплица 2, CAM-3: похоже на фитофтору, 87%. Фото в логе».
- Вы утром открываете ряд, смотрите глазами. Если ложная тревога — жмёте в боте «ложное» (или просто кладёте фото в папку
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 кадров в сутки. Каждые пять минут — гора мусора и износ карты памяти.
Если у вас уже стоят датчики и влажность почвы, полезно вешать камеру рядом с контрольной зоной полива: потом проще сопоставлять «странный лист» и «странный график влажности».
Ложные тревоги: нормальный этап, не провал
В первые недели система будет иногда «кричать» зря. Это ожидаемо — как новый сторож, который пугается каждой тени. Ваша задача не выключить всё в гневе, а научить контур вашим условиям.
Типичные причины ложных алертов:
- ожог от солнца, который модель путает с пятнистостью;
- капля конденсата и блик;
- тень руки или лейки в кадре;
- другой сорт / другая фаза листа, чем в обучающей выборке;
- ночные тёмные кадры без нормальной подсветки.
Как снизить шум без потери пользы:
- Порог уверенности. Начните с 0.80–0.85. Лучше пропустить сомнительное, чем получать десять сообщений в день.
- Антиспам. Не слать повтор того же класса с той же камеры чаще, чем раз в 6–12 часов.
- Ночной режим. Ночью только логировать; алерты — пачкой утром.
- Кнопка «ложное». Каждое такое фото — золото для дообучения.
- Человек подтверждает осмотр. В боте: «посмотрел, всё ок» / «реально проблема». Через месяц вы увидите, где модель сильна.
Полезный сценарий: система шепчет «CAM-3, похоже на проблему». Вы тратите три минуты на ряд. Если зря — фото в false_positive. Если правда — вы раньше обработали очаг. Через месяц ложных звонков меньше, пропусков тоже меньше.
Сколько это примерно стоит
Грубо, на одну контрольную точку (цены плавают — смотрите актуальные):
- ESP32-CAM + корпус + питание: порядка 1–2,5 тыс. ₽;
- кронштейн / короб / кабель: 0,5–1,5 тыс. ₽;
- Raspberry Pi 4 + карта + БП (если ещё нет «мозга»): 6–10 тыс. ₽ на весь контур, не на каждую камеру;
- время: один выходной на монтаж первой точки, потом быстрее.
Сравните с ценой потерянной партии рассады или недели химии «на всякий случай». Пилот на одной камере часто окупается уже тем, что вы перестаёте ходить «вслепую» по всем рядам одинаково часто и начинаете приоритизировать.
Постепенный запуск: не ставьте десять камер в первый день
Хороший порядок внедрения похож на ввод нового работника:
- Неделя 0. Модель на Pi работает с фото с телефона (как в статье про Pi). Вы понимаете, какие классы она путает на вашей культуре.
- Неделя 1. Одна ESP32-CAM, только съёмка и сохранение файлов — без алертов. Смотрите качество кадров глазами.
- Неделя 2. Включаете классификацию в лог, алерты — себе в тихий чат, порог высокий.
- Неделя 3–4. Правите порог, копите false_positive / true_positive, при необходимости дообучаете.
- Месяц 2. Вторая камера в другой теплице или на другом ярусе. Не раньше, чем первая перестала раздражать.
Параллельно не забывайте «железную» базу: полив и климат должны быть предсказуемыми. Кривой автополив и перегрев из-за вентиляции портят листья так, что любая модель начнёт «болеть» от стресса, а не от патогена. Сначала вентиляция и датчики, потом зрение.
Типичный день хозяина после внедрения
Утро. В телефоне одно-два сообщения, не двадцать. «CAM-1: всё спокойно (healthy 0.91)». «CAM-3: похоже на проблему, 79% — посмотрите ряд». Вы пьёте чай и решаете: идти сразу или после кормления животных. На месте — три минуты осмотра. Если зря — отмечаете ложное. Если правда — фиксируете очаг раньше, чем он стал «полосой».
День. Камеры молчат или только пишут лог. Вы не сидите у экрана: система для того и нужна, чтобы не превратить ферму в call-центр уведомлений.
Вечер. Раз в неделю открываете папку false_positive и true_positive. Пять минут. Если ложных больше половины — поднимаете порог или правите свет/ракурс. Если модель стабильно ловит реальные случаи — можно добавить вторую точку. Так выглядит зрелый ритм: меньше героизма, больше привычки.
Частые ошибки монтажа и софта
- «Поставил и забыл». Объектив за месяц покрывается пыльцой и пылью — растёт доля мусорных кадров.
- Съёмка всего ряда целиком. Модели зрения на старте лучше один лист/куст, а не панорама теплицы.
- Алерты в общий семейный чат. Лучше отдельный тихий канал; иначе через неделю все отключат бота.
- Порог 0.5 «чтобы ничего не пропустить». Получите спам и потеряете доверие к инструменту.
- Хранение только последних суток. Без истории не разберёте, когда началось, и не дообучите модель.
- Питание от слабого USB-хаба. Просадки = тёмные кадры = ложные классы. Отдельный нормальный БП окупается нервами.
Если камера «живет» на улице у входа в теплицу, добавьте защиту от дождя и прямого солнца так же серьёзно, как для фотоловушки вредителей: иначе электроника и картинка деградируют быстрее, чем вы успеете привыкнуть к алертам.
Когда контур уже «созрел»
Признаки, что можно масштабировать:
- Вы реально реагируете на алерты, а не смахиваете их.
- Доля ложных за неделю ниже комфортного для вас порога (например, меньше трети).
- В логе есть и true_positive — то есть система хоть раз помогла поймать проблему раньше обычного обхода.
- Питание и Wi‑Fi стабильны две недели без «пропала камера».
Только тогда имеет смысл третья камера или связка «класс с камеры → вопрос текстовому консультанту». Иначе вы масштабируете шум.
Связка с остальной серией
Камера + модель — это «глаза». Дальше по плану:
- текстовый слой — LLM как агроконсультант: «вот симптомы и класс модели, что проверить первым»;
- гибрид с облаком — мост датчики ↔ LLM, без утечки сырых фото каждый час;
- несколько помощников под общим управлением — мини-агенты на MQTT.
Про типы сетей (почему здесь CNN, а не «чат») — в статье про CNN / RNN / LLM. Короткая версия этой же темы как черновик контура — рядом в серии под slug нейросеть + ESP32-CAM.
Главное
Контур «ESP32-CAM → Raspberry Pi → алерт» — это не автоматический агроном и не кнопка «опрыскать». Это способ вовремя сказать: «посмотри вот этот ряд». Польза появляется, когда вы реально выходите после сообщения, честно помечаете ложные срабатывания и не даёте модели права на химию без человека. Начните с одной камеры, высокого порога и хорошего монтажа. Остальное — донастройка, как у любого инструмента в сарае: сначала привыкнуть, потом масштабировать.





