Семь камер, коты и одна собака, которую нейросеть считает птицей
У меня дома семь камер видеонаблюдения. Они смотрят за двором, навесом и прочими местами, где в частном доме периодически что-нибудь происходит. Видео с камер обрабатывает отдельный сервер с видеокартой, а специальная программа Frigate пытается распознавать всё, что попадает в кадр: людей, машины, кошек, собак и птиц.
Коты, кстати, чувствуют себя перед камерами совершенно свободно. Ходят где хотят, изучают припаркованные машины, инспектируют территорию и вообще ведут себя так, будто это не я установил систему видеонаблюдения, а они наняли меня следить за своим имуществом. Иногда мне кажется, что из всех обитателей двора именно коты лучше всех понимают, кто здесь настоящий заказчик.
И вот недавно я обнаружил, что во дворе у меня живёт ещё и птица. Птица эта ходит на четырёх лапах, сидит за металлической оградой и вообще подозрительно похожа на нашего собакена Крона. Но спорить с искусственным интеллектом я пока не стал. У меня, конечно, есть глаза, но у него видеокарта. Кто знает, вдруг я чего-то не понимаю? Кстати, вот эта птица. Его зовут Крон:
28 октября в 08:04 Frigate зарегистрировал событие с классом Bird и уверенностью 73%. На том же снимке вторая нейросеть, которой поручено описывать происходящее, совершенно спокойно написала, что собака находится в металлическом вольере и пытается выбраться. Получается, одна модель увидела птицу, вторая - собаку, а я увидел очередную причину потратить вечер на домашнюю инфраструктуру.
Причём это не единичная ошибка. За две недели нашлось 19 подобных событий: Frigate записывал объект как птицу, а вторая модель описывала собаку. Видимо, у меня там не просто двор, а секретный заповедник, где собаки успешно мимикрируют под пернатых.
С котами у системы тоже отдельные отношения. 5 ноября на одной из камер сначала появилось событие Bird, а через несколько секунд - Cat. В описании кошачьего события нейросеть сообщила, что видит двух кошек с разным окрасом, хотя детектор выделил только один объект. Возможно, вторая кошка была настолько хорошо замаскирована для нейросети-детектора, что её обнаружила только особо продвинутая модель. Хотя сидит она прямо на виду – приглядитесь к их кошачьему домику. А может, она просто пришла поесть, пока первая отвлекала внимание. Уличные коты вольные, мне пока докладывать не хотят чем занимаются.
А на следующий день система наконец распознала Крона как собаку. Казалось бы, прогресс! Правда, вторая нейросеть описала его как чёрно-белого щенка. Крон уже взрослый, но приятно, что хотя бы искусственный интеллект старается поддерживать его самооценку.
Как оно вообще работает
На самом деле у меня там трудятся две разные модели, и каждая занимается своим делом. Первая смотрит на картинку и пытается определить, что на ней изображено. Вторая получает снимок события и составляет его текстовое описание. Они не советуются друг с другом, не спорят и не устраивают совещаний. Просто каждая выдаёт свой результат.
Первая, например, ставит на Крона наклейку «Птица». Вторая получает фотографию и пишет сочинение на тему «Один день из жизни Крона в металлическом вольере». При этом вторая не может исправить ошибку первой. Она только описывает то, что видит сама. Поэтому две модели могут совершенно спокойно сообщать разные версии событий, и никто никому не возразит.
Всё это работает локально, на моём домашнем сервере. Я не отправляю видео с камер в облако и не плачу за каждое распознавание. У сервера есть видеокарта RTX 3050 на 6 Гб видеопамяти, на которой крутится детектор объектов. Чтобы не заставлять её анализировать тяжёлое видео целиком, каждая камера отдаёт два потока: один для записи, второй, полегче, для распознавания. Компьютеру не обязательно смотреть фильм в 4K, чтобы ответить на вопрос, есть ли во дворе кот.
Сама система довольно шустрая и в обычных ситуациях справляется хорошо. Людей, машины, кошек и собак она обычно находит без особых проблем. Но иногда начинаются творческие интерпретации. И вот тут я особенно рад, что всё работает дома: семейные тайны не покидают локальную сеть.
Когда готовой кнопки нет
Помимо распознавания животных у меня была ещё одна задача: хотелось понимать, открыты или закрыты ворота навеса. Казалось бы, мелочь. Но готовой кнопки «Посмотреть на ворота и сказать, что с ними» в стандартном наборе Frigate нет.
Пришлось сделать отдельную маленькую модель, которая различает всего два состояния: «Ворота открыты» и «Ворота закрыты». Она смотрит не на весь кадр, а на небольшой участок изображения, где находятся ворота, и определяет, что там происходит. Результат передаётся в Home Assistant, где его уже можно использовать как обычный датчик.
У меня конечно есть отдельная автоматика, управляющая открытием и закрытием ворот на базе китайской Tuya, но к сожалению она периодически отваливается от Home Assistant, и микромодель на Frigate стала своеобразной страховкой.
Модель весит меньше мегабайта. Не гигабайта, не мегабайта с хвостиком, а меньше мегабайта. Вся эта нейросетевая магия помещается в файл размером с небольшую картинку. И, что особенно приятно, ворота она пока не путает ни с птицами, ни с кошками.
Вот это мне, пожалуй, нравится больше всего. Не нужно тащить огромную универсальную систему туда, где достаточно маленького специализированного инструмента. Есть конкретная задача, под неё делается решение, и оно просто работает. По крайней мере, пока кот не решит сесть перед воротами и проверить, не изменилось ли их состояние. Или камера не решит повернуться с фиксированного положения.
Домашний дата-центр имени котиков
Вся эта конструкция живёт на отдельном сервере. Семь камер, два видеопотока от каждой, запись, распознавание, описания событий. За системой нужно следить, обновлять её и периодически разбираться, почему что-нибудь перестало работать. В общем, домашнее хозяйство, только вместо сарая у меня виртуальная машина, а вместо кладовки - диск на терабайт.
Кстати, с диском уже есть определённые отношения. На момент последней проверки он был занят на 94%. Около 870 ГБ занимают видеозаписи, а ещё есть снимки и база событий. С августа система накопила больше двадцати тысяч событий. То есть коты и прочая живность не просто гуляют по участку, а активно производят контент. Причём абсолютно бесплатно для себя и за мой счёт по части хранения. Ни одного рекламного контракта, ни одной благодарности за использование образа. Только шерсть на всём подряд и растущий объём архива.
Заодно всё это хозяйство мониторится. Есть графики, метрики, логи. Если камера перестала отдавать видео, нужно понять, камера ли виновата, сеть или сервер. Можно, конечно, просто выйти во двор и посмотреть, но мы же не для того строили домашнюю инфраструктуру, чтобы теперь ходить ногами и трогать траву, верно?
Электричество тоже организовано с запасом. Дом резервируется от однофазного дизельного генератора на 16 кВт с автоматическим вводом резерва, а сервер подключён через UPS. Когда пропадает электричество, сервер пережидает запуск генератора на батарее. Получается, что у котов есть собственный резервный источник питания для наблюдения за тем, как они ничего не делают. Не уверен, что они это ценят.
А чем, собственно, занимается инженер?
Когда начинаешь рассказывать обо всём этом человеку со стороны, довольно быстро замечаешь одну проблему. Можно сказать: «Я поставил камеры во дворе». И всё понятно. А можно начать объяснять про два потока, виртуализацию, локальные модели, классификаторы, серверы и мониторинг. И вот уже собеседник смотрит на тебя так, будто ты не камеры поставил, а случайно открыл портал в другое измерение. И порывается сбежать, если ты не успел его связать. Вот как Манишка ниже.
Манишка передает привет! Помните её? Ей тоже пытался объяснять про камеры и нейросети, но она решила что лучше пойдет поест.
Хотя результат-то простой: камеры записывают видео, компьютер ищет животных и людей, а отдельная модель помогает понять, открыты ли ворота. Вся инженерная кухня остаётся за кадром. До тех пор, пока собака не становится птицей, а кошка - двумя кошками.
Кстати, с этой проблемой - как объяснить, чем вообще занимаются инженеры, - связан один интересный проект YADRO ко Дню инженера. В нём участвуют восемь сотрудников компании и их дети. Сначала дети своими словами рассказывают, чем, по их мнению, занимаются родители, а потом родители объясняют, что на самом деле входит в их работу.
Мне кажется, это хороший способ проверить, насколько понятно ты сам можешь объяснить свою профессию. Потому что фраза «я занимаюсь инфраструктурой» для инженера вполне осмысленна, а для человека со стороны звучит примерно как «я иногда смотрю в чёрное окно с зелёными буквами».
YADRO разрабатывает российские серверы и системы хранения данных. То есть занимается оборудованием, на котором работают сервисы и хранятся данные. Со стороны можно сказать: «Ну, серверы делают». А за этой короткой фразой скрывается огромная работа инженеров, которые проектируют, собирают и обеспечивают надёжность всей этой техники.
У меня, конечно, не завод и не серверная платформа промышленного масштаба. Но сама суть знакома: есть задача, есть ограничения, есть оборудование и программное обеспечение, и всё это нужно заставить работать вместе. А потом ещё объяснить окружающим, почему оно вообще так устроено.
Если совсем просто
Я, например, могу сказать, что занимаюсь домашней автоматизацией. А могу рассказать, что у меня семь камер, две нейросети, отдельный классификатор ворот, резервное питание и почти забитый диск. И где-то между всем этим живут коты, которые считают, что весь этот комплекс построен исключительно ради их комфорта, и одна собака, которая официально проходит по базе как птица.
Впрочем, пусть пока так и остаётся. Главное, чтобы ворота закрывались, сервер не падал, коты не забивали диск своими фотосессиями, а птица не начинала лаять.
Всем добра и с прошедшим днем инженера!
P.S. О проекте YADRO ко дню инженера можно узнать подробнее тут. Зайдите, там правда интересно.
Реклама. ООО «КНС Групп», ИНН: 7701411241




































