четверг, 16 мая 2013 г.

Система видеонаблюдения (ZoneMinder 1.24.2)

Добрый день.

Понадобилось мне сделать систему видеонаблюдения на базе Open Source системы - ZoneMinder. Вот и краткая заметка об этом.
IP-адрес сервера: 192.168.1.180

1. Установка ZoneMinder


 Установим ZoneMinder из репозитория:
# sudo apt-get install zoneminder 

Создадим символьную ссылку на конфиг Apache2 для ZoneMinder'a:
# sudo ln -s /etc/zm/apache.conf /etc/apache2/conf.d/zoneminder.conf

Перезагрузим Apache2:
# sudo /etc/init.d/apache2 force-reload

Отредактируем переменные ядра:
# sudo nano /etc/sysctl.conf
Для увеличения кол-ва и объема Shared Memory добавляем:
kernel.shmall = 167772160
kernel.shmmax =167772160

И перезагружаемся, если же хотим увидеть эффкт сразу то:
# sudo echo 167772160 > /proc/sys/kernel/shmall
# sudo echo 167772160 > /proc/sys/kernel/shmmax
# sudo sysctl -p

Логи находятся тут: /tmp и тут /var/log/syslog.


2. Установка камер

2.1 Подключение камер к сети

У меня есть всего 4 камеры: 2 D-Link DCS-930 (беспроводные) и 2 Axis 206 (проводные).

Беспроводные необходимо подключить к wi-fi сети предприятия, пусть будет kazmawifi.
Подключив камеры по кабелю к сети, я увидел, что D-Link камеры получили адреса: 192.168.1.110 и 192.168.1.111, Axis камеры получили адреса: 192.168.1.120 и 192.168.1.121.

Обнаружить камеры AXIS в сети позволяет их утилита: AXIS IP Utility v2
Так как у меня не было доступа к роутеру, то D-link камеры я искал с помощью утилиты nmap:
 # sudo nmap 192.168.1.*

D-Link камеры можно вычислить по такому выводу:
Nmap scan report for 192.168.1.110
Host is up (0.0052s latency).
Not shown: 997 closed ports
PORT    STATE SERVICE
21/tcp  open  ftp
80/tcp  open  http
443/tcp open  https
MAC Address: F0:7D:68:02:29:08 (D-Link)


2.2 Настройка D-Link DCS-930



Подключим D-Link'и к kazmawifi.

Переходим по адресу: http://192.168.1.110/
Выбираем вкладку SETUP -> Wireless Setup:
Тут активируем wi-fi установив значение WIRELESS SETTINGS в Enable.
Находим нужный нам вайфай нажав на кнопку Site survey.
Не забываем ввести пароль, в поле Pre-Shared Key, и жмем Save Settings.

Теперь нам необходимо создать пользователя из под которого будем забирать изображения с камер. Переходим во вкладку MAINTENANCE:
И добавляем нового пользователя введя его логин, пароль и нажав кнопку Add в разделе ADD USER ACCOUNT.
Я добавил пользователя user, на камерах D-Link DCS-930.

2.3 Настройка Axis 206.

Переходим по адресу: http://192.168.1.120/
Переходим на вкладку Setup -> Users и жмем кнопку Add:
И добовляем пользоваетял user.

3. Добавление камер в Zoneminder.

Переходим по адресу:  http://192.168.1.180/zm и нажимаем кнопку Add New Monitor.

В открывшемся окне добавления камеры нас интересуют первые две вкладки: General и Source.
Заполняем вкладку General для D-Link DCS-930:
Name: DCS-930-1 - Имя камеры
Source Type - Remote - удаленная камера .
Function - Modect - записываем только, когда срабатывает Alert/Alarm.
Enabled - On -  включаем камеру.
Maximum FPS - 10 - частота изменения картинки.
Alarm Maximum FPS - 10 - частота изменения картинки при Alert/Alarm.
Остальное оставляем как есть, нас это устраивает.

Теперь перейдем к заполнению вкладки Source:
 Для D-Link DCS-930:

Remote Protocol - HTTP - протокол общения между сервером и камерой.
Remote Method - Simple
Remote Host Name - user:password@192.168.1.110 - Логин:Пароль@IP-адрес.
Remote Host Port - 80 - порт.
Remote Host Path - /image/jpeg.cgi - путь откуда будем забирать изображение.
Remote Images Colours - 24 bit colour - цвет.
Capture Width (pixels) - 320 - высота.
Capture Height (pixels) - 240 - ширина.
Orientation - Normal - ориентация.

Жмем Save.

Для Axis 206 вкладка General заполняется аналогичным образом, только имя измините.

А вот заполнение вкладки Source для Axis 206:
Remote Protocol - HTTP
Remote Method - Simple
Remote Host Name - user:password@192.168.1.120
Remote Host Part - 80
Remote Host Path - /axis-cgi/mjpg/video.cgi?resolution=640x480 - путь откуда забираем картинку
Remote Images Colours - 24 bit colour
Capture Width (pixels) - 640
Capture Height (pixels) - 480
Orientation - Normal

