четверг, 5 февраля 2009 г.

Опыт создания системы видеонаблюдения под Linux Ubuntu 8.10

Часть 1. С чего все началось.

«Как перестать беспокоиться и начать жить» Деил Карнеги«Как не бздеть и в натуре отягиваться» то-же в адаптации Гоблина

Самый дорогой ресурс – это наше время. Я ухлопал не один день жизни прежде чем написать эти строки и если мои записки сэкономят чье-то время, значит я таки не зря потратил свое.
Идея создания в своей квартире серьезной системы видеонаблюдения будоражила воображение довольно давно. Поменяв место жительства, я вдруг обнаружил себя в окружении недружелюбных и пакостливых соседей. В один из дней, личинка дверного замка была кем-то безнадежно испорченной. Настало время для ассиметричного ответа агрессорам...

Конечно, можно было бы ограничиться домофоном с записью на флеш, или простеньким видеорегистратором на несколько аналоговых камер с инфракрасной подсветкой. Но где-же тогда трудности и сложности за преодоление которых мы будем себя уважать в дальнейшем :о)

Кому лень читать опус и хочется быстро решить проблему, сразу переходите к топику "Видеонаблюдение под Ubuntu для "чайников"".



Старичек РС под новенькой Ubuntu 8.10, мирно шелестевший над выкачиванием торрентов, был назван видео-сервером и мы с ним окунулись в просторы мировой сети в поисках ответов на поставленную задачу. Все ресурсы в один голос направили нас в сторону программного пакета ZoneMinder обещавшего нам полное счастье и установку из репозитория. В дальнейшем все оказалось не столь радужно, но прежде, для полноты картины, стоит упомянуть альтернативные продукты:

Совсем бесплатные:
Motion - умеет только распознавать движение, просмотр, базу даных надо сочинять отдельно.

Профессиональные полу-платные отечественные:
AVReg - все очень доступно и на русском языке, но бесплатно можно использовать не более 4-х камер.
MutliVision - ПО бесплатное, но похоже привязанное к конкретному оборудованию СМП-сервиса

Высокопрофессиональные и шибко-платные – западные даже под Sun Solaris:
IPconfigure ESM 4.5
NetAvis

Наверняка, есть и другие, но мне они не попались.

Часть 2. Железная.

Спасибо за демонстрацию, теперь я должна подумать.
Не знал, что эта функция включается у вас отдельной опцией?

Итак, выбор сделан, пора приступать к внедрению.
Наблюдаемое пространство логически разбивалось на два периметра: внутренний и внешний. Внутренний периметр вполне покрывался USB 2.0 камерами. (максимальная длинна кабеля без концентратора - 5 метров).
На внешний периметр подвернулись со скидкой IP камеры D-link DCS-920 и D-link DCS-2120. Распаковав новенькие коробочки я был несколько обескуражен. Понятно, что DCS-920 будет отличаться от более продвинутой коллеги, но настолько разительного отличия трудно было предположить. Такое впечатление, что камеры сделаны совершенно разными производителями, даже утилиты у каждой из них свои и полностью игнорируют собрата.
DCS-2120 почти втрое дороже, так как умеет вещать не только в MJPEG, но и честный MPEG4 со звуком способна распознавать и фиксировать движение. Все эти преимущества бесполезны в текущей версии ZoneMinder 1.23.3, но эффективны при использовании камеры как отдельного охранного устройства.

Опустим историю про то, что DCS-2120 оказалась с заводским браком и почти месяц ушел на то чтобы получить ее из сервиса (там приятные люди, остальное обсуждать не будем)
Все когда нибудь кончается, и хорошее, и плохое.

Тем кто не успел еще потратить свои деньги, советую сперва почитать рекомендации софтописателей и ознакомится с проблемами подключения плат видеозахвата под Линуксом.

Следующий месяц представлялл из себя длительное восхождение состоящее из непрерывной вереницы проблем, поиска их решения и преодоления очередной ступени к победе.
Еще не решив что и как, я запустил установку ZoneMinder с целью «чисто позырить».
Тут то меня и ждало первое Западло*.

* Под «Западлом» отсюда и далее мы будем понимать глупые и совершенно лишние проблемы, которых по умолчанию следовало избежать, решение которых отняло у автора силы и время.


Часть 3. «Эротическая»

«Как Linux не крути – все сервер получается»

Западло #1: База ZM MySQL не работает.

Пакет ZoneMinder взаимосвязан с целой вереницей продуктов
mysql
apache2
php5
php5-mysql
libapache2-mod-auth-mysql
ntpdate
ffmpeg

