Зачем вообще делать своё видеонаблюдение?

Коммерческие камеры типа Nest, Ring или Tapo — это удобно ровно до того момента, пока вы не задумываетесь, куда уходят ваши видеозаписи. Облачные подписки стоят денег, данные хранятся на серверах вендора, а качество детекции движения нередко разочаровывает. Дешёвые камеры вроде Tapo используют примитивный frame-diffing, который срабатывает на тени и листья, а при снижении чувствительности перестаёт замечать человека в двух метрах от объектива.

Именно в этот пробел метит CheapSecurity — открытый проект с Hacker News, который предлагает взять старый одноплатник, дешёвую USB-камеру и получить полноценную систему наблюдения, где все данные остаются у вас дома.

ℹ Что такое SBC?
SBC (Single-Board Computer) — одноплатный компьютер: Raspberry Pi, Orange Pi, Odroid и подобные. Стоят от $15 до $80, потребляют 3–10 Вт и прекрасно работают 24/7.

Что такое CheapSecurity и в чём его философия

CheapSecurity — это лёгкая self-hosted CCTV-система, созданная специально для Linux-одноплатников и стандартных USB-камер, предлагающая доступную и privacy-ориентированную альтернативу коммерческим решениям.

Проект строится на трёх принципах:

  • Privacy-First. Все записи хранятся локально — никаких облачных подписок, ваши видео никогда не покидают домашнюю сеть.
  • Cost-Effective. Используй то, что уже есть: старый Linux-одноплатник и USB-камера — и у тебя готовая система наблюдения без ежемесячных платежей.
  • Minimalist Architecture. ПО оптимизировано для работы на маломощных устройствах и показывает высокую производительность даже на бюджетном железе.

«Полный контроль над путями хранения, политиками хранения и методами доступа» — именно это отличает self-hosted от любого облачного сервиса.


Архитектура проекта изнутри

CheapSecurity написан на Python и использует Flask в качестве веб-сервера. Структура проекта включает модуль cctv.py для детекции движения, записи и Telegram-уведомлений, web.py для Flask-дашборда и API, wsgi.py как точку входа для продакшн-деплоя через Gunicorn, а также diagnose.py для диагностики и устранения проблем.


graph TD
    A[USB-камера] --> B[cctv.py: детекция движения]
    B --> C{Движение?}
    C -- Да --> D[Запись видео в recordings/]
    C -- Да --> E[Telegram-уведомление]
    C -- Нет --> B
    D --> F[web.py: Flask-дашборд]
    F --> G[Браузер пользователя]
    F --> H[Gunicorn / WSGI]

Совместимость с железом

Проект аппаратно-независим и совместим с широким спектром стандартных USB-камер, а также оптимизирован специально для Linux-одноплатников: Raspberry Pi, Orange Pi и аналогичных SBC.

Для установки OpenCV предлагается два пути:

На ARM-платах (например, Odroid XU4) рекомендуется использовать системный пакет OpenCV, оптимизированный под конкретную платформу. На x86/amd64 или при отсутствии готового пакета — установка через pip с вариантом opencv-python-headless, так как GUI не нужен.

Деплой через systemd

Запуск в продакшне реализован через systemd-сервис — это позволяет CheapSecurity автоматически стартовать при включении устройства и перезапускаться при сбоях:

# Копируем юнит-файл
sudo cp cheapsecurity.service /etc/systemd/system/cheapsecurity@.service

# Перезагружаем демон и включаем автостарт
sudo systemctl daemon-reload
sudo systemctl enable --now cheapsecurity@$(whoami).service
⚠ Важно для безопасности
Не выставляйте Flask development server напрямую в интернет. Используйте Gunicorn за встроенной авторизацией или доверенным reverse proxy.

Установка: шаг за шагом

Ниже — типовой процесс развёртывания CheapSecurity на Raspberry Pi или любом другом Linux SBC.

1. Подготовка системы

# Обновляем пакеты
sudo apt update && sudo apt upgrade -y

# Устанавливаем зависимости
sudo apt install python3-pip python3-venv git -y

# На ARM-платах — системный OpenCV (рекомендуется)
sudo apt install python3-opencv -y

2. Клонирование и установка

git clone https://github.com/gmrandazzo/CheapSecurity.git
cd CheapSecurity

# Создаём виртуальное окружение
python3 -m venv .venv
source .venv/bin/activate

# Устанавливаем пакет
pip install -e .

3. Конфигурация

# Копируем пример конфига
cp config.json.example config.json

