MyTetra Share
Делитесь знаниями!
Строим систему видеонаблюдения и охраны на основе ZoneMinder
Время создания: 09.07.2015 09:11
Автор: Виталий Банковский
Текстовые метки: Linux, ZoneMinder, настройка, установка, видеонаблюдение
Раздел: Компьютер - Linux - Видео в Linux - ZoneMinder
Запись: xintrea/mytetra_syncro/master/base/1436422284smlhxkf3lj/text.html на raw.github.com

Статья была опубликована

в журнале Системный Администратор 2007

Выпуск №11 (60)

Иллюстрации не сохранились


Строим систему видеонаблюдения и охраны на основе ZoneMinder


Домик в деревне... Картошечка, укропчик... и никаких проблем. Но, увы, люди любят окружать себя материальными благами цивилизации. Дорогие вещи и машины, о которых нужно заботиться и охранять. Ну а раз так, попробуем сделать нашу жизнь немного легче – поставим виртуального сторожа, который никогда не спит.


Немного фактов из моей жизни, которые подвинули меня на создание системы видеонаблюдения. Я живу в съемной квартире, поэтому ни запретить хозяину квартиры приходить в мое отсутствие, ни установить охранную сигнализацию у меня нет возможности. К тому же я, как и многие автолюбители, несколько раз находил вмятину размером с чей-то бампер на двери своего автомобиля. Ну а отловить тех «супостатов», которые оставляют на капоте и дверях остатки своего интеллекта с помощью гвоздика, – заветная мечта каждого автовладельца. Поэтому было выбрано единственное возможное решение – установить систему видеонаблюдения, которая бы записывала события, а также сигнализировала о непрошеных гостях.


Задачи системы и выбор камер слежения

В моем случае потребовалось установить две камеры дома, одну – на парковке, и еще одну я поставил в здание, где расположены наши серверы. Из-за больших расстояний, а также из-за территориально разнесенных объектов наблюдения камеры с USB-интерфейсом были сразу отметены (хотя программное обеспечение, использованное в данном решении, позволяет комбинировать источники).

Также после посещения страниц с обзорами камер (источники указаны в конце статьи) стало понятно, что удел камер с USB-интерфейсом – охват близлежащих объектов (т.е. любительские телеконференции) и что цены на камеры с удовлетворительным качеством начинаются от $250 US. Исходя из этого был определен минимальный ценовой диапазон $250-$500 US и куплены камеры трех разных производителей, сравнительные характеристики которых приведены в таблице 1.


Таблица 1. Сравнительные характеристики камер

 

D-Link DCS-3220

AXIS 2100

Panasonic WV-NP244

Разрешение

640x480

640x480

640x480

Минимальная освещенность, люкс

1

3

1.5

Формат передачи данных

MPEG/JPG

MPEG/JPG

MPEG4/JPG

Стоимость

$220

$320

$340 за камеру и $80 за объектив

Оценка по 5-бальной системе

4

4

5

PPPoE

Да

Да

Да


Субъективные выводы. Камера Panasonic WV-NP244 оказалась лидером по качеству. Эта камера обладает сменной оптикой с фиксированными и переменными фокусными расстояниями: 2.8 mm, 4.5 mm, 3.8-8 mm, 5-40 mm, что позволяет выбрать необходимый угол обзора и, как следствие, оптимально охватить охраняемые объекты. Качество изображения, получаемое с Axis 2100 и с D-Link DCS-3220, почти одинаковое, поэтому по соотношению цена/качество лидером является D-Link DCS-3220.


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

В силу своей неприхотливости и отсутствия лицензионных проблем было решено построить систему на основе Linux. После недолгих поисков были найдены три бесплатных программных пакета для работы с камерами слежения:

  • NetAvis;
  • Elvis;
  • ZoneMinder.

ZoneMinder (далее по тексту – ZM) сразу вышел в фавориты благодаря поддержке всех возможных источников сигнала (устройство захвата видеосигнала, USB-камера, обновляемый локальный файл, видеопоток или файл со встроенного веб-сервера сетевой камеры). Также этот пакет обладает прекрасной документаций и тщательной проработкой всех компонент. Существует версия для FreeBSD.


Требования к системе

