slugg.spb.ru .. Записки о разном
Сервер видеонаблюдения на базе Ubuntu Server
Для реализации сервера видеонаблюдения (напомню что данный вариант бюджетный) мой выбор пал на пакет motion в связи с тем, что motion работает как и с дешевыми USB камерами, так и с платами видеозахвата.
+ он достаточно прост в настройке.
Установим данный пакет:
После того как установка произведена, вы можете приступить к настройке программы. В моем случае это захват видео с устройства при фиксации движения в кадре. Т.е. запись в файл начинается только в том случае, если motion фиксирует движение, очень удобно, так как это не съест все ваше свободное пространство на винте, да не будет надобности просматривать пустые фильмы.
Конфиг файл находиться в /etc/motion/motion.conf
Открываем его текстовым редактором gedit.
Конфиг очень подробно прокомментирован на детском английском, по этому уделив ему пол часа времени, вы точно будете знать как именно нужно делать и какие настройки менять, что-бы получить желаемый результат.
Я приведу основные важные моменты в моем случае.
# Start in daemon (background) mode and release terminal (default: off)
#Стартовать как демон, этот параметр можно поставить в on, по умолчанию он в 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).
# Устанавливаем количество захватываемых кадров в секунду;
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 это не круто так как он будет сейвить все подряд, по истечении 1 часа у вас их будет 10000
по этому ставим или 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 )
#тут большая запарка, так как если ставить кодек mpeg4 или mpeg1 после запуска motion вам радостно сообщит что не может найти кодек в системе, этот #вопрос решается по разному, самый простой способ, это установить кодек ffv1 записать пару минут видео и открыть с помощью Totem, который сообщит #что не может проиграть файл и автоматически найдет нужный кодек, вам останеться кликнуть ок, дождаться загрузки, и вууаля, видео будет классно #проигрыватсья и никаких проблем.
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, это оптимальное значение, по дефолту off — это не хорошо
webcam_motion 20
# Maximum framerate for webcam streams (default: 1)
#та же история по дефолту 1, ставим 20 — что есть нормально
webcam_maxrate 20
# Restrict webcam connections to localhost only (default: on)
#Если Вы хотите удаленно через web интерфейс просматривать реальную картинку на камере, то необходимо выставить off, если on — то через web
#сможете смотреть только на localhost.
webcam_localhost off
И так запускаем motion (с правами рута обязательно):
(К сожалению у меня запустилось только в таком виде: LD_PRELOAD=/usr/lib/libv4l/v4l2convert.so motion -n )
если библиотека v4l2convert.so не установлена, то поставим ее sudo apt-get install libv4l-0
Смотрим на вывод, там не должно быть слов error, missing, fatal, signature, cannot find codec, ошибка, cannot save и т.д. Зато должны быть оповещающие вас о том, что запущен мини http-server, и некоторая техническая информация.
Теперь откройте браузер и введите в адресной строке http://localhost:7777/
7777 — это наш порт (смотри конфиг)
localhost — так как видео транслируется на локальную машину, для трансляции видео на машину в сети значение нужно менять (смотри конфиг)
Теперь ваша камера четко палит за происходящим, если в ее поле зрение попадает движущийся объект то сразу стартует запись, после того как объкт отвалил, запись продолжается 180 секунд, далее ролик не пишется, т.е. Не отъедает место на винте. Короче говоря motion начинает писать только в случае обнаружения движения.
Так же для более четкого отображения записей я задал параметры:
Теперь каждые сутки пишутся в отдельные папки, что очень удобно для просмотра.
Настройка захвата
Секция “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, указав в качестве значения время в секундах.
Источник
Установка и настройка zoneminder на Ubuntu Linux. Делаем систему видеонаблюдения.
Приветствую, некоторое время назад я показывал как можно сделать камеру из телефона с android .
Сегодня я продолжу эту тему, и мы организуем полноценную систему видеонаблюдения на базе zoneminder установленном на Ubuntu Server 16.04, и подключенной к нему камерой из телефона.
Сперва покажу все команды для установки, ниже они будут с описанием действий:
Кому лень читать, есть видео:
Для начала обновим нашу систему:
Установим lamp (linux apache mysql php):
Во время установки запросят пароль для MySQL.
Посмотрим какой часовой пояс установлен в системе:
Если он не наш, установим правильный часовой пояс системы:
Далее нужно установить часовой пояс для php :
находим в этом файле строку ;date.timezone = в секции date , раскоментируем ее и впишем нужную часовую зону, должно получиться что то вроде:
Сохраняем файл ( ctrl + x -> y )
Теперь установим виновника торжества – zoneminder :
Импортируем базу данных в MySQL и добавим пользователя:
Если вы зададите не стандартный пароль, тогда нужно будет его изменить в файле конфигурации / et c/zm/zm.conf, строка — ZM_DB_PASS=zmpass
Добавим конфигурацию в Apache:
Сделаем пользователя, от которого работает Apache , владельцем конфигурации zoneminder :
Укажем ядру Linux сколько памяти выделять zoneminder ’у
Включим сервис zoneminder , что бы он стартовал при старте системы:
Еще нужно добавить строчку в конфиг MySQL , в файл /etc/mysql/mysql.conf.d/mysqld.cnf нужно добавить строку — sql_mode = NO_ENGINE_SUBSTITUTION, иначе могут возникнуть ошибки при добавлении камеры в zoneminder , например такая:
SQL-ERR ‘SQLSTATE[HY000]: General error: 1366 Incorrect integer value: » for column ‘ServerId’ at row 1′, statement was ‘insert into Monitors set LinkedMonitors = », Name = ‘fly’, ServerId = », Type = ‘Remote’, Function = ‘Modect’, Enabled = ‘1’, RefBlendPerc = ‘6’, AlarmRefBlendPerc = ‘6’, AnalysisFPS = », MaxFPS = », AlarmMaxFPS = », Device = ‘/dev/video0’, Channel = ‘0’, Format = ‘255’, Palette = ‘0’, V4LMultiBuffer = », V4LCapturesPerFrame = ‘1’, Protocol = ‘http’, Host = ‘192.168.1.132’, Port = ‘8080’, Method = ‘simple’, Options = », Path = ‘/video’, User = », Pass = », Colours = ‘3’, Width = ‘1280’, Height = ‘720’, Orientation = ‘0’, Deinterlacing = ‘0’, RTSPDescribe = », LabelFormat = ‘%N — %Y-%m-%d %H:%M:%S %z’, LabelX = ‘0’, LabelY = ‘0’, LabelSize = ‘1’, ImageBufferCount = ’50’, WarmupCount = ’25’, PreEventCount = ’25’, PostEventCount = ’25’, StreamReplayBuffer = ‘1000’, AlarmFrameCount = ‘1’, SignalCheckColour = ‘#0000c0’, EventPrefix = ‘Home-‘, SectionLength = ‘600’, FrameSkip = ‘0’, MotionFrameSkip = ‘0’, AnalysisUpdateDelay = ‘0’, FPSReportInterval = ‘1000’, DefaultView = ‘Events’, DefaultRate = ‘100’, DefaultScale = ‘100’, WebColour = ‘red’, Sequence = 1′
Перезагружаем наш сервер
Установка завершена, теперь произведем базовую настройка zoneminder, добавим камеру, и сделаем что бы шла запись по движению.
Переходим на страницу http://ваш-ip/zm и зайдем в настройки (options).
Переходим во вкладку users, и жмем по пользователю admin.
Задаем ему пароль и жмем save.
В этой же вкладке можно добавить еще пользователей с ограниченными правами.
Переходим во вкладку system и ставим галку напротив Authenticate user logins to ZoneMinder, что бы нельзя было заходить на сайт без пароля.
Если вы хотите использовать отдельный диск под записи, тогда перейдите во вкладку path. И здесь можете изменить стандартные пути. Здесь наиболее интересные пути, которые стоит изменить — events, images и sounds. Вводите абсолютные пути, не забудьте предварительно создать папку и дать полный доступ, либо сделать владельцем этой папки пользователя www-data (chmod либо chown вам в помощь).
Закрываем окно, на этом основные настройки завершены. Что бы они применились нужно перезапустить zoneminder, это можно сделать из веб интерфейса, либо из терминала.
В перовом случае нажминте на Running (Console — Running)
В появившемся окне выберете restart в выпадающем списке и нажмите apply
Во втором — наберите команду
Теперь добавим камеру.
В основном окне жмем Add New Monitor.
В открывшемся окне, во вкладке General выбираем Source Type — Remote, Function — Modect (Здесь функции — monitor — только просмотр, modect — запись при срабатывании события, mocord — постоянная запись, с подсветкой сработанных событий на движение, nodect — отключение встроенной функции обнаружения движения, для использования сторонних модулей)
Во вкладке source для подключения нашего телефона нужно выбрать Remote Protocol — HTTP
Remote Host Name — IP адрес устройства (он написан на экране, IPWebCam запущена)
Port должен быть — 8080 (если вы его не меняли в настройках программы на телефоне).
Remote Host Path должен быть — /video
Разрешение задавайте в зависимости от настроек/возможностей вашей камеры. Жмем save.
Должен появиться новый монитор, source должен быть зеленым, если все прошло нормально.
Если вы хотите ограничить зону детектора движения камеры, нажмите на zones, можно отредактировать стандартную зону, либо добавить новую, так же можно добавлять несколько зон. Для этого нужно либо нажать на название существующей зоны, либо добавить новую зону. Зона задается простым перетягиванием точек на углах зоны. Здесь же можно задать чувствительность детектора движения.
Вот и все, теперь на сервер будет записываться видео (если быть точнее, то последовательность изображений, zoneminder пишет именно так), при обнаружении движения.
Для того что бы посмотреть на изображение камеры нужно нажать на название монитора, что бы посмотерть события нужно нажать на число событий. И выбрать нужное.
Источник