וואלהבכירים במפלגתו של קנצלר גרמניה הביעו בו תמיכה על רקע הלחץ להתפטרESPNTransfer rumors, news: Barça, Madrid believe Haaland could leave Man City next summerThe Jerusalem PostIDF arrests Iran's Press TV journalist in West Bank, hands her to police, source confirms to 'Post'UN NewsThe world comes to New York: What’s at stake at UN General Assembly high-level weekRTP DesportoOpen de Portugal promovido à primeira divisão do golfe europeuBollywood HungamaAmit Sadh’s Pratap to release in theatres on November 20, 2026; FIRST look unveiledPunchPublic appointments should be based on competence – PRP chieftainInquirerEjercito vows to ensure funding for major railway projectsDigital SpyEmmerdale's Joe Tate to face new revenge plan after Ruby burialVilaWebEl Partit Demòcrata Europeu recorda a Llarena que ha d’aplicar la llei europea i amnistiar PuigdemontBBC NewsCarney's new love-in with EU has everything to do with TrumpGolem.deElon Musk fordert: Unternehmen sollen ihre KI-Systeme gegenseitig prüfen
The Daily Newsstand · Free, Always
Wednesday, September 16, 2026

Как я собрал охранника для комнаты на YOLO и подключил его к Telegram

Translate

Я живу один, и обычно знаю, кто может быть у меня дома. Но во время отъезда в голову иногда лезут неприятные мысли. «А вдруг кто-то всё-таки заходил, пока меня не было?». Это мог быть сосед, родственник или мастер, но без камеры остаётся только гадать.

И захотелось закрыть этот вопрос одним простеньким скриптом. Камера видит человека у двери, а в Telegram приходит сообщение и кадр. В процессе немного перестарался. Получился бот с поддержкой нескольких камер, тревогой, голосом, распознаванием лиц и возможностью вынести обработку данных на отдельный сервер.

В этой статье расскажу, зачем здесь вообще нужна YOLO и почему простого детектора движения оказалось мало. Как я проверял работоспособность проекта в реальных условиях, почему не отправляю в чат обычные фотографии людей и как организована приватность. А также как подключить телефон в качестве камеры и вынести тяжёлую обработку на удалённый сервер.

❯ Кто такой YOLO

You Only Look Once — YOLO.
Семейство моделей компьютерного зрения для поиска объектов на изображениях и видео. Первая модель появилась в 2015 году и изменила подход к детекции объектов. Вместо двух этапов «найти возможные области и классифицировать каждую» она за один запуск в сети предсказывала рамки объектов, их классы и уверенность в предсказании.

За один проход YOLO возвращает координаты объекта, класс и уверенность

За один проход YOLO возвращает координаты объекта, класс и уверенность

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

Что умеют современные YOLO-модели

Задача

Что возвращает модель

Пример применения

Детекция объектов

Ограничивающая рамка (x, y, ширина, высота), класс объекта, уверенность (confidence)

Поиск людей/машин на кадре, подсчёт объектов

Сегментация (instance segmentation)

Точная пиксельная маска объекта + рамка + класс

Измерение площади дефекта, разделение перекрывающихся объектов

Pose estimation (оценка позы)

Ключевые точки (например, 17 точек тела: нос, плечи, локти, колени, щиколотки) + рамка

Анализ движений в спорте, фитнес‑трекинг, реабилитация

OBB (Oriented Bounding Box)

Повёрнутая рамка: центр (x, y), ширина, высота, угол поворота + класс

Аэрофотосъёмка, спутниковые снимки, наклонные объекты на конвейере

Трекинг

ID объекта между кадрами + рамки/маски/ключевые точки

Сопровождение человека в видеопотоке, подсчёт уникальных объектов

Главное преимущество YOLO — это баланс скорости, точности и удобства. Поэтому её часто используют для камер, видеоаналитики, ритейла, спорта и контроля производства. YOLO хороша не потому, что всегда лучшая, а потому, что во многих реальных задачах её проще всего довести до работающего результата.

Популярность технологии в продакшене обеспечена тем, как развивался инструментарий вокруг неё. Раньше обучение детектора требовало долгой ручной компиляции Си-библиотек под архитектуру конкретной видеокарты. Современные версии семейства превратились в готовые Python-пакеты с минимальным порогом входа, поддерживающие экспорт в открытые форматы прямо из коробки.

Эволюция экосистемы и архитектур:

Поколение

Год

Создатели

Что дало разработчикам

YOLOv1