ZoneMinder работает на любом дистрибутиве GNU/Linux, в моем случае я устанавливал на дистрибутив Debian GNU/Linux. Пакет требует веб-сервер с поддержкой PHP, MySQL и библиотеку JPEG. Отдельно стоит упомянуть о требованиях к аппаратному обеспечению. Захват сигналов с камер и анализ изображений в режиме детектора движения требует серьезных ресурсов процессора. Мой домашний компьютер c двумя процессорами Xeon 2.8 ГГц был загружен на 40% при работе 4 камер при средней скорости 4-5 кадров в секунду. Позже я уменьшил частоту до одного кадра в секунду, и загрузка упала до 12%.


Установка программного обеспечения

Перед установкой необходимо настроить веб-сервер (в моем случае Apache) и подготовить базу MySQL. Пример конфигурации виртуального сервера Apache:

<VirtualHost 192.168.10.99>

  DocumentRoot /home/webcam/www

  ServerName webcam.example.com

  ScriptAlias /cgi-bin/  /home/webcam/www/cgi-bin/

  <Directory  /home/webcam/www>

    Options ALL +ExecCGI

     AllowOverride ALL

    DirectoryIndex index.php

  </Directory>

</VirtualHost>

Далее создаем базу MySQL, пользователя и назначаем ему полный доступ к этой базе:

mysql -p mysql;

mysql> create database zm;

mysql> grant all on zm.* to zmuser@localhost identified by 'put_password_here';

mysql> flush privileges;

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

adduser -d /home/webcam webcam


Компиляция и настройка ZoneMinder

Получаем исходные коды пакета с домашней страницы проекта http://www.zoneminder.com, раскрываем полученый архив, компилируем и устанавливаем:

tar -xzvf ZoneMinder-1.xx.xx.tar.gz

cd ZoneMinder-1.xx.xx

./configure –with-webdir=/home/webcam \

--with-cgidir=/home/webcam/www/cgi-bin/ \

--with-webuser=webcam –with-webgroup=webcam \

--with-mysql=

make

make install

Создаем символическую ссылку, чтобы при посещении http://webcam.example.com открывалась контрольная панель ZM:

ln -s /home/webcam/www/zm.php /home/webcam/www/index.php

Далее открываем конфигурационный файл /usr/local/etc/zm.conf и настраиваем параметры доступа к базе данных MySQL:

ZM_DB_HOST=localhost

ZM_DB_NAME=zm

ZM_DB_USER=zmuser

ZM_DB_PASS=put_password_here

Иницилизируем базу с помощью файла db/zm_create.sql, содержащего команды SQL для создания таблиц и первоначальных записей:

mysql -p zm < db/zm_create.sql

Если инсталяция прошла успешно и все верно сконфигурировано, то при посещении страницы http://webcam.example.com должна открыться панель управления ZM (см. рис. 1).

?

Рисунок 1. Главная панель управления ZM


Конфигурирование основных параметров

ZM включает огромное количество параметров, но я подробнее остановлюсь на основных настройках, которые необходимо поменять для запуска системы:

  • разрешение работы с удаленными камерами;
  • настройка адреса электронной почты для отсылки сообщений о событиях;
  • настройка адреса удаленного сервера FTP, куда ZoneMinder будет копировать кадры событий. Это особенно полезно, если компьютер, где установлен ZM, сам может пострадать от действий злоумышленников.

На главной панели управления ZM находится ссылка «Options», при нажатии на которую открывается конфигурационная панель. На рис. 2-4 будут приведены конфигуации всех трех пунктов, указанных выше.

?

Рисунок 2. Разрешение работы с удаленными камерами

?

Рисунок 3. Настройка адреса электронной почты, куда будут отсылаться сообщения о событиях. Здесь же можно поменять шаблоны сообщений

?

Рисунок 4. Указание параметров удаленного сервера FTP


Добавление камер в ZM

Следующим нашим шагом будет добавление источников сигнала. ZM поддерживает 3 типа источника сигнала:

  1. Камеры с интерфейсом USB или платы захвата видеосигнала, совместимые с V4L (Video for Linux).
  2. Локальный файл. Многие камеры, в частности, Panasonic WV-NP244, могут сами копировать эпизоды видеопотока на сервер FTP (где обычно и устанавливается ZM). Тогда ZM использует локальный файл, который постоянно обновляется камерой по протоколу FTP.
  3. Файл или поток на удаленном веб-сервере (например, веб-камера).

В моем случае использовался только один тип – третий.

Для добавления нового источника сигнала необходимо нажать на ссылку «Add New Monitor» и ввести параметры, описанные в таблице 2 и показанные на рис. 5


Таблица 2. Конфигурация источника сигнала

Параметр

Назначение

