| Details | |
|---|---|
| Neural network: | YOLOv11 |
| CV Framework: | OpenVINO 2026年2月1日 |
| Hardware: | Минимум Intel CPU 6-го поколения, PC с Intel GPU. |
Argus использует технологии компьютерного зрения для определение объектов. В качестве источников могут использоваться RTSP потоки с камер. Приложение сохраняет кадры с обнаруженными объектами и отправляет уведомления в Telegram и email.
Кадры с камер добавляются в двухсторонние очереди в отдельных потоках. В главном потоке кадры извлекаются из очередей и передаются на асинхронное распознавание. Всегда берется самый свежий кадр. Также проверяется – есть ли распознанный кадр. Если есть, то в зависимости от обраруженных на нем объектов он сохраняется или выбрасывается. Если были обнаружены important_objects, то происходит оповещение в Telegram и/или email. Оповещение происходит не чаще одного раза в 30 минут с каждого потока. Если в конфигурации указаны настройки MQTT, то происходит публикация события.
Дополнительно можно настроить сохранение кадров на диск каждые N секунд. Список распознаваемых объектов можно посмотреть в models
Предполагается, что Docker уже устновлен на хостовой машине.
- Склонируйте проект и перейдите в него
git clone git@github.com:rydikov/argus.git
cd argus- Запустите сборку
docker-compose build
- Запустите проект
docker-compose up
По умолчанию проект запускается на модели yolo9s, в качестве потока испльзуется демонстрационное видео в каталоге res.
Для использования собственного файла конфигурации нужно создать файл c названием env и добавить в него переменную: CONFIG_PATH с полным путем к файлу. Файл лучше разместить в дирректории data, т.к. она монтируется при запуске. Пример:
CONFIG_PATH = /app/data/development.override.yml
Также можно установить приложение сразу на хостовую машину.
| Option | Required | Description |
|---|---|---|
| app | + | Основная секция |
| Option | Required | Description |
|---|---|---|
| sources | + | Источники кадров. |
| source-name | + | Название |
| source | + | Ссылка на поток, например, rtsp адрес камеры |
| stills_dir | + | Дирректория, куда будут сохраняться кадры |
| host_stills_uri | Ссылка web. Если nginx раздает сохраненные изображения, то в телграмм отправляется она, если не указана, то отправляется сам кадр | |
| important_objects | Объекты, при обнаружении который будет оповещение в Telegram/email. По умолчани: person. | |
| other_objects | Объекты, которые будут распозноваться и помечаться на изображении | |
| save_every_sec | Сохранять изображения каждые N секунд, если 0, то будут сохраняться только изображения с important_objects | |
| object_detected_prompt | Подпись/prompt для кадра, отправляемого в Telegram при обнаружении important_objects. По умолчанию: Object detected. |
|
| photo_requested_prompt | Подпись/prompt для кадра, отправляемого в Telegram по команде get_photos. По умолчанию: Photo requested. |
Пример с двумя камерами и всеми опциями для секций:
sources: first-cam: source: rtsp://login:password@192.168.1.55:554/Streaming/Channels/101 save_every_sec: 15 stills_dir: /../../Stills/first object_detected_prompt: Object detected. photo_requested_prompt: Photo requested. important_objects: - person second-cam: source: rtsp://login:password@192.168.1.66:554/Streaming/Channels/101 save_every_sec: 0 stills_dir: ../../Stills/second host_stills_uri: http://localhost/Stills/second object_detected_prompt: "@volta_clawdbot Охранная система обнаружила объект на фото. Опиши, что там происходит и риск опасности" photo_requested_prompt: "@volta_clawdbot Опиши, что сейчас видно на фото" important_objects: - person - car - cow other_objects: - bicycle - motorcycle - bird - cat - dog - horse
| Option | Required | Description |
|---|---|---|
| recognizer | + | Секция распознования |
| model | Модель (по умолчнанию yolov9s, более точные 9m и 9c можно сказать на вкладыке Releases) | |
| device_name | + | Устройсто распознования (CPU, GPU, MYRIAD) |
| num_requests | + | Количество потоков распонования. Оптимально 4 для каждого MYRIAD. Подбирается эмпирически |
Example for recognizer secton with all options:
recognizer: model: yolo11n device_name: MYRIAD num_requests: 4
| Option | Required | Description |
|---|---|---|
| telegram_bot | Telegram секция для опещения | |
| token | Токен | |
| chat_id | ID чата в который будет приходить оповещение | |
| proxy | URL прокси для Telegram, например socks5://user:pass@host:port |
Пример Telegram-секции:
telegram_bot: token: 123456:ABCDEF chat_id: -1001234567890 proxy: socks5://user:pass@proxy.example.com:1080
| Option | Required | Description |
|---|---|---|
| Email секция для оповещения | ||
| smtp_host | + | SMTP хост |
| smtp_port | + | SMTP порт |
| username | Пользователь для SMTP авторизации | |
| password | Пароль для SMTP авторизации | |
| from_addr | + | Email отправителя |
| to_addrs | + | Список email получателей |
| use_tls | Использовать STARTTLS. По умолчанию: true | |
| use_ssl | Использовать SMTP_SSL. Если true, STARTTLS не используется | |
| subject | Тема письма. По умолчанию: Argus object detected |
Если у источника указан host_stills_uri, в письме отправляется ссылка на кадр. Если ссылка недоступна, кадр отправляется JPEG-вложением.
Пример Email-секции:
email: smtp_host: smtp.example.com smtp_port: 587 username: user@example.com password: secret from_addr: argus@example.com to_addrs: - alerts@example.com use_tls: true use_ssl: false subject: "Argus object detected"
| Option | Required | Description |
|---|---|---|
| mqtt | Telegram секция для опещения | |
| hostname | Хост mqtt | |
| port | Порт mqtt |