проигнорировав предложение установить root пароль для MySQL я обрек себя на страдания.

Как показала дальнейшая практика, самый оптимальный вариант - это последовательная установка отдельных пакетов в соответствии с описанием. В противном случае вы обречены разбирать свои и чужие косяки.
Самое толковое описания по установке встретившееся мне:

Но, мы торопим события. Вернемся к MySQL:
Запускаем терминал от имени root (путь) это позволит нам сразу залогиниваться в MySQL как root и не париться с дополнительными параметрами.

1. Создадим базу ZM пропишем в ней пользователя zmuser и дадим права и пароль zmpass:

mysql mysql <> grant select,insert,update,delete on zm.* to zmuser@localhost identified by zmpass;
mysql> quit
mysqladmin reload

2. Редактируем /etc/zm/zm.conf:
ZM_PATH_BUILD => /usr/share/zoneminder
ZM_PATH_WEB => /var/www/localhost/htdocs/zoneminder
ZM_PATH_CGI => /var/www/localhost/cgi-bin

Не забываем проверить логин (zmuser) и пароль(zmpass) пользователя базы zm
3. Запускаем в браузере адрес: http://localhost/zm/zm.php
4. Дефолтные логин/пароль: admin/admin.

Западло #2: При запуске интерфейса zm в браузере выскочили ошибки «проверьте строки в .ppt»

В разных описаниях по установке выбраны совершено различные директории. Внимательно проверяем что и куда у нас свалилось. исправляем пути и права. В моем случае было так

/usr/share/zoneminder - основная папка програмы. Причем
/usr/share/zoneminder/cgi-bin есть ссылка на /usr/lib/cgi-bin – модуль формирования видеопотока
/var/cache/zoneminder – сюда адресованы папки куда валится поток и картинки
/etc/zm/ - тут лежат настройки для apache и zm
/etc/apache2/zoneminder
Западло #3: Подключение USB камеры.
Сперва мне в руки попалась QuickCam® Sphere AF. Убив неделю на попытки заставить ее вертеться за объектом под Ubuntu так же, как под Windows я надолго успокоился и остановил свой выбор на QuickCam® E 3500 Plus™
Предчувствия оправдались, в списке поддерживаемых ZM USB устройств этот девайс так-же не значился. В качестве решения предлагалась утилита mjpg-streamer способная организовать вещание камеры по определенному порту. Осталось создать кнопку с консольной коммандой:

mjpg_streamer -i "input_uvc.so -r 320x240 -f 6" -o "output_http.so -p 8080" -b
или
mjpg_streamer -i "input_uvc.so -r 640x480 -f 15" -o "output_http.so -p 8080" -b
и вторую кнопку для остановки вещания:
killall mjpg_streamer
в настройках камеры прописываем:
http://localhost:8080/?action=stream
Одновременное использование камеры в ZM и другими программами (Skype) – невозможно.

Западло #4: Подключение Wi-Fi IP камер:
Изначально очень не хотелось тянуть провода. Питание еще ладно, но витую пару тянуть стоило если бы камеры поддерживали РоE. Однако, тестовые испытания показали неприятный факт: в момент подключения к точке доступа еще одного устройства поток с камеры прерывается. ZM теряет источник сигнала и требует специальных действий для его восстановления. Кабель в очередной раз доказал свои преимущества.
В остальном параметры подключения сводятся к правильному прописыванию пользователя как на самой камере, так и в настройках ее подключения в ZM.
Function – Modect
Remote Host Name - login:password@IP_adres
Remote Host Path - /cgi-bin/video.jpg (или /video.cgi зависит от камеры)
Западло #5: Подключение MPEG4 камеры
Текущая 1.23.3 версия не поддерживает подключение MPEG4 камер, их поддержка заявлена с версии 1.24, есть некое решеньеце желающие попересобирать и покорячиться могут попробовать.

Западло #6: Камеры подключаются, но потом зеленый цвет их IP адреса меняется на красный, записей нет.
Zoneminder в системе выступает как пользователь www-data этому пользователю и его группе нужны права запись в папки. После раздачи прав картинки начинают сохраняться.

Западло #7: Все время горит аларм и запись не прерывается. Данные доступны только после остановки сервиса
У программы несколько режимов работы. В режиме «Record» запись ведется непрерывно, Что бы записывать только события – надо выставить ...

Западло #8: Запись стартует по движению но не прерывается.
Проблема возникает если работает только одна камера. В настройках камеры убираем значение поля Linked Monitors.