Name

Имя источника сигнала. Может быть, как и имя камеры, так и более осмысленное типа «Home», «Parking»

Source type

Тип источника сигнала

Function

Режим работы монитора. Пояснения приведены в таблице «Режимы работы мониторов»

Host name

Доменное имя  или IP-адрес используемой камеры. Если источник требует аутентификацию, то этот параметр может выглядеть, как username:password@ipa_address

Remote Host Path

Часть URL, следующая за доменным именем или IP-адресом


Таблица 3. Режимы работы мониторов

Режим

Пояснения

None

Выключен

Monitor

Доступен только просмотр в реальном времени

Modetect

Режим обнаружения движения. Записываются только фрагменты, на которых обнаружено движение

Record

Режим постоянной записи изображения

Mocord

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


?

Рисунок 5. Конфигурация источника сигнала


Замечание: на некоторых дистрибутивах Linux установлено ограничение на объем доступной разделяемой памяти ядра (Shared Memory), которую активно использует ZM. В дистрибутиве Debian значение по умолчанию равно 64 Мб. Создатель программы ZM рекомендует увеличить до 128 Мб:

echo 134217728 > /proc/sys/kernel/shmmax

Далее нужно повторить процесс добавления для всех камер, с которых мы хотим получать изображения. После того как все камеры добавлены, запускаем главную управляющую программу, которая запустит различные демоны, входящие в пакеты ZM, и затем будет контролировать их работу (например, перезапуск в случае «падения»):

zmpkg.pl start

Также необходимо создать скрипт, который бы запускал zmpkg.pl, и добавить его в процесс инициализации при запуске сервера. Для этого создаем файл /etc/init.d/webcam со следующим содержимым:

#! /bin/sh

export PATH="$PATH:/usr/sbin:/sbin: /usr/local/bin: /usr/local/sbin"

case "$1" in

  start)

        echo -n "Starting ZM"

        /usr/local/bin/zmpkg.pl start

        echo "."

        ;;

  stop)

        echo -n "Stopping ZM"

        /usr/local/bin/zmpkg.pl stop

        echo "."

        ;;

  *)

        echo "Usage: /etc/init.d/zm {start|stop}"

        exit 1

esac

exit 0

И добавляем этот скрипт в процесс инициализации операционной системы:

chkconfig webcam on

После запуска скрипта и обновления страницы панели управления ZM с помощью ссылки «Refresh» источники сигнала должны поменять цвет с красного (нет сигнала или данных) на зеленый (функционирует правильно), и вся панель управления может выглядеть следующим образом (см. рис. 6).


?

Рисунок 6. Главная панель управления ZM


Из интересных возможностей панели можно отметить следующие:

  • при нажатии на ссылку с именем камеры можно просмотреть события, происходящие перед камерой в реальном времени;
  • при нажатии на ссылки в колонке «Events» можно просмотреть записанные кадры, когда ZM обнаружил движение в поле видения камеры;
  • при нажатии на ссылку «Montage» откроется окно с всеми нашими камерами.


Обработка событий

Событие в концепции ZM – изменение состояния подсистем и детекторов. Например, обнаружение движения анализатором движения, отключение камеры, окончание дискового пространства и т. д.

ZM предоставляет инструменты для фильтрации событий и выполнения определенных операций, если условия фильтра подходят для какого-либо события:

  • сравнение настоящего времени с заданным;
  • имя камеры совпадает с указанным именем;
  • количество кадров при обнаружении движения;
  • окончание дискового пространства.

Все эти условия можно комбинировать по условиям «и/или», что дает возможность создавать обработчики событий практически на все случаи жизни.

Операции, которые могут выполняться при выполнении условий какого-либо фильтра, могут включать в себя:

  • архивацию эпизодов;
  • копирование кадров события на внешний сервер FTP;
  • отправку подробностей события на адрес электронной почты;
  • выполнение внешней программы;
  • удаление записи о событии (например, после копирования на внешний FTP-сервер).

Приведу пример создания типичного фильтра. Для этого необходимо нажать на ссылку «Filters» в главной панели ZM, затем перейти по ссылке «Show filter window», после чего откроется окно, как показано на рис. 7.


?

Рисунок 7. Создание фильтра


