Большой брат в Linux или видеонаблюдение своими руками
Большой брат в Linux или видеонаблюдение своими руками.
После переезда в новый офис, дабы не расслаблять сотрудников, было решено
установить систему видеонаблюдения. Но, как обычно, основным условием было:
дешево и сердито 🙂 После обдумывания и подсчетов было решено остановиться на
следующем:
IP камеры и компьютер в качестве регистратора.
Для начала попробовали небезызвестный ZoneMinder. Но отчего-то с 9 камерами он
грузил систему нещадно. После некоторой борьбы с ним, было решено отказаться от
него. Поискав на просторах Internet была найдена программка под названием
motion (http://www.lavrsen.dk/twiki/bin/view/Motion/WebHome). Почитав немного
про нее, было решено остановиться на ней.
Итак, у нас были IP камеры, компьютер в качестве регистратора, motion в
качестве софта и желание подружить весь этот колхоз 🙂
И что же умеет motion из того, что нам надо? 🙂
1. Работа с камерами, подключенными через карты захвата либо с IP камерами.
2. Выполнять скрипты при наступлении и окончании события.
Ну чтож, приступим. Для начала попробуем с одной камерой 🙂
Устанавливаем motion.
Далее, в папке /etc/motion/ копируем файл с конфигурацией (motion.conf) в файл
для нашей камеры, например motion1.conf. А теперь начинаем его править под
себя:
1. закомментируем строчку
videodevice /dev/video0
2. в строке netcam_url прописываем URL для доступа к нашей камере. Мы
использовали IP камеры Axis, модель 207 (со встроенным микрофоном).
Для нашего случая выглядело так:
netcam_url
http://camera_ip/axis-cgi/mjpg/video.cgi?resolution=640×480
где camera_ip — IP адрес камеры 🙂
3. далее находим строку target_dir — здесь указываем путь к папке, где будем
хранить данные с камеры.
4. а теперь начинается самое интересное. Находим строку on_event_start. Здесь
мы прописываем команду, которая будет выполняться при наступлении события, то
есть при движении. Что нам это дает? А дает нам это то, что мы не будем
постояно вести запись, а только по необходимости — есть движение, идет запись,
закончилось, остановились и мы. Таким образом получается экономия. Для
сравнения — у нас ведется запись с 10 камер — цветная картинка 640х480 со
звуком, записи хранятся 21 день и все это дело занимает на диске в среднем 135
GB, а всесте с фото, которые делает motion около 200 GB.
5. следующая строка: on_event_end — это для команды, отрабатывающей по
окончанию события.
6. И еще один нюанс, motion поднимает небольшой http сервер, а так как для
каждой камеры запускается своя инстанция программы с отдельным конфигом, то
важно, чтобы он слушал на разных портах. Для этого проверяем, чтобы следующие
строки отличались в каждом файле:
webcam_port и control_port
Для примера: для первой камеры ставим значения
webcam_port 8081
control_port 8080
для второй
webcam_port 8083
control_port 8082
и так далее.
Это в принципе основные изменения. Думаю при внимательном прочтении конфига вы
сами найдете нужные вам параметры, так как там все довольно хорошо
задокументировано.
Теперь вернемся к скриптам, которые отрабатывают при начале и окончании
события.
Так как нам надо писать видео с камеры, то для этого я использовал mencoder.
В папке /root/bin/ создаем скрипты recordstart.sh и recordstop.sh, которые
будут запускаться при наступлеии и окончании события соответсвенно.
Давайте заглянем внутрь recordstart.sh:
[root@video bin]# cat /root/bin/recordstart.sh
#!/bin/bash
# We are using two variables
# 1 — camera name
# 2 — directory name (where file will be stored)
# Generate filename
start=«cam$<1>»
dt=`date +%Y%m%d%H%M%S`
FILENAME=»$
echo $FILENAME
if [ «$1» -eq 218 ]
then
`/usr/bin/mencoder -ovc copy -oac pcm -delay 1.5 -mc 10 -o
/video/motion/$2/$FILENAME rtsp://192.168.95.218/mpeg4/media.amp > /dev/null`
elif [ «$1» -eq 219 ]
then
`/usr/bin/mencoder -ovc copy -oac pcm -delay 1.5 -mc 10 -o
/video/motion/$2/$FILENAME rtsp://192.168.95.219/mpeg4/media.amp > /dev/null`
else
`/usr/bin/mencoder -ovc copy -oac pcm -mc 10 -o /video/motion/$2/$FILENAME
rtsp://192.168.95.$1/mpeg4/media.amp > /dev/null`
fi
Скрипт принимает два параметра:
1 — имя камеры, хотя имя не совсем верно, так как это последний октет из IP
адреса камеры. То есть, как в нашем случае (мы используем 95 подсеть — 192.168.95.0/24). Таким образом, при передаче значения 211 — будет ясно, что
хотим обратиться к камере с IP 192.168.95.211
2 — директория, где будет храниться записанный файл. Сделано для того, чтобы
легче было искать. Опять же в нашем случае: имеется папка /video/motion в
которой хранятся записи, но для того, чтобы не мешать все в кучу, она содержит
поддиректории зон: kuhnya, balkon и т.д. Значит при передаче значения balcon — запись будеть производиться в директорию /video/motion/balkon.
Итак, при вызове скрипта в виде /root/bin/recordstart.sh 211 balkon — скрипт
будет писать с камеры с IP 192.168.95.211 в директорию /video/motion/balkon.
Надеюсь тут все более-неменее ясно 🙂
Как видно, вначале мы генерируем уникальное имя для файла, в который будем
писать, которое состоит из следующих частей:
start — номер камеры, вернее последний октет из ее IP с предшествующим ей cam.
dt — текущая дата в формате ГГГГММДДччммсс.
Пример имени файла: cam218-20090924131847.avi — то есть, пишется с камеры с IP
192.168.95.218, дата начала: 2009 год, 09 месяц, 24 число, 13 часов, 18 минут,
47 секунд.
Небольшое пояснение: так уж оказалось, что у нас разные модели камер, которые
предоставляют разные способы доступа к потоку видео данных, из-за этого
пришлось ввести в скрипте проверки.
Теперь пройдемся по mencoder-у:
-ovc copy — означает, что видеоряд копируем, так как с камеры сразу идет в
mpeg4
-oac pcm — какой кодек использовать для звуковой дорожки, если камера позволяет
писать звук.
-mc 10 — Максимальная величина корректировки A-V синхронизации на один кадр (в
секундах)
-delay 1.5 — Задержка в мс, которая должна вноситься в каждый канал
Если у вас проблемы с синхронизацией видео и звукового ряда, тогда надо менять
значения для последних двух параметров — mc и delay.
Для теста можно использовать mplayer.
Ну вот, теперь при наступлении события, мы можем запускать данный скрипт.
Таким образом в конфиге для motion для нашей камеры прописываем в строке
on_event_start что-то похожее:
on_event_start «/root/bin/recordstart.sh 210 koridor1»
И он начнет писать :)))
Но ведь это все еще надо остановить :)))
Для этого используем второй скрипт /root/bin/recordstop.sh.
[root@video bin]# cat /root/bin/recordstop.sh
#!/bin/bash
# We are using one variable
# 1 — camera name
# Get string with mencoder process PID
MPID=`ps ax | grep mencoder | grep cam$ <1>| awk ‘< print $1 >‘`
# Kill process
`kill -15 $MPID`
Скрипт принимает один параметр — все тот же последний октет из IP адреса
камеры.
Соответсвенно в строке on_event_end файла конфигурации прописываем что-то
вроде:
on_event_end «/root/bin/recordstop.sh 210»
Ну вот примерно и все, что касается конфигурации.
Теперь перейдем к рутинным операциям 🙂
У меня используются две, которые отрабатывают по крону.
1. Удаляет устаревшие файлы, которые страрше 21 дня.
2. Объединяет все файлы за день в один.
Рассмотрим скрипт для чистки. У меня он располагается в директории /root/sbin
и,
для того, чтобы враги не догадались, называется clean.sh
]# cat /root/sbin/clean.sh
#!/bin/sh
/bin/find /video/balkon -name «*.*» -mtime +21 -delete
/bin/find /video/motion/balkon -name «*.*» -mtime +21 -delete
В первой директории хранятся фотографии, сделанные motion — это параметр из
файла конфигурации в строке target_dir.
Вторая директория — куда пишется видео, запущенное из скрипта recordstart.sh
А вот второй скрипт посложнее.
[root@video
]# cat /root/sbin/concatfiles.py
import os, stat, types, commands
workDir = ‘/video/motion/’
dirs = os.listdir(workDir)
oldDate = summaryFile = summaryFileTmp = »
for dir in dirs:
filesList = os.listdir(workDir + dir)
filesList.sort()
for file in filesList:
tmpN = file.split(‘.’)
nm = tmpN[0]
tmpN = nm.split(‘-‘)
if tmpN[0] != ‘S’:
nm = tmpN[1]
year = nm[0:4]
month = nm[4:6]
day = nm[6:8]
date = year + month + day
if oldDate != date:
summaryFile = workDir + dir + ‘/S-‘ + tmpN[0] + ‘-‘ + year +
month + day + ‘.avi’
summaryFileTmp = workDir + dir + ‘/S-‘ + tmpN[0] + ‘-‘ + year +
month + day + ‘-tmp.avi’
#conactenate files
command = ‘/usr/bin/mencoder -oac copy -ovc copy ‘ + workDir +
dir + ‘/’ + tmpN[0] + ‘-‘ + date + ‘*.avi -o ‘ + summaryFileTmp
os.system(command)
#fix key frame
command = ‘ffmpeg -i ‘ + summaryFileTmp + ‘ -ss 0.04 -vcodec
copy -acodec copy -vcodec copy -acodec copy ‘ + summaryFile
os.system(command)
#remove tmp file
command = ‘/bin/rm -f ‘ + summaryFileTmp
os.system(command)
#remove old files
command = ‘/bin/rm -f ‘ + workDir + dir + ‘/’+ tmpN[0] + ‘-‘ +
date + ‘*.avi’
os.system(command)
oldDate = date
Это для объединения коротких роликов за день в один суммарный. (Для тех кто не
в курсе — он на питоне).
Единственное, что нужно менять — это переменная workDir — путь, куда mencoder
пишет свои файлы, все из того же recordstart.sh
Прописываем их в крон на выполнение раз в сутки, желательно ночью, пока карета
не превратится в тыкву 🙂
Запускаем motion следующим образом:
motion -c /path/to/config/file
где
/path/to/config/file — путь к нашему файлу с конфигом 🙂
А далее запускаем их при загрузке системы.
Ну вот наверное и все 🙂
Если будут вопросы — задавайте 🙂
UPD: будьте внимательны с скриптом на питоне, так как сбилась вся
табуляция, что для него очень критично.
Источник
Программа видеонаблюдения LinuxDVR.
Специализированный дистрибутив LinuxDVR на Linux kernel 2.4 (iso образ 17 Mb) предназначен для сборки цифровых видеорегистраторов на персональных компьютерах и серверах. Обладает расширенными сетевыми возможностями.
Дистрибутив работает с CD-ROM (технология LiveCD), USB флэш дисков (USB-HDD bios boot mode) и жестких дисков (IDE, SATA, SCSI).
- Можно построить одиночный в/регистратор или распределенную систему (передача видео основана на стандартном протоколе Motion JPEG c гибкими настройками такой передачи для подстройки к реальной сети);
- на одном ПК поддерживает до 32 аналоговых CCTV ч/б или цв. в/к с композитным видеосигналом (подключение через 2 PCI платы видеозахвата по 16 каналов каждая);
- поддерживает сетевые камеры и видео-сервера по протоколу Motion JPEG (MJPEG);
- допустимые разрешения: аналоговые в/к — до 768×576(полный кадр) , сетевые в/к — до мегапиксельного 1600х1200 ;
- запись в файлы JPEG, видеофильмы MPG(MPEG1), и AVI (кодеки MJPEG и MPEG4);
- детектор движения ;
- реакции на события;
- неограниченное ( прим: программно ) кол-во удаленных рабочих мест наблюдения, администратора, оператора архива ;
- поиск по архиву видеозаписей по различным критериям;
- протоколирование событий — ни одна попытка доступа и ни одно изменение в настройках системы не останутся незамеченными;
- удаленный доступ по протоколам HTTP, FTP, TELNET ;
- резервное копирование (backup) по протоколу RSYNC ;
- синхронизация времени узлов распределенной системы с центральным сервером по протоколу TIME (RFC868);
- читать подробнее >>.
Протестировать soft LinuxDVR.
Читайте здесь >>, это возможно даже без видеокамер и специальных плат видеозахвата.
Простота и скорость расширения системы.
Как правило подобные системы включают аппаратных ключ защиты — HASP LPT или USB ключ.
Это значит, что если Вы хотите подключить дополнительные видеокамеры, то Вам после оплаты придется обмениваться ключами с производителем по почте или др. способом. Т.е. ждать.
Наш ключ защиты — программный. Заплатили за расширение тут же получили файл ключа по электронной почте и легко установили в работающую систему систему.
Поддержка недорогих и распространенных плат видеозахвата и TV-тюнеров.
Карты видеозахвата для подключения обычных в/к с композитным видеовыходом выбирались нами по принципу цены и доступности на рынке. Есть модели, которые можно заказать в ближайших компьютерных магазинах Вашего города.
Поддержка вебкамер и наблюдение через интернет.
Наблюдение с использованием web-камер распространяется пропорционально развитию компьютерных сетей и интернет и, без сомнения, в недалеком будущем станет преобладать над традиционным аналоговым.
Уже сейчас видеошлюзы и вебкамеры работают на многих объектах. Потому что это недорого, просто и зачастую единственный экономически оправданный путь построения распределенных системы типа «Безопасный город» и подобных.
Поэтому LinuxDVR работает с большим кол-вом моделей интернет камер и видеосерверов (видеошлюзов).
100% управление через Web-интерфейс.
Все функции системы в том числе и основные: наблюдение, управление, настройка и просмотр архива имеют веб-интерфейс.
Т.е. возможно создание автономных безмониторных видеорегистраторов для работы с которыми Вам нужен только Ваш любимый ПК и веб-браузер (Microsoft Internet Explorer v5.5 и выше, Mozilla Firefox, Mozilla, Netscape Navigator).
Доступ по имени и паролю с разрешенных компьютеров. Групп пользователей — 4 (инсталляторы, администраторы, операторы архива, операторы наблюдения).
Количество пользователей программно не ограничено.
Такой принцип взаимодействия ПО позволяет организовывать безголовые (безмониторные) автономные видеорегистраторы и удаленные системы наблюдения.
Источник
6 приложений для камер видеонаблюдения в Linux
Безопасность – главная проблема в мире технологий, но мы говорим не только о фишинг-атаках и вредоносных программах. Старые опасности, такие как взломы и кражи, угрожают нашим домам и предприятиям, поэтому существует рынок высококачественных систем наблюдения.
К счастью, вам не нужно платить сотни долларов за систему видеонаблюдения, если у вас есть запасной компьютер под управлением Linux и несколько запасных камер. К тому же, такой путь дешевле и даст вам больше контроля, если вы выберете правильное программное обеспечение. Вот лучшие варианты программного обеспечения для камер видеонаблюдения в Linux, которые вы можете попробовать.
1. ZoneMinder
ZoneMinder – это отличный вариант для системы видеонаблюдения “сделай сам”. Профессиональные функции превращают ZoneMinder в идеальное решение для домашней и коммерческой безопасности. Он поставляется с совместимостью как для IP-камер, так и для стандартных веб-камер. Если вы находитесь в пути, приложения для Android и iOS позволяют удаленно контролировать ваши камеры.
У вас есть много вариантов настройки ZoneMinder в соответствии с вашими требованиями, с поддержкой как живого видео, так и обычных изображений. Уведомления по электронной почте и SMS помогут вам оставаться в курсе, даже если вы не осуществляете мониторинг напрямую. Кроме того, ZoneMinder предлагает уровни доступа пользователей, чтобы вы могли ограничить, кто имеет доступ. Это довольно гибкий инструмент с возможностью масштабирования, наклона и панорамирования камер.
Пользователи Linux CCTV могут воспользоваться установщиками для различных дистрибутивов, таких как Ubuntu и Debian, но вы также можете скомпилировать их из исходного кода, если хотите. Вы также можете развернуть ZoneMinder на устройствах с низким энергопотреблением, таких как Raspberry Pi.
2. Xeoma
Если вы ищете простое в использовании программное обеспечение для IP-камер Linux, Xeoma – это хороший вариант, поскольку он позиционируется как «по-детски простое» видеонаблюдение. Он имеет модульный подход, позволяющий добавлять необходимые компоненты и компоненты при настройке системы.
Это программное обеспечение для Linux-камеры безопасности является богатым. Он совместим со всем, от обычных веб-камер USB до камер видеонаблюдения Wi-Fi. К одной установке Xeoma можно подключить до 2000 камер, что делает ее идеальной для коммерческого использования.
Снимки экрана со всех мониторов одновременно, удаленный доступ и обнаружение движения – все это делает Xeoma хорошим выбором для пользователей. Он также поддерживает мобильный доступ с оповещениями по SMS и электронной почте, а также удаленный доступ к архивам, камерам и настройкам. Вы также можете воспользоваться различными настройками хранения, отложенными записями и даже алгоритмами, чтобы избежать ложных срабатываний. Эта последняя функция отлично подходит для пользователей с домашними животными или маленькими детьми.
Хотя он доступен для покупки, Xeoma предлагает бесплатную версию с несколькими ограничениями (восемь камер, три модуля в цепочке). В целом, Xeoma – это простой, но всеобъемлющий вариант для наблюдения за вашим домом или работой.
3. Motion
Motion – эта бесплатная программа определяет, изменилась ли основная часть изображения из видеосигнала. Написанный на C, Motion был создан специально для дистрибутивов Linux с интерфейсом video4linux.
Несмотря на то, что видео сохраняется при обнаружении движения, Motion также включает настройки промежутка времени для регулярного мониторинга. Вы также можете установить движение для сохранения как видео или изображений. Он работает без головы и графический интерфейс не требуется, что делает его более компактным по сравнению с другими конкурентами программного обеспечения для наблюдения в Linux.
Вот что делает Motion таким прекрасным выбором, если вы хотите создать недорогой сетевой видеомагнитофон (или сетевой видеорегистратор) для работы на маломощных устройствах, таких как Raspberry Pi. Он будет записывать ваши изображения наблюдения или видео в цифровом виде, либо локально (на SD-карту), либо через вашу внутреннюю сеть.
Motion может не хватать функций по сравнению с другим программным обеспечением Linux NVR, но это хороший вариант, если вы ищете базовую систему камер с датчиком движения.
4. Bluecherry
Если вы хотите использовать исключительно программное обеспечение с открытым исходным кодом, Bluecherry – это Linux NVR для вас. Это кроссплатформенная система видеонаблюдения, поэтому вы можете запускать ее на других платформах.
Установка проста, с однострочным установочным скриптом, доступным для Ubuntu, Debian и CentOS. Он поддерживает более 2600 IP-камер с возможностью воспроизведения записей и потокового вещания в браузере. К сожалению, в Bluecherry отсутствует собственное мобильное приложение для Android и iOS, но поддерживается интеграция с IP Cam Viewer.
Хотя Bluecherry является бесплатным и с открытым исходным кодом, платные пакеты поддержки доступны для бизнес-пользователей. Благодаря богатому набору функций и платной поддержке, Bluecherry является отличным вариантом для использования как в бизнесе, так и в быту.
5. Ivideon
Если вы разрабатываете систему видеонаблюдения с ограниченным бюджетом, вы должны рассмотреть Ivideon. Системные требования являются одними из самых легких, которые вы найдете для любого цифрового видеорегистратора. Вы можете запустить Ivideon на ПК с процессором Itnel Atom с 1 ГБ ОЗУ и всего лишь 500 МБ памяти. Однако для ежедневного хранения видеоматериалов вам потребуется как минимум 11 ГБ, если вы хотите хранить их локально.
Несмотря на нехватку ресурсов, Ivideon – это сервис, интегрированный с облаком, с уведомлениями и воспроизведением, доступными через Интернет. Вы также можете хранить свои записи, используя облачное хранилище Ivideon.
Установка довольно проста. Вы можете либо загрузить и запустить скрипт установки, либо запустить отдельные команды из окна терминала самостоятельно. Как и многие другие системы видеонаблюдения, Ivideon предлагает мобильное приложение для устройств Android и iOS. Он официально поддерживает самые последние выпуски Debian и Ubuntu, но так же может быть установлен на другие дистрибутивы.
Домашние пользователи могут выбирать из ряда планов, в том числе базовый (но функциональный) бесплатный онлайн-план, хотя бизнес-пользователям придется платить за пакет в 5 долларов в месяц.
6. Kerberos.io
Kerberos.io – еще одно бесплатное кроссплатформенное программное обеспечение NVR для Linux, совместимое практически со всеми камерами, поддерживаемыми Linux. Вы даже можете загрузить Docker-контейнер, чтобы настроить всё за считанные минуты.
Kerberos.io с поддержкой Raspbian – лучший вариант для пользователей, желающих создать систему видеонаблюдения с использованием маломощных технологий. Примечательно, что Kerberos.io также имеет чистый, современный и простой в использовании веб-интерфейс.
Если вы не хотите тратить много времени на настройку или обслуживание вашей системы, то Kerberos.io – один из лучших вариантов для вас в Linux. Хотя для некоторых функций (например, для просмотра камер удаленно) требуется облачная подписка, стоимость которой составляет менее 2 долларов в месяц.
Будьте в безопасности с Linux
Создание вашей собственной системы видеонаблюдения на основе Linux поможет защитить ваш дом и бизнес от более традиционных угроз. Они также могут сыграть свою роль в создании умного дома с другими проектами DIY.
Источник