# Редактируем под себя
nano config.json

В config.json задаются: путь к камере, директория для записей, параметры детекции движения, токен Telegram-бота и другие настройки.

💡 Диагностика
Если камера не определяется или движение не фиксируется — запустите diagnose.py. Попробуйте уменьшить параметр motion.min_area, если движение не обнаруживается.

4. Запуск

# Режим разработки
python src/cheapsecurity/app.py

# Продакшн через Gunicorn
gunicorn --bind 0.0.0.0:8080 cheapsecurity.wsgi:app

После запуска веб-интерфейс доступен по адресу http://<IP-платы>:8080.


CheapSecurity vs альтернативы: честное сравнение

На рынке open-source CCTV решений достаточно. Посмотрим, где CheapSecurity выигрывает, а где уступает:

КритерийCheapSecuritymotionEyeShinobiFrigate NVR
Язык/стекPython + FlaskPythonNode.jsPython + Docker
Минимальные ресурсы✅ Очень низкие✅ Низкие⚠️ Средние⚠️ Средние
AI-детекция объектов❌ Нет❌ Нет❌ Нет✅ Да (TF/OpenCV)
Telegram-уведомления✅ Встроено⚠️ Плагин⚠️ Плагин❌ Внешний
Docker❌ Нет✅ Да✅ Да✅ Да
ЛицензияGNU AGPLv3GPLv3Open SourceMIT
Поддержка USB-камер✅ Нативно✅ Нативно✅ Да⚠️ Ограниченно
Сложность установки🟢 Низкая🟢 Низкая🟡 Средняя🔴 Высокая

motionEyeOS — Linux-дистрибутив, превращающий SBC в систему видеонаблюдения; работает на Raspberry Pi, Orange Pi и других одноплатниках. Это сильный конкурент, но он требует отдельного образа ОС.

Frigate NVR предлагает локальный AI-детектор объектов на базе OpenCV и TensorFlow для IP-камер, но значительно сложнее в настройке и требует больше ресурсов.

CheapSecurity занимает нишу «поставил и забыл» для тех, кому нужна простая, надёжная система без Docker и тяжёлых зависимостей.

📝 Типовой сценарий использования
Raspberry Pi 4 (4 ГБ) + USB-камера Logitech C270 (~$25) + внешний SSD на 256 ГБ = полноценная система наблюдения с хранением ~2 недель видео при записи по движению. Суммарная стоимость железа: ~$90 против $200+/год на облачные подписки.

Telegram-уведомления и контроль данных

Одна из ключевых фич CheapSecurity — встроенная интеграция с Telegram-ботом прямо в cctv.py. Это значит, что при срабатывании детектора движения вы мгновенно получаете уведомление в мессенджер — без сторонних сервисов и без регистраций.

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

Для настройки Telegram-бота достаточно:

  1. Создать бота через @BotFather в Telegram
  2. Получить token и chat_id
  3. Прописать их в config.json
{
  "telegram": {
    "token": "YOUR_BOT_TOKEN",
    "chat_id": "YOUR_CHAT_ID"
  },
  "motion": {
    "min_area": 500,
    "record": true
  },
  "camera": {
    "device": "/dev/video0"
  },
  "storage": {
    "path": "./recordings"
  }
}

Заключение: когда CheapSecurity — правильный выбор

CheapSecurity — не попытка конкурировать с Frigate или профессиональными NVR-системами. Это честный инструмент для конкретной задачи: быстро развернуть privacy-first видеонаблюдение на том железе, которое уже есть в ящике стола.

Берите CheapSecurity, если:

  • У вас есть Raspberry Pi, Orange Pi или любой другой Linux SBC
  • Вам важна конфиденциальность — никаких данных в облако
  • Нужна простая установка без Docker и сложных зависимостей
  • Telegram-уведомления «из коробки» — must have
  • Бюджет ограничен, а подписки на облако раздражают

Смотрите в сторону Frigate или Viseron, если:

  • Нужна AI-детекция объектов (человек vs. кошка vs. машина)
  • У вас IP-камеры, а не USB
  • Важна интеграция с Home Assistant

Self-hosted CCTV — это не паранойя, это разумная цифровая гигиена. Ваши данные о том, кто и когда приходил домой, не должны лежать на серверах корпораций.

Проект активно развивается, лицензирован под GNU AGPLv3 и доступен на GitHub: github.com/gmrandazzo/CheapSecurity. Если вы уже держите одноплатник включённым — добавить к нему CheapSecurity займёт меньше часа.