2015

Joseph Redmon

Доказательство концепции детекции в 45 кадров в секунду на одном GPU.

YOLOv2

2016

Joseph Redmon

Стабилизация обучения благодаря Batch Normalization и ускоренный инференс.

YOLOv3

2018

Joseph Redmon

Качественный прорыв в поиске мелких объектов благодаря трём веткам детекции.

YOLOv4

2020

Alexey Bochkovskiy

Оптимальный набор методов аугментации данных (Bag of Freebies) для обучения на потребительских картах.

YOLOv5

2020

Ultralytics

Стандарт разметки TXT-файлами, нативный код PyTorch и удобный запуск дообучения в пару строк.

YOLOv7

2022

C.-Y. Wang, A. Bochkovskiy

Рекордное соотношение скорости и точности (mAP) на графических процессорах облачных серверов.

YOLOv8

2023

Ultralytics

Унификация всех задач машинного зрения под единую консольную команду и API.

YOLOv10-v11

2024

Исследовательские группы

Снижение задержки инференса (latency) за счет устранения шага NMS и оптимизации вычислений.

YOLO на практике:

Розничная торговля и сетевой ритейл

В розничной торговле и сетевом ритейле YOLO может работать внутри систем контроля очередей и полочного пространства. Камеры над торговым залом детектируют тележки, корзины и самих покупателей, передавая позиции в трекер. Это даёт ритейлеру точную тепловую карту посещаемости отделов и автоматически формирует уведомление администратору магазина, если у касс самообслуживания скопилось больше пяти человек. При интеграции с сегментацией система фиксирует пустоты на полках с товарами повышенного спроса.

Промышленность

На промышленных карьерах и стройплощадках модель могут встраивать в бортовые компьютеры карьерных самосвалов и экскаваторов. Камеры кругового обзора с легковесной версией YOLO Nano в реальном времени детектируют людей в жилетах, легковой транспорт и крупные валуны на пути тяжёлой техники. Бортовой терминал подаёт громкий звуковой сигнал водителю при опасном сближении, предотвращая наезды в условиях слепых зон зеркал и густой пыли.

Общественная безопасность

В системах общественной безопасности комплексы видеоаналитики на базе YOLO могут установить на автобусах и других городских транспортных средствах. Во время обычного рейса камеры анализируют окружающую обстановку, обнаруживают подозрительные действия, оставленные без присмотра предметы, конфликты, падения людей или проникновение в ограниченные зоны. Если система фиксирует потенциально опасное событие, она сохраняет фрагмент записи, определяет его координаты и передаёт уведомление оператору городского ситуационного центра для дальнейшей проверки.

Все предоставленные примеры лишь пример того, как можно использовать данную технологию.

Не всё так круто, как хотелось бы

При всех сильных сторонах у технологии есть ощутимые минусы

Проблема смещения домена (domain shift): предобученная на датасете COCO модель отлично видит людей днём при хорошей погоде, но моментально слепнет в цехе металлургического завода при свете натриевых ламп и дыме, требуя сбора сотен собственных размеченных кадров.

Сложность работы с окклюзиями: если один объект наполовину перекрыт другим (например, пешеход за столбом или коробка под другой коробкой), сеть часто теряет уверенность или путает класс предмета.

Зависимость от разрешения входного тензора: чтобы найти мелкие детали на обзорной уличной панораме, приходится увеличивать размер входного изображения с 640 до 1280 пикселей, что квадратично роняет частоту кадров.

Накопление ошибок трекинга: на сложных ракурсах временные трекеры вроде DeepSort или ByteTrack могут терять идентификатор человека при длительном перекрытии и присваивать ему новый номер после выхода из слепой зоны.

Тем не менее в индустрии видеонаблюдения YOLO остаётся стандартом по умолчанию.
Она даёт готовую архитектурную базу, вокруг которой разработчик может за несколько дней собрать работающий конвейер от сбора видеопотока с RTSP-камеры до отправки алертов в базу данных

❯ DotEye: Охранник в Telegram

DotEye

DotEye

Telegram-бот, который следит за комнатой.
Включаешь режим охраны, подключаешь камеру, и бот начинает «охранять вашу комнату». Если в ней появляется человек, то приходит уведомление, что кто-то вошёл или вышел из кадра.

Сначала фото отправлялось при каждом движении, но это было ошибкой.
Движений было настолько много, что бот устраивал мне спам-атаку на ровном месте.
Поэтому я сделал так, что движение только будит детектор, а YOLO подтверждаёт вторжение человека в комнату. После этого IoU-трекер сопоставляет рамки между кадрами и не даёт боту спамить одинаковыми сообщениями.

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

