Комментарии 13
Не вполне понял, зачем изобретать свой велосипед (ну по крайней мере не попробовав готовые решения сначала), когда есть, скажем, Frigate со встроенными AI-детекторами для разного железа, да и для ZoneMinder что-то из этой оперы есть, хоть и не из коробки.
Что вообще используется в качестве софта для видеонаблюдения? Речь про какой-то "китайский регистратор" - у него что внутри и если что-то непонятное/закрытое - есть ли возможность поменять на нормальные опенсорс решения (Zoneminder, Frigate, Shinobi)?
Обычный китайский регистратор с облаком XM (это важно, т.к. через XM удобнее смотреть, на телефоне, на панелях и проч. Если есть более интересная альтернатива - то я о ней не в курсе пока)
Внутри у него ARM 32бит и примерно 150 Мб ОЗУ, стандартная Sofia, туда много не наставишь.
У меня под видеонаблюдение уже второй раз отправляется на пенсию один из старых серверов, так что по поводу каких-то готовых регистраторов даже не в курсе, как оно там бывает. Такое железо, как на Вашем регистраторе, конечно, ничего не потянет. Я, честно говоря, вообще удивлён, что он с такими характеристиками тянет 16 камер с записью в облако.
Ну, там же всё просто:
- камеры дают поток, только считывай
- он считывает, пишет на диск (в облако НЕ пишет)
- всё.
Ах да, если к нему подключиться - выдает поток от выбранной камеры или читает с диска. Никаких перекодировок, ничего. По сути - одна функция, запись.
Главное преимущество в сравнении с сервером и компом - он компактный и бесшумный, только сам диск гудит.
Ну вот мой текущий сервер-старичок для видеонаблюдения. Xeon X3350, 6Gb RAM, запись на 7 HDD по 1 Tb в аппаратном RAID0 (надёжность тут не нужна). 8 камер FullHD, 10fps, и тоже только локальная запись без детекции объектов (CPU не тянет, нормальную видеокарту в эту древность не вставить, а Coral TPU всё не соберусь купить) и без перекодировки.
Загрузка каждого из ядер CPU в среднем 60% (когда подключаюсь для просмотра - больше), использование памяти около 50%. Это Frigate, но до этого был ZoneMinder, потребление ресурсов было плюс-минус такое же. На 16 камерах этот сервер бы если не загнулся, то работал бы на пределе. А тут на порядок более слабое железо...
Насчёт компактный/бесшумный - так это для квартиры проблема (и то не всегда), а видеонаблюдение на кучу камер нужно в доме, а что за дом без серверной стойки для души и экспериментов :)
TC как раз и не изобретает велосипед, а модернизирует свою систему видеонаблюдения с помощью современных технологий. Себестоимость такой модернизации, сущие копейки.
Вы же предлагаете поставить бу сервак стоимостью 30+ т р, потом докупить к Frigate свисток CoralTPU, чтобы он нормально работал.
Про глюки с ZoneMinder это отдельная тема
Я лучше куплю регистратор Hikvision или Hiwatch, можно Dahua, у них уже встроенный детектор человека, машины, животных, и не буду греть голову с серверами, рейдами, виртуализацией и прочей херней которой вы занимаетесь.
Поставил, настроил, получил денег с клиента и забыл. По статистике диск WD purple работает 24/7 без проблем в течении 5 лет.
Удачи вам с этим геморроем.
Perl? Ну надо же, какая экзотика. :) Раз уж пошла такая пьянка, вот тогда заготовка кода на "питоновском лиспе", на Hy (Hylang). Где используется локальная модель Yolo, классификатор. Можно выбрать и другую модель, которая еще боксы будет рисовать вокруг Person. Там еще есть и вариант трассировки, отслеживания перемещения объектов. И все локально, не надо никуда изображения отправлять.
(require hyrule *)
(import toolz [first last])
(import ultralytics [YOLO])
(import cv2)
(setv model-path "_____________.pt")
(setv video-source "rtsp://192.168.____________")
(setv model (YOLO model-path))
(setv person-class-index 1)
(setv person-confidence-threshold 0.77)
(defn process [frame]
(setv first-result (-> (.predict model frame :verbose False) first .cpu))
(setv top1 first-result.probs.top1)
(setv top1conf (first-result.probs.top1conf.item))
(setv person-detected (and (= top1 person-class-index) (> top1conf person-confidence-threshold)))
(if person-detected
(cv2.imshow "Person detected!" frame)
(cv2.imshow "No events..." frame))
(cv2.waitKey 1))
(while True
(setv cap (cv2.VideoCapture video-source))
(while True
(setv ret-and-frame-tuple (cap.read))
(if (first ret-and-frame-tuple)
(do ; if cap.read() returns (True, Image)
(process (last ret-and-frame-tuple)))
(do ; if cap.read() returns (False, EmptyImage)
(print "End of stream or file. Reopening/reconnecting")
(break))))
; inner while
) ; main while
(cap.release)
(cv2.destroyAllWindows)
Самом такое пилить, конечно, круто. Но может стоит Frigate рассмотреть?
Если к нему добавить Google Coral TPU (~$100) все распознавание (люди, авто, мотоциклы, животные...) будет отлично делаться на энергоэффективном чипе.
Изменение загрузки CPU (картинка Summary с Proxmox Frigate LXC) после подключения Coral TPU:

Может и стоит, и даже попробую.
Но тут смысл был именно в том, что берется самое обычное простое и дешманское железо (регистратор - около 2500 р на Али, такие же камеры, б/у ноутбук 10-летней давности) и из этого лепится на коленке работающая штука.
Причем всё легкозаменяемое в случае выхода из строя - можно заменить регистратор на другой (Озон привезет завтра), камеры (аналогично), другой ноутбук или не ноутбук (о чем будет отдельная статья)...
И оно тоже прекрасно определяют людей, мотоциклы и прочее...
В CMS iSpy есть плагины для распознавания лиц, каждое новое лицо заносится в базу и есть возможность посмотреть когда конкретный человек посещал место. И еще возможность прикрутить к сервисам ну тем, что ищут профиль в соц сетях и инфу по аватарке
С использованием Docker установка сервера сводится по сути к двум командам:
Напомнило классическое "Нужно выполнить всего три команды, чтобы поставить Gentoo"
Улучшаем систему видеонаблюдения, ч.1