Западло #9: На одно реальное событие плодится куча коротких записей.
В настройках камеры надо отрегулировать буферы.
для DCS-920
Image Buffer Size – постоянно поддерживаемый буфер не рекомендется больше 50
Warmup Frames – количество фреймов для отсеивания ошибок (10)
Pre Event Image Count – будут добавлены в начало записи (50-10 = 40)
Post Event Image Count – будет добавлена в конец записи (400)

для DCS-2120
Image Buffer Size – постоянно поддерживаемый буфер не рекомендется больше 30
Warmup Frames – количество фреймов для отсеивания ошибок (10)
Pre Event Image Count – будут добавлены в начало записи (20)
Post Event Image Count – будет добавлена в конец записи (100)
Западло #10: Firefox грузит CPU.
ZoneMinder проще всего работает под Firefox, для просмотра видео под другими браузерами надо отдельно париться с настройкой cambozola.
Однако Firefox умудряется нахлобучивать процессор на все 100% не зависимо от его мощности. Установка сборок оптимизированных под процессор и операционную систему значительного утешения не принесли. Производители рекомендуют снижать частоту и размер изображения, уменьшать количество зон и т.д. Слабенькое утешение.

Западло #11: Как увидеть ZM из офиса?
Как настоящий «ойтешник» я не мог успокоиться на успехе достигнутом локально.
Мне нужен был успех доступный в мировом масштабе из любой точки планеты.
Путь пакета от домашнего сервера до ноутбука на работе пролегал через внутреннюю домашнюю сеть отгороженную маршрутизатором, ADSL от Стрима и корпоративный VPN.
Назначаем статический IP по MAC адресу видеосервера.
Получаем динамический DNS адрес для маршрутизатора. На сайте DynDNS.com был зарегистрирован пользователь и поднят динамический адрес. Его параметры введены в маршрутизатор.
Приказываем apache слушать еще один порт, этот же порт открываем на маршрутизаторе для IP видеосервера.
Удалено набираем http://DynDNS-адрес:ПОРТ/zm
В моем маршрутизаторе не работает loopback, поэтому проверить результат смог только в офисе.
До кучи можно поднять удаленный рабочий стол по VNC, только тормозить будет ужасно, хотя есть еще ssh.
При удаленном подключении пропадает видео. Просто не пролезает по каналу. Трейсинг показывает потери пакетов внутри Стрима. Можно смотреть слайдами, не так удобно, но лучше чем ничего.

Западло #12: После создания пользователей пропало видео
При включении параметра ZM_OPT_USE_AUTH пропадает стримовое видео как в мониторах, так и при просмотре сохраненных событий. Помогает только новая установка из исходников или выставление параметра ZM_AUTH_RELAY в none (сперва попробуйте plain, может повезет)

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

















Часть 4. Что дальше?

К сожалению, автоматические пулеметные туррели
плохо вписываются в интерьер средней городской квартиры.

Можно ли развить полученную систему видеонаблюдения в полноценную охранную систему, с СМС уведомлениями, удаленно управляемыми элементами активной защиты?
Первой идеей, пришедшей в голову, было переделать какой нибудь USB светильничек в генератор слезоточивого газа на базе пиропатрона.
Внутренняя камера, зафиксировав движение, отсылает СМС уведомление и снимок на е-маил. Смотрим с телефона почту и активируем заряд. Гуманно, но процесс займет не менее 5 минут. Многовато. Можно, конечно, сперва жахнуть, а потом уже разбираться что к чему...
Для начала разговора:
  1. Читаем приказ Минздрава от 22 октября 2008 года за № 584н "Об утверждении норм допустимого воздействия на человека поражающих факторов гражданского оружия самообороны"
  2. Принимаем во внимание, что старики и дети чаще попадаются в охранные ловушки нежели настоящие жулики.
Если вам все же очень хочется использовать активную систему защиты, рекомендую посмотреть в сторону генераторов автоматического пожаротушения.
  • методика применения аналогичная
  • не содержит токсических и раздражающих компонент
  • одновременно гарантирует защиту от возгорания
  • дышать после срабатывания совершенно нечем
  • пострадавший выглядит весьма комично
Теперь вернемся к суровой реальности. Каким образом формировать уведомления? Вариантов получается не так много.
  1. Подключить модем и настроить автодозвон и проигрывание файла
  2. Настроить е-маил уведомления и портировать их через гейт в СМС
  3. Подключить мобильный телефон к компьютеру и отправлять с него СМС
