четверг, 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 секунд максимум.

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

  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"

    ОтветитьУдалить
  3. Этот комментарий был удален автором.

    ОтветитьУдалить
  4. Хороший сайт знакомств всемирной сети для подходящих людей для создания брака. Большая база анкет пользователей со всего мира. Абсолютно бесплатная регистрация. Комфортный поиск по анкетам знакомств. Регистрируйтесь и встретьте новых друзей прямо сейчас.

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