Данный фильтр будет срабатывать, если количество кадров в каком-то событии больше, чем один, и имя монитора – «Panasonic». После срабатывания этого фильтра ZoneMinder скопирует кадры, на которых было обнаружено движение, в архив и на внешний сервер FTP, отправит предупреждение по электронной почте, выполнит команду «/usr/bin/alarm-911.pl» и удалит запись об этом событии из списка событий на главной панели управления ZM. Для включения/выключения множественных условий нужно использовать символы «+» и «-» на правой стороне страницы.

После этого сохраняем фильтр, не забывая включить его в режим «Run filter in background» (см. рис. 8).


?

Рисунок 8. Сохранение фильтра


ZM по умолчанию перечитывает фильтры каждые 5 минут и запускает их каждую минуту. Пройдемся перед камерой и подождем 6 минут. Если все фильтры правильно настроены, то в файле /tmp/zmfilter.log можно обнаружить такие строчки:


Checking event 2380

Archiving event 2380

Creating upload file '/tmp/Panasonic-2380.tar.gz'

Uploading to 192.168.10.99

Sleeping for 60 seconds

Reloading filters

Sleeping for 60 seconds

Sleeping for 60 seconds

Sleeping for 60 seconds


Рекомендуется создать фильтр, который бы очищал дисковое пространство, если заполнение достигло определенного уровня. Для этого создадим новый фильтр и укажем, что нужно удалить все записи о событиях, если заполнение диска превысило 60%.


Разграничение прав учетных записей пользователей

ZoneMinder позволяет создать полноценную систему видеонаблюдения масштаба предприятия. Для этого ZM содержит средства по ограничению прав пользователей, как по управлению системой (модификация источников сигнала и фильтров), так и по разграничению доступа к отдельным камерам.

По умолчанию ZM – однопользовательская система, и перед началом добавления новых учетных записей необходимо включить опцию «Authenticate user logins to ZoneMinder» на конфигурационной панели, в подразделе «System». После этого надо зарегистрироваться в системе как суперпользователь «admin» с паролем по умолчанию «admin», в результате чего в конфигурационной панели появится еще один подраздел «Users» для управления учетными записями. Я не буду заострять внимание на этом стандартном списке, а сразу перейду к описанию свойств учетных записей.

После нажатия на ссылку «Add new user» появится окно (см. рис. 9).


?

Рисунок 9. Добавление новой учетной записи


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


Таблица 4. Набор привилегий учетной записи

Привилегия

Пояснения

Возможные уровни доступа

Stream

Разрешает/запрещает просмотр потока с камер

Разрешено

Запрещено

Events

Доступ к просмотру событий

Запрещено

Обзор

Редактирование

Control

Управление камерами (для камер, поддерживающих команды поворотов)

Запрещено

Обзор

Управление

Monitor

Модификация камер (источник сигнала, тип мониторинга и т. д.)

Запрещено

Обзор

Редактирование

System

Модификация системных параметров

Запрещено

Обзор

Редактирование


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


Ограничение области слежения

Бывают ситуации, при которых необходимо наблюдать, что происходит на охраняемом объекте, но при этом ограничить область, анализируемую с помощью детекторов движения. Например, поле обзора камеры захватывает дорогу и саму автомашину, но система должна реагировать, если обнаружено движение только возле охраняемого объекта (машины).

ZoneMinder предоставляет великолепные средства для  задания множественных областей в поле зрения камеры, в которых и происходит анализ движения.

Для управления областями необходимо нажать ссылку с именем камеры на главной панели управления и перейти по ссылке «Zones», в результате чего откроется новое окно со списком зон.

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

После нажатия на ссылку «Add zone» появится удобная панель для задания четырехугольной области (см. рис. 10).


?

Рисунок 10. Задание контролируемой зоны


Принцип работы таков:

С помощью мышки выбирается одна из точек прямоугольной области в поле ввода координат этой точки. Верхние две точки – «1» и «2» слева направо, нижние две – «4» и «3». Да, цифры «4» и «3» местами не перепутаны. После этого мышка наводится на новые предполагаемые точки и нажимается левая кнопка мышки. Таким же образом перемещаются оставшиеся 3 точки.

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


Заключение

Данная статья описывает процедуру создания базовой системы слежения. За рамками статьи остались такие интересные возможности, как: взаимодействие с другими компонентами концепта «Электронный дом» по протоколу X10; привязка детекторов движения к определенным областям.


Внимание! Перед установкой системы ZoneMinder в общественных местах рекомендуется проверить местные законы на правомочность использования. Во многих странах съемка людей без их разрешения запрещена.


Так же в этом разделе:
 
MyTetra Share v.0.59
Яндекс индекс цитирования