Есть и голосовой режим. При входе незнакомого человека бот может включить сирену и произнести заданную фразу через динамики компьютера. По умолчанию «Внимание, посторонний человек. Покиньте помещение!». В тихие часы обычные приветствия можно выключить, но тревогу оставить. Если распознавание лиц включено и камера узнаёт меня, тревога снимается. Если нет, то её можно снять кнопкой в чате.

Пикселизация фотографий

По умолчанию бот не отправляет в Telegram исходное фото с человеком. Каждое фото автоматически пикселизуется. Чтобы понять, что кто-то вошёл, мне не нужно видеть лицо. Исходный кадр остаётся на компьютере в зашифрованном виде и никуда не отправляется.

❯ Почему одного кадра недостаточно

YOLO смотрит на отдельный кадр. Но уведомление нужно не про кадр, а про событие во времени. Человек мог стоять у двери пять секунд, мог пройти мимо камеры или выйти и вернуться через минуту. Если не связать результаты между соседними кадрами, бот будет считать каждую новую рамку новым человеком.

Здесь работает IoU-трекер.
Он сравнивает, насколько текущая рамка пересекается с прошлой. Если пересечение большое, это тот же объект с прежним ID. Если появляется новая рамка, возникает вход. Если рамка пропала на заданное время, возникает выход. Это простая логика, но именно она убрала поток почти одинаковых фотографий из чата.

Трекер помнит человека между кадрами

Трекер помнит человека между кадрами

У такого подхода есть предел. Если человек полностью закрылся дверью или вышел из кадра, а потом сразу вернулся с другого края, трекер может дать новый ID. Для моего проекта это не критично. Важнее не потерять событие, чем идеально вести статистику перемещений.

Шалость удалась

Чтобы проверить функционал на практике, я попросил друга поучаствовать в небольшом эксперименте.

Утром включил охрану и ушёл, друг должен был зайти без предупреждения.
А так же он не знал, что там настроена звуковая система оповещений.

В какой-то момент пришло сообщение: «Обнаружен незнакомый человек». Сразу за ним, кадр с фотографией озадаченного друга. В комнате прозвучала заранее заданная голосовая фраза, а следом сирена. Друг явно засмущался, быстро вышел из комнаты и написал, что тревогу можно выключать.

Шалость удалась. А я убедился, что бот действительно работает.

❯ Как запустить проект

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

Локальный запуск

Не забудьте склонировать репозиторий перед работой.
Создаём виртуальное окружение и ставим зависимости:

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

Дальше копируем шаблон настроек:

cp .env.example .env
python -m doteye.crypto

Команда сгенерирует ключ шифрования. Его нужно записать в .env вместе с токеном бота и своим Telegram ID:

DOTEYE_BOT_TOKEN=<токен бота>
DOTEYE_ADMIN_IDS=<мой Telegram ID>
DOTEYE_CRYPTO_KEY=<сгенерированный ключ>у

Запуск бота:

python -m doteye.main

После старта бот присылает статус в Telegram. Там же открывайте /panel, подключайте камеру, включайте охрану и проверяйте, что бот работает.

Вместо камеры можно использовать телефон

Подключить можно встроенную веб-камеру, IP-камеру или телефон. Для Android достаточно приложения, которое отдаёт MJPEG или RTSP. Например, после запуска трансляции через приложение «IP Webcam» на экране появляется локальный адрес. Телефон и компьютер с ботом должны быть в одной сети.

Камеру можно добавить через интерфейс бота: «Панель -> Камера -> Изменить список камер». Или указать источник в настройках:

DOTEYE_CAMERA_SOURCE=http://192.168.1.40:8080/video
DOTEYE_ALLOWED_URL_HOSTS=192.168.1.40

Адрес выше примерный. У телефона будет свой IP, его и нужно подставить. Allowlist обязателен, это одна из базовых систем защиты. Если его не настроить, к серверу сможет подключиться любой, кто узнаёт адрес и порт.

❯ Как вынести обработку на сервер

На домашнем компьютере DotEye работает нормально, пока камер немного и процессора хватает. Но камера, Telegram-бот и инференс решают разные задачи.
Я захотел оставить камеру и управление дома, а YOLO вынести на отдельную машину.

