ZoneMinder для чайника или прелести секса с видеонаблюдением.

8 сообщений / 0 new
Последнее сообщение
RootAdmin
Не в сети
Зарегистрирован: 13/12/2010
ZoneMinder для чайника или прелести секса с видеонаблюдением.

Наверно каждому может пригодиться простая система видеонаблюдения. Следить за подъездом, за машиной... Да хоть за котом!
*оффтоп on*
Итак, начнем с предистории. Есть торговая немаленькая фирма, у которой есть склад. Тоже немаленький. Особенностью данного склада является необходимость видеозаписи происходящего на столах "контроллеров".
Система эта организована следующим образом: Есть выделенный "сервер" под WinXP Prof. Стандартная мать, процессор, но винтов - три, два из них по 2Т, для архива. И на борту - плата видеозахвата на 16 аналоговых камер.
Работает под удивительно кривым виндовс-софтом. Естественно, закрытым. Причем - запускается только с правами администратора, только при открытом сеансе, сервисом работать не умеет. Да и вообще - мне не нравится.
Видеонаблюдение обслуживает ИП, причем самый знающий сотрудник - просто "самоходный инсталлятор".
*совсем_оффтоп on*
Я собирался у него поучиться работе с этой системой на примере ее переустановки.
Воскресенье, выходной, никто не работает. Собираемся на складе - я и специалист.
Я привез с собой новый винт - и предлагаю на него поставить систему, чтобы не трогать уже установленную. После обсуждения целесообразности такого подхода он соглашается. Лень ему было подождать минут 40...
А в дальнейшем оказалось - очень верный подход. Wink
Потому что _после_ установки "специалист" (С) задал мне удивительный вопрос: "Ну что, остальные винты форматируем?". Я(Я): "8-| ЗАЧЕМ?!".
С - Ну, я всегда так делаю.
Я - А как же использовать сужествующие записи?
С - Я не умею переносить!
Я - А на*** мы все это делали?
С - Ну, Вы ж хотели переустановить...
С - Я просто знаю что и как делать, на какие кнопки нажимать, я много лет этим занимаюсь и лучше меня нет в регионе!
Я - То есть Вы хотите удалить все записанное просто потому что не знаете как оно хранится?!
С - да.
Я - А если бы винт накрылся системный?
С - ...
*совсем_оффтоп off*
По итогам общения (я был довольно корректен и не стал говорить "спецу" все, что думаю) - подумал о том чтобы неплохо поставить свою систему, с блекджеком и ш...(возможностью снимать эротику).
*оффтоп off*

15 минут в гугле дали двух кандидатов: Motion и Zoneminder www.zoneminder.com
Собрана тестовая машинка: интегрированная мать Asus P5KPL, процессор Cel 2.5 Ггц, память 2ГБ.
В качестве системного диска выбрана Compact Flsah на 8 ГБ - через переходник на IDE.
Для архива - SATA диск на 320 ГБ.

Шаг 1: Установка системы
Выбор пал на Debian, так как более привычен.
Флешка в картридер своей машины (вот в этом - главный плюс! В случае чего - в 2 минуты выдергивается, подмонтируется и правится).
Делаем три примари раздела:

/dev/sdb1 * 1 6 48163+ 83 Linux
/dev/sdb2 7 870 6940080 83 Linux
/dev/sdb3 871 974 835380 83 Linux

Первоначально хотел отвести 3 раздел подж своп - но одумался.
Монтируем второй раздел, debootstrap - и через 5 минут получаем систему. Я ставил squeeze - так как ZM версии 1.24 требует свежих пакетов.
Монтируем первый раздел и ставим grub. Далее chroot в установленную систему, apt-get install mc ssh
Настраиваем сеть, apt, меню груба, ставим ядро (у меня 2.6.32-5-686).
Фух. Флешку - в тестовую машину, запускаем.

apt-get install zoneminder

Он тянет за собой все что нужно, так что пока скачаются мускуль и апач - пьем %любимый_напиток% и/или курим.

Шаг 2: Настройка
Тут я буду использовать инфо из инструкции по установке с оффсайта: http://www.zoneminder.com/wiki/index.php/Documentation#Installation_from...
Первым делом создаем ссылку для апача на конфиг сайта ZM:

sudo ln -s /etc/zm/apache.conf /etc/apache2/conf.d/zoneminder.conf

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

/etc/init.d/apache2 restart

Важно! Добавляем апача в группу video. Если не сделать - потратим лишний час на выяснение, почему нет картинки.

adduser www-data video

Заходим на http://Address_of_server/zm/index.php - и наблюдаем интерфейс.

И самое веселое - начинаем пытаться увидеть свои камеры...
Для теста я использовал дешевую и распространенную Web-камеру Defender G-Lens 324 (около 350 рублей цена)
Выглядит она так:

videoserv:/etc/apt# lsusb
Bus 005 Device 002: ID 093a:2620 Pixart Imaging, Inc.
Ставим пакет v4l-conf.
Делаем v4l-info /dev/video0
Видим самое главное:
general info
VIDIOC_QUERYCAP
driver : "pac7311"
card : "USB Camera (093a:2620)"
bus_info : "usb-0000:00:1d.3-2"
version : 2.7.0
capabilities : 0x5000001 [VIDEO_CAPTURE,READWRITE,STREAMING]

То есть определилась.
Пытаемся настроить в ZM:
Жмем "Add new monitor"
переходим на вкладку "Sources"
Заполняем:
Device Path /dev/video0
Capture Method Video For Linux version 2
Device Channel 0
Device Format PAL
Capture Palette JPEG
Capture Width 640
Capture Height 480
Preserve Aspect Ratio
Orientation Normal

Ссылки сверху (Probe и Presets) - нам бесполезны, предназначены для опознания нескольких сетевых камер.

Сохраняем, после обновления страницы смотрим на _цвет_ пути источника в колонке Source. Если красный - что-то не так.
Не отчаиваемся, клацаем в веб-интерфейсе на имя созданного монитора... И - беспорядочные полосы, помехи или вообще черный экран.
Ничего страшного. Для начала - открываем в консоли tail -f /tmp/* и посматриваем туда на предмет дебага.
Для теста устройства используем команду

videoserv:/etc/apt# zmu -d /dev/video0 -v -q
Video Device: /dev/video0
General Capabilities
Driver: pac7311
Card: USB Camera (093a:2620)
Bus: usb-0000:00:1d.3-2
Version: 2.7.0
Type: 0x5000001
Supports video capture (X)
Does not support video output
Does not support frame buffer overlay
Does not support VBI capture
Does not support VBI output
Does not support sliced VBI capture
Does not support sliced VBI output
Does not support video output overlay
Does not have tuner
Does not have audio in and/or out
Does not have radio
Supports read/write i/o (X)
Does not support async i/o
Supports streaming i/o (X)
Standards:
Formats:
PJPG (PJPG)
Crop Capabilities
Bounds: 0 x 0
Default: 0 x 0
Current: Cropping is not supported
Inputs: 1
Input 0
Name: pac7311
Type: Camera
Audioset: 00000000
Standards: 0x0
Power on (X)
Signal detected (X)
Colour Signal detected
Horizontal Lock detected


Если вывод осмысленный - то хорошо
Если нет - пробуем V4L версии 1

zmu -d /dev/video0 -v -q -V1

Должно быть что-то похожее:

videoserv:/etc/apt# zmu -d /dev/video0 -v -q -V1
Video Device: /dev/video0
Video Capabilities
Name: USB Camera (093a:2620)
Type: 1
Can capture
Video Channels: 1
Audio Channels: 0
Maximum Width: 640
Maximum Height: 480
Minimum Width: 48
Minimum Height: 32
Window Attributes
X Offset: 0
Y Offset: 0
Width: 640
Height: 480
Picture Attributes
Palette: 0 - Unknown
Colour Depth: 8
Brightness: 32768
Hue: 0
Colour :32639
Contrast: 32639
Whiteness: 0
Channel 0 Attributes
Name: pac7311
Channel: 0
Flags: 0
Type: 2 - Camera
Format: 0 - PAL

Для некоторых камер (моей - тоже) вывод содержит ошибку

Error, failed to query crop: /dev/video0: Invalid argument

Не страшно! Есть патч [FIX] ZM 1.24.2 "Error, failed to query crop"
переходим в /usr/src и делаем

svn co http://svn.zoneminder.com/svn/zm/trunk zm

Далее - cd zm
И конфигурим. Но! Так как мы сначала поставили пакет - то конфигурим так, чтобы бинарники собирались с правильными путями. Wink Для того, чтобы можно было собранными менять установленные из пакета.
Первым делом редактируем скрипт /usr/src/zm/configure
Ищем строку sysconfdir=
и меняем путь на

sysconfdir='${prefix}/etc/zm' - потому что пакет хранит конфип именно в /etc/zm/zm.conf

Теперь конфигурим:

./configure --with-webdir=/usr/share/zoneminder --with-cgidir=/usr/share/zoneminder/cgi-bin --enable-mmap=no --with-webuser=www-data --with-webgroup=www-data --bindir=/usr/bin --enable-debug=yes ZM_SSL_LIB=openssl

В процессе устанавлисаем зависимости. Например dev пакет mysql - и еще несколько.

Когда (если) configure пройдет без ошибок - можно делать make.
Но один нюанс все равно есть - если (почти наверняка) cpp будет версии 4.4 - то в файл /usr/src/zm/src/zm_utils.cpp надо добавить строку

#include

Иначе ругается.

Для начала попробуем собрать без изменений.
После make НЕ НАДО делать make install! Все что надо будем копировать ручками.
Если ошбок нет идем в /usr/src/zm/src и запускаем

./zmu -d /dev/video0 -v -q

Обязательно свежесобранный. Для уверенности даже так:

/usr/src/zm/src/zmu -d /dev/video0 -v -q

Этим мы убеждаемся (по отсутствию Abort в выводе) что бинарник читает наш конфиг и вообще работает. Smile
Затем накладываем на zm_local_camera.cpp патч:

911,912c911
< int crop_rc = vidioctl( vid_fd, VIDIOC_G_CROP, &crop );
< if ((crop_rc < 0 ) && (errno != EINVAL))
---
> if ( vidioctl( vid_fd, VIDIOC_G_CROP, &crop ) < 0 )
921,928c920,921
< if ( verbose ) {
< if (crop_rc >= 0) {
< sprintf( output+strlen(output), " Current: %d x %d\n", crop.c.width, crop.c.height );
< }
< else {
< sprintf( output+strlen(output), " Current: Cropping is not supported\n");
< }
< }
---
> if ( verbose )
> sprintf( output+strlen(output), " Current: %d x %d\n", crop.c.width, crop.c.height );

Да, я еще нашел все сообщения о ошибках

sprintf( output, "Error, failed to query crop capabilities %s: %s\n " , queryDevice, strerror(errno) );

и добавил "цифры" для отладки - чтобы знать какое именно сообщение срабатывает.

sprintf( output, "Error, failed to query crop (6) capabilities %s: %s\n " , queryDevice, strerror(errno) );

Но это не обязательно...
После сборки с патчем - меняем файлы в /usr/bin на свежескомпилированные (просто копируем поверх).
Если после перезапуска ZM камера снова не работает - выполняем Хинт 2

После make НЕ НАДО делать make install! Все что надо будем копировать ручками.

Хинт 1.
Если в выводе логов видим zmserver zmwatch[3093]: ERR [Can't get shared memory id '7a6d0001', 1: No such file or directory]
значит надо править (добавлять) в /etc/sysctl.conf

kernel.shmall = 268435456
kernel.shmmax = 268435456

Конкретное значение зависит от наличия памяти в системе. (требует перезагрузки) или:

echo 268435456 >/proc/sys/kernel/shmall
echo 268435456 >/proc/sys/kernel/shmmax

Хинт 2. Работающий вариант добавления "совместимости":
Многие (не все) камеры USB требуют предварительной подгрузки библиотек v4l.
Берем и редактируем файд /usr/bin/zmdc.pl

После строки $ENV{SHELL} = '/bin/sh' if exists $ENV{SHELL};

Вставляем подгрузку библиотек (лень оформлять патчем):

$ENV{LD_PRELOAD} = '/usr/lib/libv4l/v4l1compat.so';
$ENV{LD_PRELOAD} = '/usr/lib/libv4l/v4l2convert.so';

до строки:

delete @ENV{qw(IFS CDPATH ENV BASH_ENV)};

Хинт 3.
В ZM можно настроить почти все камеры. Метод проверки вашего источника прост:

xawtv -c /dev/video0

Или

cheese

Или

mplayer tv:// -tv driver=v4l2:outfmt=yuy2:width=640:height=480:device=/dev/video0

Ну а "приятное" - настройка датчика движения и прочего - уже через веб-интерфейс.
Да, место где хранится информация указывается ссыллкой в

/usr/share/zoneminder/events

ЗЫ. Когде воткну плату видеозахвата - отпишусь о результатах.
ЗЫЫЫ. Dumus, не удаляй акк плиз. А то приходится перерегистрироваться третий раз за 5 лет!

Не ходите к нам с мечом.

RootAdmin
Не в сети
Зарегистрирован: 13/12/2010

Ламерский вопрос конечно, но как редактировать посты? Wink

Не ходите к нам с мечом.

RootAdmin
Не в сети
Зарегистрирован: 13/12/2010

Баг дивжка форума:

#include !Здесь символ "Меньше"!cstdio!Здесь символ "Больше"!

Внутри тега "code" считает "Меньше" и "Больше" тегом.

Не ходите к нам с мечом.

RootAdmin
Не в сети
Зарегистрирован: 13/12/2010

UPD: Самая старая камера

ID 0ac8:303b Z-Star Microelectronics Corp. ZC0303 Webcam

На 303 чипе! Старая как... Тоже заработала. Smile Поигрался с цветностью...

Не ходите к нам с мечом.

wlads
Не в сети
Зарегистрирован: 20/09/2010

RootAdmin пишет:
Баг дивжка форума:

#include !Здесь символ "Меньше"!cstdio!Здесь символ "Больше"!

Внутри тега "code" считает "Меньше" и "Больше" тегом.

http://www.nclug.ru/filter/tips

RootAdmin
Не в сети
Зарегистрирован: 13/12/2010

Читал, но уже после того как запостил. Думал - поправлю пост потом если что не так. Ладно, кто ищет - тот всегда поймет. Smile Пусть существует с ошибками.

Не ходите к нам с мечом.

RootAdmin
Не в сети
Зарегистрирован: 13/12/2010

Научил камеру следить за движущимися объектами. Smile
http://www.zoneminder.com/forums/viewtopic.php?f=9&t=17612

Не ходите к нам с мечом.

RootAdmin
Не в сети
Зарегистрирован: 13/12/2010

RTSP источники тоже работают. Прицепил мегапиксельную камеру H264.
фишка в том - что ее надо указывать как источник ffmpeg и строку указывать полностью вида rtsp:\\user:pass@hostname:554/ch0.h264

Не ходите к нам с мечом.

RSS-материал