Мониторинг IP-камер по RTSP с детекцией объектов (YOLOv8) и отправкой уведомлений в Telegram. Без облачных зависимостей.
Веса модели (cfg/yolov8n.onnx, ~13 МБ) уже в репозитории — скачивать отдельно не нужно.
# 1. Клонируйте репозиторий
git clone https://github.com/vladios13/RTSPcamTG.git
cd RTSPcamTG
# 2. Заполните конфиг
cp config.json.example config.json
# Откройте config.json и укажите tg_token, tg_chat и RTSP-потоки
# 3. Создайте директории для хранения детекций
mkdir -p output alarm
# 4. Запустите
docker compose build && docker compose up -dЗоны детекции настраиваются через Web UI: http://127.0.0.1:8000/config
Отредактируйте config.json перед запуском:
{
"tg_token": "123456:ABC-DEF...",
"tg_chat": -100123456789,
"stream_startup_delay_s": 2,
"streams": [
{
"label": "front_door",
"url": "rtsp://user:pass@192.168.1.10/stream",
"detect_in_polygon": [[100,200],[400,200],[400,500],[100,500]],
"ignore": []
}
]
}detect_in_polygon — список точек (x, y). Редактор полигонов доступен в Web UI (/config).
Bootstrap 5.3.3, без jQuery, адаптивный. Шрифт Manrope, светлая тема, индиго акцент. Снапшоты камер обновляются каждые 2 секунды через onload-цепочку — без накопления очереди запросов к серверу.
| Путь (порт 8000) | Описание |
|---|---|
/ |
Сетка live-снапшотов всех камер |
/config |
Настройка потоков, Telegram, polygon-зон |
/video/<tag> |
Live-просмотр одной камеры |
/movement |
Лента событий: последние 50 кадров из alarm/, фильтр по камере, пагинация |
/api/stats, /api/movement, /api/alarms |
JSON API |
- Система получает видео с камер по RTSP и анализирует каждый кадр через YOLOv8n (инференс через ONNX +
cv2.dnn). - Если в заданной зоне обнаружен человек (или другой отслеживаемый объект) — отправляется фото в Telegram с подписью: камера, время, что обнаружено.
- Одно и то же срабатывание не дублируется: повторные уведомления об одном объекте в той же точке подавляются на 5 минут.
- При обрыве соединения с камерой система автоматически переподключается с нарастающим интервалом: 5→10→20→40→60 сек.
- Данные сохраняются на диск: кропы объектов в
output/и полные кадры тревог вalarm/.
Telegram-команды: /ustop — пауза детекции, /ustart — возобновить.
Если нужно обновить или сменить веса — scripts/export_yolov8.py экспортирует yolov8n.pt в ONNX:
python -m venv /tmp/yolo-export && . /tmp/yolo-export/bin/activate
pip install ultralytics onnx onnxslim
python scripts/export_yolov8.py # → cfg/yolov8n.onnx- Python 3.8
- OpenCV 4.9.0
- YOLOv8n (ONNX, ~13 МБ, в комплекте, скачивать отдельно не нужно)
- aiogram 3.7.0
- Sanic 19.12.5
- Shapely, Jinja2
- Docker / docker-compose (лимит CPU контейнера: 0.4)
Основано на Nalorokk/ultracam, развивается независимо.