Камеры могут использоваться в одном из режимов (функций):
  • Monitor – только просмотр изображений с камеры, без какого-либо анализа.
  • Modect (от Motion Detection) — данный режим производит анализ кадров и при возникновении движения ведет запись.
  • Record – постоянная запись с камер.
  • Mocord (гибрид Modect и Record) — ведется постоянная запись с камер, в случае возникновения движения — с подсветкой областей детекции.
  • Nodect – специализированный режим, использующийся вместе с внешними триггерами.


Вот что у нас в итоге получается:

4. Проблемы и их решения с которыми я столкнулся

4.1. Если при просмотре изображения с камеры нет изображения, а в логе апача: /var/log/apache2/error.log видим:

[Wed May 15 09:43:56 2013] [error] [client 192.168.1.161] array (\n 0 => \n array (\n 'file' => '/usr/share/zoneminder/ajax/stream.php',\n 'line' => 55,\n 'function' => 'ajaxError',\n 'args' => \n array (\n 0 => 'socket_sendto( /tmp/zms-741127s.sock ) failed: No such file or directory',\n ),\n), \n 1 => \n array (\n 'file' => '/usr/share/zoneminder/index.php',\n 'line' => 124,\n 'args' => \n array (\n 0 => '/usr/share/zoneminder/ajax/stream.php',\n ), \n 'function' => 'require_once',\n),\n), referer: http://192.168.1.180/zm/index.php?view=watch&mid=2

Поискав по этой ошибки точного его решения найти не смог. Но смог завести картинку с камер.

Редактируем:
# sudo nano /etc/apache2/conf.d/zoneminder.conf

и добавляем в конец такие строки:
ScriptAlias /cgi-bin/zms "/usr/share/zoneminder/cgi-bin/zms"
ScriptAlias /cgi-bin/nph-zms "/usr/share/zoneminder/cgi-bin/nph-zms"

Перезапустим апач:
sudo /etc/init.d/apache2 restart
или
sudo service apache2 restart

Можно и не так брутально, а просто заставить апач перечитать конфиги:
sudo /etc/init.d/apache2 reload
или
sudo service apache2 reload

Спасибо gentoo.ru за это решение.


4.2. Нужно изменить расположение изображений с камер.

Изменим место расположения фотографий с камер, которые снимаются по event'ам:
# sudo mkdir /home/zm - Создадим каталог /home/zm
# cd /usr/share/zoneminder - Перейдем в каталог с ZoneMinder
# sudo ln -s /home/zm /usr/share/zoneminder/eventsnew - Создадим символьную ссылку eventsnew на каталог /home/zm

Заходим в панель управления ( http://192.168.1.180/zm ) и переходим на страницу Options и открываем вкладку Paths, необходимо изменить значение DIR_EVENTS на eventsnew.


4.3. Необходимо хранить изображения не старше 2 недель.

Настроим ротацию изображения (что бы видео старше 2 недель удалялись):
Заходим http://192.168.1.180/zm
Нажимаем на общее количество Events'ов:
 Далее жмем Show Filter Window:

В Use Filter выбираем PurgeWhenFull (меньше надо исправлять, чем стандартный фильтр) и заполняем как на скриншоте:

И жмем копку Save, вводим название фильтра и ставим галочку Run filter in background:
Опять жмем кнопку Save.

4.4. Не отображаются Event'ы в Chrome (Windows) и Chromium (Linux).

В Windows при просмотре Event'ов появляется ошибка: ClassNotFoundException с текстом: com.charliemouse.cambozola.Viewer:
В Firefox на Windows и Linux все отображается корректно.

4.5 Короткие event'ы.

Если event'ы записываются часто, но слишком короткие - нам их неудобно просматривать. И вот решение этой проблемы. В окне редактирования камеры нас интересует вкладка Buffers.
Здесь нас интересует в первую очередь такие параметры как:
Image Buffer Size (frames) - количество изображений, которое может хранится в буфере.
Pre Event Image Count - количество изображений, которое необходимо запоминать ДО события (Alarm). Значение должно быть не более Image Buffer Size (frames) / 2.
Post Event Image Count - количество изображений, которое необходимо запоминать ПОСЛЕ события (Alarm). Значение может быть любое,но слишком большие значения нам не нужны, так как будет записываться слишком много изображений, а так же некоторые камеры отказывались работать при сильно большом значении.
Например камеры D-Link DCS-930 не хотят работать при значении больше 40, а камеры Axis 206 при значении больше 25. Но этих значений мне вполне хватает.

После выставления таких параметров мы можем радоваться действиям продолжительностью 30-60 секунд, хотя раньше они писались по 5-15 секунд максимум.

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

  1. Альтернатива всяким Trassir-ам и Макроскопам?

    ОтветитьУдалить
  2. пункт 4.2. таким образом не работает на Ubuntu 14.04. В вики написано решение https://wiki.zoneminder.com/Using_a_dedicated_Hard_Drive. Но и оно мне не помогло (я правда 2 винта монтировал в одну папку через mhddfs, может поэтому)
    В конфиге написано "ZM_DIR_EVENTS
    The directory you specify here cannot be outside the web root. This is a common mistake. Most users should never change this value. If you intend to record events to a second disk or network share, then you should mount the drive or share directly to the ZoneMinder events folder or follow the instructions in the ZoneMinder Wiki titled Using a dedicated Hard Drive"

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