Последний вариант самый надежный, т.к. использует независимый канал передачи данных.
Хуже всего с е-маил-СМС гейтами. В теории, письмо должно отправляться провайдеру услуг мобильной связи на адрес типа номерабонента@sms.провайдер.ru В ряде случаев это работает, но в Москве отключено для защиты от спама. Работают только СМС уведомления о приходе почты на адреса типа Mail.Ru, Yandex.ru, Rambler.ru или Pochta.ru

Западло #13: Настройка уведомлений на е-маил.
Как выяснилось, обе мои камеры в этой области могут гораздо больше чем ZoneMinder.
В каждая может обратиться на SNMP сервер, предъявить логин и пароль и отправить письмо с вложенной фоткой. В настройках программы место для пароля отсутствует, т.к. по умолчанию используется nulmail. Предполагается, что где-то рядом находится корпоративный е-маил сервер и мы можем к нему обратиться как root. В противном случае, этот самый сервер, предполагается поднять, что само по себе изумительно. Поля для пароля можно получить двумя патчами, у меня они появились, но письма не уходят, а копаться пока нет сил.


При написании статьи использованы материалы:
Организация видеонаблюдения (видеорегистратор) на базе Ubuntu
Журнал «Системный Администратор» Ноябрь 2007
Video Surveillance With ZoneMinder On Ubuntu(en)

2 комментария:

  1. Слушай, ты гений, спасибо огромное
    Во всяком случае, ты спас меня от очень длительного чтения англоязычных текстов

    А расскажи, пожалуйста, поподробнее о разнице между моделями камер? Ведь она же не только в том, что боле продвинутая имеет свой датчик движения?





    И ещё вопрос: из всего, что я за сегодня прочитал на эту тему, я никак не могу для себя вывести ещё одну вещь.
    У меня возникла идея организовать всё чуть-чуть хитрее -- нацепить 2-3 камеры на роутер с прошивкой dd-wrt, после чего пробросить с него порты во внешний интернет. После этого поставить AVReg или ZoneMinder на компьютер, не находящийся в той же квартире, что и камеры (при этом скорость соединения достаточно хорошая -- около 8 мегабайт в секунду).
    Так вот, вопрос в том, можно ли это организовать так, чтобы сервер по слежением за движением работал вообще в другой квартире и не был соединён в локалку с камерами? При этом чтобы можно было бы вести запись при срабатывании датчика движения

    ОтветитьУдалить
  2. Не получается подключить к zoneminder в качестве удаленной камеры китайский внешний видеорегистратор EDR-204H на 4 видеокамеры компании CCDCAM Security systems (они же Shenzhen CCDCAM Technology Co.,Ltd, www.ccdcam.cn).
    Используемый Протокол - H.264.

    Порты видеорегистратора:
    - command port 3357
    - data port 3358
    - talk port 3360
    - http port 80
    IP регистратора - 192.168.1.110

    Перепробовал такие варианты настроек в zoneminder:
    - remote host name: 192.168.1.110, admin:88888888@
    192.168.1.110

    - remote host port: 80, 3357, 3358, 3360
    - remote host path - пустой, т.к. других данных не нашел
    Zoneminder пишет "Unable to probe local cameras, status is '255'".


    К видеорегистратору идет софт Remote Surveillance DVR Client некоего прозводителя NetVideo, данных о котором в сети нет кроме ссылки http://remote-surveillance-dvr-client.software.informer.com/.
    После установки также запускается WEB-клиент с 192.168.1.110, но только в windows (т.е. вероятно это не клиент в самом видеорегистраторе).
    Софт работает, для входа спрашивает учетную запись (admin:88888888).

    Насколько я понимаю, доступ идет по http, а не по rtp (указал в настройках zoneminder).
    Также вместо формата jpeg указал mpeg в zoneminder.
    Пробовал настроить другой софт видеонаблюдения под windows xp - тоже не смог.

    От всех ответов на вопросы о настройках производитель таллантливо уходит.


    Краткое описание регистратора - http://www.diytrade.com/china/4/products/6959779/H_264_Stand-Alone_DVR.html

    Пожалуйста, подскажите:
    1. Что указать в remote host name, remote host port, remote host path?
    2. Как узнать remote host path?
    3. Есть ли утилита для перебора вариантов настроек IP-камеры

    Также буду признателен за пример настройки любого видеорегистратора с учетом 4х видеокамер (вероятно, где-то должна указываться соответствующая видеокамера).

    ОтветитьУдалить