Домашний компьютер продолжает читать поток камеры, хранить события и отправлять уведомления в Telegram. На сервер уходит зашифрованный JPEG-кадр, назад возвращаются только координаты рамок. Постоянный видеопоток на сервер не передаётся.

Создаём и настраиваем сервер

Для первого запуска я выбрал Timeweb Cloud и публичный IP-адрес. Это временный сценарий. Для постоянной работы лучше использовать домен и автоматически продлеваемый TLS-сертификат.

1. Регистрируем аккаунт в Timeweb Cloud и подтверждаю почту.

Переходим в Timeweb Cloud и создаём аккаунт. После регистрации открывается панель управления, из которой можно создавать серверы, управлять IP-адресами, SSH-ключами и правилами Cloud Firewall.

2. Пополняем баланс на нужную сумму.
3. В панели открываем «Облачные серверы» и нажимаю «Создать сервер».
4. Выбираем конфигурацию будущего сервера

В панели открываем раздел облачных серверов и нажимаем «Создать сервер». Выбираем чистый образ Ubuntu. Для этой инструкции используем Ubuntu 26.04 и локацию «Москва».

Сервер лучше размещать ближе к дому или месту, где работает камера. Это не ускорит YOLO само по себе, но уменьшит задержку между домашним DotEye и VPS.

С конфигурацией каждый решает под свои задачи. Мне будет достаточно этой:

Во вкладке «Сеть» обязательно выбираем публичный IP, без него мы не сможем подключиться к серверу.

Во вкладке «Безопасность» можете оставить настройки по умолчанию.

Всё, теперь жмём кнопку «Заказать» и ожидаем.

5. Подключаемся к серверу

На почту должно прийти письмо с данными для входа на сервер.

В дашборде копируем пароль от сервера, открываем консоль и подключаемся к серверу по SSH.

ssh root@<server_ip>

Если SSH-ключ был добавлен заранее, пароль не понадобится. Для постоянного сервера такой вариант предпочтительнее входа по паролю.

6. Подготавливаем сервер к remote-режиму

На этом шаге сервер уже создан, публичный IP сохранён, а SSH-сессия открыта. На этом этапе только подготовка. Устанавливаем Docker и копируем исходный код. Remote-сервер пока не запускаем, сертификат не выпускаем и настройки домашнего DotEye не меняем.

Обновляем список пакетов и устанавливаем Git с Docker:

apt update
apt install -y git ca-certificates curl
curl -fsSL https://get.docker.com -o get-docker.sh
sh get-docker.sh

Проверяем, что Docker и Docker Compose доступны:

docker --version
docker compose version

Клонируем репозиторий DotEye:

git clone https://github.com/network-user/DotEye.git
cd DotEye

На этом подготовка VPS закончена. На сервере есть Docker, Docker Compose и исходный код проекта.

Запускаем remote-сервер

Remote-сервер использует два маршрута:

  • GET /health — отвечает, что сервис работает;

  • POST /detect — принимает зашифрованный кадр и возвращает координаты найденных объектов.

Обычный HTTP для внешнего подключения не подходит. DotEye разрешает его только для localhost и режима разработки. Через remote передаются кадры помещения, поэтому сервер должен работать по HTTPS.

В каталоге проекта запускаем генератор конфигурации:

python3 deploy/deploy_remote.py

Генератор задаст вопросы.

  1. DOTEYE_CRYPTO_KEY: Нажимаем Enter, чтобы создать новый ключ, и сохраняем его в менеджере секретов. Тот же ключ понадобится на домашней машине.

  2. Тип развёртывания: Выбираем 2 - IP-адрес.

  3. IP: Вставляем публичный IPv4 VPS.

  4. Выбираем устройство и модель: Для обычного VPS без NVIDIA GPU используем cpu и yolov8n.pt.

Скрипт создаст deploy/.env.remote и deploy/docker-compose.remote.yml. В IP-режиме Compose уже содержит TLS-пути, порт 8099 и выбранную модель. Ручное редактирование конфигурации не требуется.

Теперь выпускаем самоподписанный сертификат. В subjectAltName обязательно указываем IP сервера: иначе клиент правильно откажется подключаться к сертификату.

mkdir -p deploy/tls
openssl req -x509 -newkey rsa:4096 -sha256 -nodes -days 365 \
  -keyout deploy/tls/server.key \
  -out deploy/tls/server.crt \
  -subj "/CN=<IP_СЕРВЕРА>" \
  -addext "subjectAltName = IP:<IP_СЕРВЕРА>"

Запускаем remote-сервис:

