Добрый день.
Понадобилось мне сделать систему видеонаблюдения на базе Open Source системы - ZoneMinder. Вот и краткая заметка об этом.
IP-адрес сервера: 192.168.1.180
Установим 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.
Беспроводные необходимо подключить к 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)
Подключим 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.
Переходим на вкладку Setup -> Users и жмем кнопку Add:
И добовляем пользоваетял user.
В открывшемся окне добавления камеры нас интересуют первые две вкладки: General и Source.
Заполняем вкладку General для D-Link DCS-930:
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
Камеры могут использоваться в одном из режимов (функций):
Вот что у нас в итоге получается:
Поискав по этой ошибки точного его решения найти не смог. Но смог завести картинку с камер.
Редактируем:
# 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 за это решение.
# 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.
Заходим http://192.168.1.180/zm
Нажимаем на общее количество Events'ов:
Далее жмем Show Filter Window:
В Use Filter выбираем PurgeWhenFull (меньше надо исправлять, чем стандартный фильтр) и заполняем как на скриншоте:
И жмем копку Save, вводим название фильтра и ставим галочку Run filter in background:
Опять жмем кнопку Save.
В Firefox на Windows и Linux все отображается корректно.
Здесь нас интересует в первую очередь такие параметры как:
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 секунд максимум.
Понадобилось мне сделать систему видеонаблюдения на базе 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'ов:
В 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 секунд максимум.
Альтернатива всяким Trassir-ам и Макроскопам?
ОтветитьУдалитьпункт 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"