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.
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.