chown root:1000 deploy/tls/server.key
chmod 640 deploy/tls/server.key
chmod 644 deploy/tls/server.crt

docker compose -f deploy/docker-compose.remote.yml up -d --build
docker compose -f deploy/docker-compose.remote.yml ps

В Cloud Firewall добавляем входящее правило для TCP-порта 8099. Если домашнее подключение использует постоянный внешний IP, ограничиваем источником только его. При динамическом IP порт придётся открыть шире, поэтому особенно важно не отключать TLS-проверку и не передавать DOTEYE_CRYPTO_KEY третьим лицам.

Приватный server.key остаётся на VPS. На домашний компьютер копируем только публичный сертификат:

mkdir -p certs
scp root@<IP_СЕРВЕРА>:/root/DotEye/deploy/tls/server.crt certs/doteye-remote.crt

Команда предполагает, что репозиторий на сервере находится в /root/DotEye. Если он склонирован в другой каталог, меняем путь после двоеточия.

На домашнем компьютере добавляем в .env:

DOTEYE_REMOTE_PROCESSING=1
DOTEYE_REMOTE_URL=https://<IP\\_СЕРВЕРА>:8099
DOTEYE_ALLOWED_URL_HOSTS=<IP_СЕРВЕРА>,<IP_КАМЕРЫ>
DOTEYE_REMOTE_CA_CERT=<абсолютный путь к скопированному server.crt>
DOTEYE_REMOTE_FALLBACK=1
DOTEYE_CRYPTO_KEY=<ТОТ_ЖЕ_КЛЮЧ_ИЗ_deploy/.env.remote>

DOTEYE_ALLOWED_URL_HOSTS содержит точный список сетевых адресов, к которым DotEye может обращаться. Если камера подключена напрямую к компьютеру, оставляем только IP Сервера. Если источником служит телефон, RTSP-камера или HTTP-поток, добавляем и IP камеры.

Путь /app/certs/doteye-remote.crt используется при запуске основного DotEye через Docker Compose. Если проект запускается напрямую через Python, указываем абсолютный путь к сертификату на домашнем компьютере.

Перезапускаем основной сервис:

docker compose up -d --build doteye
docker compose logs -f doteye

Или при запуске без Docker:

python -m doteye.main

Проверяем remote-сервер уже с домашней машины:

curl --cacert certs/doteye-remote.crt https://<IP_СЕРВЕРА>:8099/health

В PowerShell лучше использовать curl.exe:

curl.exe --cacert certs/doteye-remote.crt https://<IP_СЕРВЕРА>:8099/health

Если /health вернул {"status": "ok"}, домашний DotEye сможет отправлять кадры на сервер. При временной недоступности сервера DOTEYE_REMOTE_FALLBACK=1 переключит обработку на локальный детектор. Бот пришлёт сообщение о сбое и отдельное сообщение, когда remote снова станет доступен.

Самоподписанный сертификат действует 365 дней. Перед окончанием срока его нужно перевыпустить на сервере, перезапустить remote-контейнер, скопировать новый server.crt на домашнюю машину и перезапустить DotEye. Это главный недостаток IP-варианта. Для постоянной работы лучше использовать домен и автоматический TLS.

Если сервер станет недоступен, то обработка автоматически переключается на локальное устройство

❯ Заключение

DotEye вырос из простой задачи: хотелось понимать, кто заходил в комнату, но не получать по сотне одинаковых кадров из-за теней, света из окна или движения шторы. Решение оказалось не в том, чтобы бесконечно гонять YOLO по видеопотоку, а в нормальном разделении задач.

Сначала срабатывает детектор движения. Только после этого кадр уходит в YOLO, а IoU-трекер и задержка убирают повторы. Камера, история событий и Telegram-бот остаются на домашнем компьютере. Когда локальных ресурсов не хватает, инференс берёт на себя сервер. А если сервер перестаёт отвечать, бот автоматически переключается на локальный детектор, а после восстановления возвращается к remote-обработке.

После шутки над другом, которого система встретила голосовым оповещением и тревогой, я понял, что проект перестал быть просто экспериментом с YOLO и стал полноценным пет-проектом.

Ссылки:
Может быть интересно:
Перейти ↩

Перейти

Новости, обзоры продуктов и конкурсы от команды Timeweb.Cloud — в нашем Telegram‑канале 

View the original on Хабр

KioskNews shows a cleaned-up reading view extracted from the publisher’s page — the original always lives on their site, not ours.