Pull to refresh

Видеонаблюдение в Linux

Ни для кого не секрет, что в наше время все следят друг за другом. Нет, не стоит пугаться, это не правительство и не инопланетяне(В общем не стоит исключать и таких вариантов). Все гораздо проще.
Практически в каждой коммерческой фирме или госконторе, а зачастую, в школах и университетах, начальство устанавливает охранные системы. Под охранными системами обычно считают Охранно-Пожарные Системы(ОПС), Системы Контроля Доступа(СКД) и Системы видеонаблюдения. Вот про последние мы сегодня с вами и поговорим.


Введение

Все существующие системы видеонаблюдения можно условно разделить на два лагеря: построенные на базе видеорегистраторов и построенные на базе компьютера. Если с видеорегистратором все понятно(Подключили к нему монитор пошире, камер побольше, посадили охранника посмышленее и система работает), то с системой на базе компьютера(видеосервера) все немного сложнее. Во-первых нужно определиться с операционной системой под которой всё это будет работать, во-вторых нужно выбрать тот или иной программный продукт который и будет записывать интересные моменты из жизни офиса ну и в-третьих нужно купить компьютер и платы видеозахвата(в случае если используются аналоговые камеры).


Казалось бы, что  вариант с видеорегистратором куда проще и доступнее, и, возможно, для небольших офисов/магазинов это самый лучший вариант, но что делать если нужно организовать систему по принципу — сидит охранник и мониторит 30 камер в 30-ти помещениях большого торгового центра, сидит начальник охраны и смотрит чего же делают охранники в его отсутствие, директор наблюдает за тем как работают его подчиненные(включая начальника охраны и секретаршу Машу которая любит сидеть в «Одноклассниках»), тем временем Генеральный Директор сидит дома и время от времени смотрит как работают люди в 4-ех его магазинах и 5-ти офисах, ну и наконец за всеми этими людьми следит Самый Главный Человек… — Системный Адмиистратор. Тут уже одним простым видеорегистратором не обойтись, нужно ставить(и не один) видеосервер способный отдавать картинку с камер по сети с разграничением прав и пользователей.


Выбираем

Во-первых нужно выбрать ОС. Как видно из названия статьи я рекомендую использовать Linux, по-тому что:


1. Это выгодно. Не нужно платить за лицензию на каждый сервер и удаленный компьютер наблюдения.


2. Это надежно. Правильно настроенный сервер на Linux'е будет служить вам верой и правдой не один год.


Во-вторых нужно выбрать программный продукт для регистрации видео.


Здесь кроется еще один плюс выбранной операционной системы. Дело в том что многие из существующих систем видеонаблюдения под линукс распространяются бесплатно(Будь то ZoneMinder, Motion или LinuxDVR(до 4ех камер в системе)), в то время как аналогичные системы под «другие ОС» стоят порядка 50-ти тысяч рублей(в зависимости от предполагаемого количества камер и количества компьютеров и серверов работающих в системе).



<center">История успеха

Для себя я выбрал Motion.


Motion представляет из себя простую консольную программку со встроенным веб-сервером выводящим по указанному порту в формате MJPEG видеопоток  с устройства video4linux(/dev/video*). Кроме того motion имеет встроенную систему регистрации движений в поле зрения камеры. Т.е. на диск пишется не все видео в режиме 24/7, а только тогда когда камера «видит», что что-то происходит, что существенно экономит место на диске и увеличивает максимальное время записи полезной информации на диск(В прочем, если нужно, то можно включить и постоянную запись).



Настройка

Настройка motion происходит через конфигурационный файл который по умолчанию расположен здесь: /etc/motion/motion.conf


Про все пункты в этом файле вы можете прочитать в комманде man motion или же найти в гугле(благо в интернете информации по этому пакету достаточно), но пару пунктов из этого файлика я бы хотел выделить.


control_port 8080
control_localhost off
control_html_output on
control_authentication user:password

В этих четырех строках описан способ доступа к Web GUI настройки motion. В первой строке указан порт по которому нужно будет постучаться чтобы попасть в GUI, во второй строке разрешается/запрещается доступ к админке с адресов отличных от localhost'a(127.0.0.1), ну и в четвертой параметры авторизации(логин: пароль) для доступа к админке.


В админке есть все пункты настройки motion(даже те которые не прописаны в конфигурационном файле — стоят значения по умолчанию), с их кратким описанием.


Кроме того конфигурационные файлы очень удобно разбивать на «модули». Т.е. Основные настройки для всей системе хранить в файле /etc/motion/motion.conf, а настройки для каждой камеры хранить в отдельном файле, который потом можно будет подключить к основному файлу командой thread


Вот так у меня выглядит конфигурационный файл для системы с четыремя камерами:


