Skip to content

Repository files navigation

DotEye

Python 3.12 Platform Category 11179 lines of code

DotEye

security audit passed - full, leaks + code audit date

DotEye - Telegram-бот для локальной обработки видеопотока: он фиксирует появление и исчезновение людей, сохраняет события и отправляет уведомления администраторам. Камера, детектор и хранилище работают на одной машине; при необходимости инференс можно вынести на отдельный сервер.

Что внутри

  • 2 режима обработки: presence фиксирует присутствие людей, identity сопоставляет лицо с локальными эталонами.
  • До 4 камер: вебка, RTSP или MJPEG; для каждого источника доступны имя, зона кадра и настройки уведомлений.
  • 4 варианта детектора: auto, YOLO, YuNet и motion; auto использует доступный вариант по цепочке деградации.
  • 5 YOLO-моделей: от yolov8n.pt до yolov8x.pt, выбираются из панели или командой /model.
  • Долговечная доставка: события и очередь отправки хранятся в SQLite WAL; JPEG и embeddings шифруются AES-256-GCM.

Запуск

python -m venv .venv
.venv\Scripts\activate            # Windows
pip install -r requirements.txt

cp .env.example .env                # укажи DOTEYE_BOT_TOKEN и DOTEYE_ADMIN_IDS
python -m doteye.crypto             # сгенерировать DOTEYE_CRYPTO_KEY
python -m doteye.main

Пустой DOTEYE_ADMIN_IDS не даёт доступ никому. Открытый доступ разрешён только для локальной отладки при DOTEYE_ENV=development и DOTEYE_ALLOW_OPEN_ACCESS=1.

Команды

Действие Команда
Открыть панель и посмотреть состояние /panel, /status
Выбрать режим, камеру и детектор /mode, /camera, /detector
Настроить модель и пороги /model, /device, /confidence, /cooldown
Управлять людьми /people, /add, /remove
Открыть события /events, /audit
Управлять голосом и тревогой /say, /alarm, /alarm off
Получить помощь или отменить ввод /help, /cancel

Команды разработки

Действие Команда
Установить зависимости для разработки pip install -r requirements-dev.txt
Запустить тесты python -m pytest tests -q
Проверить компиляцию python -m py_compile doteye/*.py run.py
Бенчмарк детектора python bench.py
Запустить remote-инференс python -m doteye.remote_server --host 127.0.0.1 --port 8099
Собрать и поднять контейнер бота docker compose up -d --build doteye

Полные варианты Docker Compose, systemd, Raspberry Pi и remote-инференса описаны в deploy/README.md.

Стек

Python aiogram 3 Ultralytics YOLO OpenCV NumPy SQLite cryptography pyttsx3 pytest Docker

Отказ от ответственности

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

Пользователь сам отвечает за выбор камеры, доступ к записям и правовое основание обработки изображений. Используйте только собственные камеры либо источники, на работу с которыми у вас есть разрешение; перед включением identity отдельно оцените требования, применимые в вашем случае.

Не публикуйте RTSP, MJPEG и веб-интерфейсы камер в открытой сети. Шифрование кадров и ограничение адресов снижают риски, но не заменяют контроль доступа, безопасную настройку сети и защиту ключей.

Зависимости и модели имеют собственные условия использования. Перед коммерческим или публичным применением проверьте совместимость этих условий с вашим сценарием и получите необходимые разрешения. Этот раздел не является юридической консультацией.

Архитектура

Бот и пайплайн работают в одном процессе. Захват кадров и инференс вынесены из event loop, а озвучка выполняется в отдельном потоке. Событие сначала записывается в SQLite outbox, затем отправляется в Telegram.

doteye/
├── main.py          точка входа: собирает пайплайн, бота и outbox
├── bot.py           aiogram 3: команды, панель, FSM и уведомления
├── camera.py        вебка, RTSP и MJPEG; reader-поток и reconnect backoff
├── detector.py      yolo | yunet | motion; remote и локальный fallback
├── recognizer.py    embeddings лиц через InsightFace или DummyRecognizer
├── pipeline.py      кадр -> трек -> событие; параллельный инференс и prune
├── storage.py       SQLite WAL: люди, embeddings, события, настройки, outbox
├── remote.py        ограниченный HTTP transport, AES-GCM и HMAC
├── voice.py         тревога, TTS и сирена в отдельном потоке
└── config.py        настройки окружения и allowlist сетевых адресов
камера -> reader -> детектор -> зоны -> IoU-трекер -> событие
                                                    ├-> SQLite outbox -> Telegram
                                                    └-> voice -> сирена / TTS
  • Настройки складываются из окружения и переопределений из чата; для камеры доступны отдельные значения.
  • При DOTEYE_CAMERA_PARALLEL=1 у каждой камеры свой детектор и воркер; сбой одного источника не останавливает остальные.
  • В режиме identity кроп человека преобразуется в embedding и сопоставляется с локальными эталонами.
  • Сетевые URL проходят allowlist, а remote-сервер не принимает plain HTTP вне loopback без development-режима.
  • Повторная отправка из outbox не теряет событие при временной ошибке Telegram.

Лицензия

© 2026 .ядро. Все права защищены.

Проприетарный код. Использование, копирование, изменение и распространение запрещены без письменного разрешения автора. Исходный код открыт только для ознакомления. См. LICENSE.

About

охранная система, прямо в telegram

Resources

Stars

2 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages