Существует множество решений для реализации сервера видеонаблюдения, но учитывая наличие уже работающего медиасервера на базе XBMCbuntu был выбран пакет motion работающий как и с дешевыми USB камерами, так и с платами видеозахвата, также он достаточно прост в настройке.
Подключим вебкамеру (можно использовать практически любую недорогую камеру), проверим, доступна ли она:
ls /dev/video*
В выводе команды видим строку /dev/video0. Если подключено несколько камер, соответственно каждая следующая будет идти по порядку video1, video2 и т. д. Если вместо этого видим строку:
ls: невозможно получить доступ к /dev/video*: Нет такого файла или каталога
значит ваша камера не подключена или не найден нужный драйвер. Необходимо поставить его отдельно.
Определившись с камерами, установим пакет motion:
sudo apt-get install motion
Приступим к настройке программы. Настраиваем захват видео с камеры при обнаружении движения в кадре. Т.е. запись в файл начинается, если motion фиксирует движение, экономим свободное пространство на винте.
Конфигурационный файл находится в /etc/motion/motion.conf
Открываем его текстовым редактором nano.
sudo nano /etc/motion/motion.conf
Конфиг подробно прокомментирован:
# Start in daemon (background) mode and release terminal (default: off)
#Старт как демон,по умолчанию он в off
daemon on# Videodevice to be used for capturing (default /dev/video0)
# for FreeBSD default is /dev/bktr0
#устройство для захвата должно быть по умолчанию /dev/video0 если несколько то соответственно /dev/video1 /dev/video2 и т.д.
videodevice /dev/video0
# Image width (pixels). Valid range: Camera dependent, default: 352
#Разрешение камеры 320х240, 640х480 …
width 640
# Image height (pixels). Valid range: Camera dependent, default: 288
height 480
# Maximum number of frames to be captured per second.
# Valid range: 2-100. Default: 100 (almost no limit).
# Определим количество fps;
framerate 30 (30 подойдет, но можете менять в зависимости от нагрузки на компьютер)
# Gap is the seconds of no motion detection that triggers the end of an event
# An event is defined as a series of motion images taken within a short timeframe.
# Recommended value is 60 seconds (Default). The value 0 is allowed and disables
# events causing all Motion to be written to one single mpeg file and no pre_capture.
gap 60
# Maximum length in seconds of an mpeg movie
# When value is exceeded a new mpeg file is created. (Default: 0 = infinite)
#ОЧЕНЬ ВАЖНЫЙ ПАРАМЕТР!
Продолжительность файла можно ограничить параметром max_mpeg_time, указав в качестве значения время в секундах.
max_mpeg_time 180
# Output ‘normal’ pictures when motion is detected (default: on)
# Valid values: on, off, first, best, center
# When set to ‘first’, only the first picture of an event is saved.
# Picture with most motion of an event is saved when set to ‘best’.
# Picture with motion nearest center of picture is saved when set to ‘center’.
# Can be used as preview shot for the corresponding movie.
#Тип скриншота с движением,по умолчанию on - сохранять все подряд - кушает много места
ставим или best, или first
output_normal off
# Output pictures with only the pixels moving object (ghost images) (default: off)
#Оставим как есть
output_motion off
# Use ffmpeg to encode mpeg movies in realtime (default: off)
#ВАЖНЫЙ ПАРАМЕТР! Указывает motion что сохраняем видео,
#нам видео, по умолчанию стоит off переключаем на on
ffmpeg_cap_new on
# Codec to used by ffmpeg for the video compression.
# Timelapse mpegs are always made in mpeg1 format independent from this option.
# Supported formats are: mpeg1 (ffmpeg-0.4.8 only), mpeg4 (default), and msmpeg4.
# mpeg1 – gives you files with extension .mpg
# mpeg4 or msmpeg4 – gives you files with extension .avi
# msmpeg4 is recommended for use with Windows Media Player because
# it requires no installation of codec on the Windows client.
# swf – gives you a flash film with extension .swf
# flv – gives you a flash video with extension .flv
# ffv1 – FF video codec 1 for Lossless Encoding ( experimental )
# mov – QuickTime ( testing )
#тип используемого кодека.
ffmpeg_video_codec mpeg4
# Target base directory for pictures and films
# Recommended to use absolute path. (Default: current working directory)
#путь для сохранения видео и скринов.
target_dir /home/user/new
# The mini-http server listens to this port for requests (default: 0 = disabled)
#Это порт доступа на localhost.
webcam_port 7777
# Quality of the jpeg images produced (default: 50)
#
webcam_quality 50
# Output frames at 1 fps when no motion is detected and increase to the
# rate given by webcam_maxrate when motion is detected (default: off)
#Поставим 20
webcam_motion 20
# Maximum framerate for webcam streams (default: 1)
#Поставим 20
webcam_maxrate 20
# Restrict webcam connections to localhost only (default: on)
#
webcam_localhost off
Настройка конфига закончена, запускаем motion (с правами суперпользователя обязательно):
sudo motion -n
Если не стартует, то заведем так:
LD_PRELOAD=/usr/lib/libv4l/v4l2convert.so motion -n
если библиотека v4l2convert.so не установлена, то установим ее:
sudo apt-get install libv4l-0
Смотрим на вывод, видим лог запуска мини http-server.
Теперь откроем браузер и введем в адресной строке
http://localhost:7777
Теперь камера наблюдает за происходящим, если в поле зрения попадает движущийся объект то сразу стартует запись, после того как объект выходит из поля зрения камеры, запись продолжается 180 секунд, далее ролик не пишется. Таким образом, motion ведет запись только в случае обнаружения движения.
Так же для более четкого отображения записей задаем параметры:
snapshot_filename %Y-%m-%d/snapshot/%H-%M-%S
jpeg_filename %Y-%m-%d/jpeg/%H-%M-%S-%q
movie_filename %Y-%m-%d/movie/%H-%M-%S-%v
Теперь каждые сутки пишутся в отдельные папки, что очень удобно для просмотра.
Настройка захвата
Секция “Motion Detection Settings”, находящаяся в самом конце конфигурационного файла, отвечает за настройку обнаружения движущихся объектов. Если камера стоит в комнате, и объект перекрывает объектив, проблем с обнаружением нет. Настройка нужна в том случае, когда камера контролирует значительную территорию, где объект имеет небольшой размер, и срабатывание может быть вызвано движением веток деревьев, проходящими машинами и другими помехами.
Параметры:
Threshold позволяет указать количество пикселей, меняющихся для срабатывания детектора, а minimum_motion_frames – количество кадров, в котором они зафиксированы. Подобрав эти значения, можно сделать так, что Motion не будет замечать пролетающую птицу, но без проблем реагировать на человека. Фильтры для сглаживания шума включаются при помощи despeckle. По умолчанию используется оптимальное значение EedDl. При появлении проблем следует поэкспериментировать, убирая буквы в сочетании EedDl и пробуя их в разных комбинациях (подробнее о despeckle смотри на WiKi Motion и на emit.demon.co.uk/motion).
Параметры noise_level, noise_tune, night_compensate и lightswitch отвечают за уровень порога шума и компенсацию темных и светлых участков.
Комбинация параметров pre_capture, post_capture и gap позволяет записать сцену, где будет зафиксирован объкт до и после того, как было обнаружено движение. Значение gap по умолчанию установлено в оптимальные 60 (секунд), если движение не будет обнаружено, то создается новый видеофайл, а старый удаляется. Чтобы захваченный файл не был большим, его продолжительность можно ограничить параметром max_mpeg_time, указав в качестве значения время в секундах.
Параметров в motion.conf очень много, лучший способ – это вдумчивое курение man’а и тематических форумов, ну а в базовом варианте – простейшая система видеонаблюдения готова к эксплуатации.