Как подключить зрение нейросетей к домашним камерам с Unblink
Репозиторий давно не обновлялся
Последнее обновление было 6 месяцев назад.
Знакомая история: дома или в офисе стоят две-три RTSP-камеры, пишут гигабайты видео на диск, а чтобы найти момент, когда курьер оставил коробку у двери, приходится вручную перематывать таймлайн на скорости 8x. Классический детектор движения тут помогает слабо. Он реагирует на пролетающих мух, тени деревьев и свет фар, создавая сотни ложных меток в архиве.
Недавно наткнулся на репозиторий Unblink (версия V2). Разработчики из zapdos-labs попытались решить эту головную боль с помощью мультимодальных языковых моделей (VLM). Идея простая: видеопоток скармливается нейросети, а пользователь общается со своими камерами через обычный чат или ищет нужные фрагменты текстом.
Что умеет Unblink
В основе проекта лежит связка из локального агента, сервера управления и модели Qwen3-VL. Вот что система делает на практике:
- Текстовый поиск по архиву. Можно вбить запрос «человек в красной куртке зашел в подъезд» или «курьер с коробкой», и система выдаст таймкоды подходящих кадров вместо ручного просмотра пяти часов записи.
- Чат с камерами. Работает как интерфейс вопросов и ответов к видеопотоку. Спрашиваешь «были ли гости после 18:00?», модель анализирует сохраненные кадры и отвечает связным текстом.
- Анализ и суммаризация кадров. Нейросеть сжимает видеоряд в текстовые описания происходящего, экономя время на первичный разбор инцидентов.
- Работа через релей без проброса портов наружу. В локалке крутится компактный узел, который сам держит связь с управляющим сервером.
Как устроена архитектура
Архитектурно Unblink разделен на две части: управляющий сервер и легкий узел (node), который ставится рядом с камерами.
+-------------------------------------------------------+
| Public Server |
| (Auth, DB PostgreSQL, Web UI SolidJS, VLM Analysis) |
+-------------------------------------------------------+
▲
│ Безопасный туннель
▼
+-------------------------------------------------------+
| Local Network Node |
| (unblink-node CLI) |
+-------------------------------------------------------+
│ │
▼ RTSP ▼ MJPEG
[ Камера 1 ] [ Камера 2 ]
Серверная часть отвечает за авторизацию, хранение данных и веб-интерфейс. Фронтенд написан на SolidJS с использованием TypeScript, Vite и компонентов Ark UI. В качестве базы данных используется PostgreSQL через pgx. Для работы с видеопотоками разработчики взяли проверенный движок go2rtc, который отлично справляется с RTSP и конвертацией в WebRTC для браузера.
Узел unblink-node написан на Go. Он запускается внутри вашей локальной сети, цепляет RTSP или MJPEG потоки с камер и проксирует их на сервер. Благодаря этому не нужно открывать порты на роутере или выставлять камеры напрямую в интернет.
Быстрый запуск ноды
Если у вас уже поднят сервер (или используется облачный деплой), подключить локальные камеры можно за пару минут.
Готовые бинарники
В релизах на GitHub есть скомпилированные файлы под Linux и Windows (как x86_64, так и ARM64). Скачиваем архив, распаковываем и запускаем:
# Для Linux
tar -xzf unblink-node_linux_amd64.tar.gz
./unblink-node
На Windows запуск выглядит аналогично через PowerShell:
.\unblink-node.exe
При первом старте утилита выдаст в терминал URL. Переходим по нему в браузере, чтобы авторизовать узел в панели управления.
Сборка из исходников
Если на машине установлен Go, проще всего поставить утилиту командой go install:
go install github.com/zapdos-labs/unblink/cmd/unblink-node@main
unblink-node
Локальная разработка всего стека
Для тех, кто хочет покопаться внутри или развернуть серверную часть у себя, в репозитории предусмотрен удобный Makefile. Потребуется tmux, так как он поднимает сервер, ноду и веб-интерфейс в одном окне:
# Ставим зависимости
make install
# Копируем конфиг окружения
cp .env.example .env
# Запускаем все компоненты в dev-режиме
make dev
В репозитории также есть команды make typecheck для проверки типов на фронтенде и make proto для перегенерации Protobuf-файлов при изменении сетевых контрактов.
Где это пригодится
Проект явно метит в нишу продвинутого домашнего видеонаблюдения и небольших офисных сетапов, где возможностей стандартных NVR вроде Frigate или Shinobi не хватает именно в плане семантического поиска.
Хороший пример: мониторинг парковки перед домом. Вместо настройки зон детекции можно просто спросить у чата «когда уехала синяя машина?». Другой сценарий — контроль складской зоны, где важно быстро находить моменты погрузки без просмотра терабайтов пустого видеоряда.
Ложка дегтя и выводы
Документация в README пока минималистичная. Нет подробного описания системных требований для инференса Qwen3-VL на собственном железе, поэтому тяжелые модели, скорее всего, придется выносить на сервер с хорошим GPU или подключать через внешние API.
Тем не менее, кодовая база на Go и SolidJS выглядит опрятно, а выбор go2rtc в качестве медиа-движка говорит о хорошем понимании специфики работы с видео. Если вы давно искали способ прикрутить VLM к своим домашним камерам и не хотите писать обвязку с нуля, на Unblink определенно стоит взглянуть. Исходники открыты под лицензией AGPL-3.0.
