Видеонаблюдение в подъезде своими силами

Видеонаблюдение в подъезде своими силами

Прочитал относительно недавнюю публикацию о видеонаблюдении и решил описать свой опыт. Считаю мое решение оптимальным по соотношению цена/функциональность, но с удовольствием выслушаю критику более опытных людей.

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

Аппаратное обеспечение

Сразу сообщу, что учел требования администрации про ограничение рекламы в публикациях, поэтому название производителей там, где это не принципиально, не привожу.
Еще во время ремонта попросил строителей проложить Ethernet-кабель в подъезд над дверью. Питания там нет, поэтому пришлось купить PoE инжектор за 600 рублей. Длина кабеля – 10 метров.

Камеру купил купольную антивандальную за 5000 рублей с питанием PoE известной в этих кругах китайской компании. Подключить в подъезде USB камеру технически непросто.
WiFi камера не решила бы проблему, т.к. питание к ней в любом случае надо вести.

Видеорегистратор показался очень дорогим, поэтому купил одноплатный компьютер Odroid C2 за 3900 рублей. Но самое главное в выборе — не смог найти недорогой видеорегистратор, который позволил бы потом написать на нем собственное ПО для отправки файлов в облачное хранилище и взаимодействия с Telegram (об этом чуть позже). Кроме того у меня было много других задач для одноплатного компьютера – мониторинг погоды, Telegram bot и т.д. В общем, это было универсальное решение для многих задач. Подойдет и RaspberryPi. Получается, по деньгам на аппаратное обеспечение уложился в 10 тыс. рублей.

Программное обеспечение

Операционная система — Ubuntu для Odroid.

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

«Гуглением» можно научиться собирать bash-скрипты из других решений и я использую их в упрощенных вариантах.

Ну и самое главное – программа Motion.

Motion

Я расскажу ниже о недостатках и проблемах этого решения, но все же оно бесплатное и простое. Motion позволяет решить задачу детектирования движения и записи видео в формате mjpeg, когда что-то происходит в подъезде.

Моя публикация – не инструкция по Motion. Я описываю только существенные моменты, хотя полный конфигурационный файл приведет внизу.

Кстати камера может сама детектировать движение. В этом случае она загружает набор картинок на FTP сервер. Я также использую этот режим на случай, если motion по какой-либо причине пропустит движение и не запишет видео, по сути дублирование.

Для тех, кто не знаком с Motion, сообщу, что это программа, цель которой — записывать видео в случаях, если она (программа) определяет, что картинка с камеры изменилась (перед камерой что-то двигается). Для этого она постоянно сравнивает картинки и определяет, что новая картинка не равна предыдущей в каком-то проценте (процент несовпадения задается в файле конфигурации). Запись останавливается после того, как картинка перестала меняться в течение заданного промежутка времени (также задается в конфигурации).

В подъезде Управляющая Компания поставила лампу с датчиками движения. Лампа постоянно включаются/выключаются даже без движения. Motion в этом случае начинает записывать видео, поэтому я использую его настройку LIGHTSWITCH = 1. В этом случае Motion пропускает 5 кадров на перестройку чувствительности камеры. К сожалению, это не всегда работает, но уверен это мой частный случай. Иногда я планирую отключить датчики движения на лампах в подъезде, но пусть все же экономится общая электроэнергия.

Важнейший параметр – количество кадров в секунду, которые принимает на анализ и записывает Motion (параметр FRAMERATE) Скажем, если параметр равен 5, как в примере, Motion «берет» 5 кадров в секунду – видео получается прерывистым, но вполне достаточным, чтобы понять, что происходит. Увеличение этого параметра сглаживает записываемое видео, снижает время реакции на движения, но увеличивает нагрузку на процессор. 5 кадров в секунду, мне показалось, наиболее оптимальным.

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

Используемая архитектура позволяет использовать Motion версии 3.2.12+git20140228, специально собранной под нее. Версия старая, не обновляется, но исправно работает. Ее основная проблема в том, что при работе с WiFI (а Odroid у меня подключен по WiFi к локальной сети) иногда Motion теряет связь с камерой и эта связь не восстанавливается сама. Приходится перезапускать Motion. Потеря связи проявляется в том, что Motion “зависает” на одной картинке. Для того, что перезапустить Motion, я написал специальный скрипт: он пишет несколько картинок с Web сервера Motion (Motion дает возможность посмотреть видео со встроенного Web сервера), сравнивает их между собой по размеру и если размер одинаковый, значит Motion «завис» на одной картинке. Почему по размеру? Я мог бы сравнить их по содержимому с помощью пакета Python Pillow, но это лишняя нагрузка на процессор – Pillow очень требователен к ресурсам, надо сравнивать все пиксели между собой.

Второй вариант решения – подключить odroid через Ethernet. В этом случае проблем нет.

Захотелось, чтобы в случае, если перед моей дверью есть движение, фотография приходила в Telegram-бот. Для этого в параметре задал исполнение простейшего bash скрипта. Но сначала надо задать область детектирования: area_detect = 89. Это означает, что Motion детектирует движение в квадратах 8 и 9.

1 2 3
4 5 6
7 8 9

Далее создаем скрипт для отправки фотографий в Telegram

Чтобы он сработал при детектировании в конфигурационном файле прописываем параметр

Получается, в Telegram вот так выглядит

Вот мой весь конфигурационный файл

Motion можно настраивать и через web интерфейс. По умолчанию порт 8081

Удаленный доступ к записанному видео

Для удаленного доступа записанные фрагменты видео передаются в Яндекс Диск. Я сам написал на Python «легкую» программу для доступа к ЯДиску.

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

Хотел привести здесь код программы, тогда это уже будет тема про API Яндекс Диска на Python. Я сделаю это отдельной статьей.

Заключение

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

Из задачи на будущее: при движении около двери картинка с камеры появляется на медиацентре Kodi, если в это время я смотрю что-либо на нем (иначе он сам включает телевизор и он работает пока вручную не выключить). Вроде видеодомофона.

Читайте также  Что делать, если видеорегистратор не включается и горит красная лампочка? |

На заглавной картинке сосед-квартиросъёмщик «отдыхает». Распечатал это фото и положил ему в почтовый ящик. Стал менее эксцентричным в общественных местах. Знает, что все записывается.

Вторая фотография — попытка открывания моей двери. Но возможно, просто ошиблись.
Очень много записей, когда приходят странные люди, смотрят на камеру, закрывают лицо и уходят. Я даже после этого накупил муляжей и развесил по подъезду.

Источник:
http://habr.com/ru/post/343672/