Привет, коллеги!
Время одна из главных ценностей в нашей жизни, поэтому буду краток, чтобы не тратить, ни своё, ни ваше, понапрасну. Заодно предложу такой формат статей из двух частей. В первой резюме, так сказать, вехи проекта, а во второй, если информация будет вам интересна, распишу подробнее. Или отвечу на конкретные вопросы. Воды надо поменьше, по крайне мере в этих наших интернетах.
Итак, наконец у меня дошли руки просверлить/проштробить/собрать/накодить/отладить и запустить видеонаблюдение на базе малинок.
Ничего инновационного в проекте нет, просто в удовольствие и с некоторой экономией.
Задействованы
-
две старушки малины 1B с камерами первого поколения, которые лежали уже лет семь и просились помочь им обрести хоть какой-то смысл существования
-
относительно новая малина 3B и отдельный USB HDD к ней
-
всякая сетевая и питательная инфраструктура
Что особенно интересного было в проекте
Каждая из старушек гонит по TCP с помощью raspivid два потока на свежую малинку.
-
первый поток это H.264 ES, сырой видеопоток.
-
второй поток это, о чудо, motion vectors кодека H.264, которые raspivid может отдельно отдавать.
Свежая малинка работает как сервер (NodeJS), принимающая потоки от старушек (по два с каждой).
-
всё что прилетает в видеопоток дампится в файл на накопитель (с периодическим стартом нового файла). Разумеется, для каждой камеры отдельно.
-
всё что прилетает в поток векторов, используется для детектирования движения (работает весьма неплохо!). Тут мне сильно помогла репка с питониевым кодом для визуализации (https://github.com/janblumenkamp/raspivid_motionvectors), изучив код которой, я и сделал на NodeJS "детектор" движения без всяких этих ваших нейро. Посмотрим, как будет себя вести.
Также открываем на сервере для каждой малины один исходящий TCP-порт, к которому может подключиться, например:
-
mplayer в связке с ffmpeg для отображения на десктопе
-
ffmpeg, который будет оттуда забирать поток и пихать его в rtmp-модуль nginx для веб-стриминга
Волнообразную засветку из-за ККЛ удалось устранить с помощью --flicker, но с параметром auto, а не 50hz.
Длинные шлейфы (100см) дают тёмную картинку, что исправляется с помощью --digitalgain, но удалось обойтись меньшей длиной.
В качестве основы для корпусов я брал прекрасную работу https://www.thingiverse.com/thing:2746186, но пришлось доработать:
-
удлинить корпус камеры, чтобы она всё-таки была больше похоже на камеру, во избежание, так сказать
-
переработать основание под вставку магнитов, что позволяет удобно настроить позицию камеры на металле, а потом уже прифигачить на клей
-
заменить шаровую опору на несколько колен с винтовым соединением, потому что:
-
пластик усыхает и шар начинает болтаться
-
несколько удобнее позиционировать
-