/etc/motion/motion.conf:
framerate 15
ffmpeg_cap_new on
ffmpeg_cap_motion off
ffmpeg_timelapse 0
ffmpeg_timelapse_mode daily
ffmpeg_bps 400000
ffmpeg_variable_bitrate 0
ffmpeg_video_codec ffv1 #Вот тут мы выбираем кодек которым мы будем сохранять видео
ffmpeg_deinterlace off
max_mpeg_time 600
text_right %Y-%m-%d\n%T
text_changes off
text_event %Y%m%d%H%M%S
text_double off
snapshot_filename %v-%Y%m%d%H%M%S-snapshot
jpeg_filename %v-%Y%m%d%H%M%S-%q
movie_filename %Y.%m.%d/%H:%M:%S
timelapse_filename %Y%m%d-timelapse
output_normal off
webcam_quality 50
webcam_motion off
webcam_maxrate 50
webcam_localhost off
webcam_limit 0
control_port 8080
control_localhost off
control_html_output on
control_authentication user:password
quiet on
thread /etc/motion/thread1.conf
thread /etc/motion/thread2.conf
thread /etc/motion/thread3.conf
thread /etc/motion/thread4.conf


Жирным выделил 4 файла настроек для каждой камеры. Вот один из них:

/etc/motion/thread1.conf:
#Выбираем видеосутройство(Карта видеозахвата)
videodevice /dev/video0
#Выбираем номер канала
input 1
#Выбираем normid( PAL-DK, SECAM, etc. в зависимости от вашей камеры )
norm 3
#Вот тут самое интересное - порт на который будет транслироваться видеопоток в формате mjpeg
webcam_port 8081
#Текст который будет выводиться в левом нижнем углу картинки(Сюда можно название камеры написать)
text_left = "Camera Color"
#Директория куда будет сохраняться записанный видеоматериал
target_dir /opt/lampp/htdocs/bigbrother/Camera 1/



Интерфейс

Ну систему мы настроили и запустили. Камеры регистрируют любое движение и записывают все происходящее в специально подготовленную директорию. Остался один маленький вопрос. Куда смотреть чтобы в режиме реального времени следить за происходящим то?


Помните строчку в конфигах webcam_port 8081? Вот если в адресной строке браузера зайти по адресу http://localhost:8081, то мы и увидим картинку с камеры в режиме реалтайм.


Как видите ни о каком интерфейсе разговора нет. Можно конечно оставить все как есть. И для каждой камеры открывать отдельное окно браузера со своим портом. Но ведь гораздо приятней(да и удобней) видеть все в одном окне, как тут:




Тут то нам на помощь и придут базовые знания в html(а на HTML5, CSS3, JQuery, etc. можно нарисовать интерфейс который не будет уступать небраузерным клиентам). Делаем табличку втыкаем туда 4 тега <img>, в качестве параметра src указываем http://localhost:8081, и любой бразуер будет показывать видеопоток в формате MJPEG.


Да, такая система требует небольших познаний в html, но в итоге получается очень гибкой и легконастраиваемой. Вот код моего рабочего примера на 4 камеры(см. скрин выше):


<html>
<head>
<title>BigBrother</title>
<META content="text/html; charset=utf-8" http-equiv=Content-Type>
<style></style>
</head>
<body bgcolor=gray>
<center>
<a href="bigbrother">Перейти к архиву</a> | <a href=#>Справка</a> | <a href=#>О программе</a>
<br><br>
<table border=1 bordercolor=green width=80%>
<tr>
<td width=50%>
<img src="http://192.168.10.56:8081" width=100%>
</td>
<td width=50%>
<img src="http://192.168.10.56:8082" width=100%>
</td>
</tr>
<tr>
<td width=50%>
<img src="http://192.168.10.56:8083" width=100%>
</td>
<td width=50%>
<img src="http://192.168.10.56:8084" width=100%>
</td>
</tr>
</table>
</center>
</body>
</html>


Кроме того, если все камеры подключены к серверу, а наблюдение ведется с удаленного компьютера, не совсем удобно добираться к записанному видеоматериалу. Нужно либо идти к серверу с флешкой(что совсем неправильно), либо поднимать ftp-сервер с авторизацией, либо написать еще один небольшой скрипт на php который будет следить за появление новых роликов и отдавать их клиентам. Тут уже решать вам самим. Для себя я выбрал последний вариант, потому-что его можно безболезненно встроить в интерфейс, он прост в понимании для охранников и позволяет им не отрываясь от своего любимого дела(Наблюдением за нарушителями на охраняемой ими территории), не закрывая интерфейса программы скачивать с сервера файл за тот или иной период записи.

Выводы

Вообще, система motion очень удобная в использовании, и простая в настройке. Но пользоваться ей без дополнительных средств слегка неудобно. Поэтому я рекомендую использовать связку motion+xampp+html,  такой способ позволит сделать доступ к системе с любой машины в сети на которой установлен обычный браузер. В принципе эту систему можно расширять сколько угодно долго. Добавить модули поворотных устройств(Работающих по протоколам PELCO, PANASONIC и прочих — благо протоколы простые в понимании и подробно описаны в интернете), интегрировать с ОПС и СКД(все опять же упирается в протоколы передачи данных) и т.д. оно и понятно — к Web интерфейсу можно дописать чего угодно, а вот как система видеонаблюдения motion справляется на все сто ;)

Tags:
Hubs:
You can’t comment this publication because its author is not yet a full member of the community. You will be able to contact the author only after he or she has been invited by someone in the community. Until then, author’s username will be hidden by an alias.