Видеонаблюдение в Linux с помощью Motion

Вебкамера icon

Всем привет! В этой статье я хотел бы рассказать Вам о видеонаблюдении в Linux, а именно об инструменте Motion. С помощью программы Motion Вы сможете сделать за любой территорией, попадающей в поле зрения вышей веб-камеры, получать сообщения при обнаружении активности в заданной области, делать скрины, передавать изображение по сети и многое другое.

Еще по теме: Приложения для видеонаблюдения на iPhone.

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

Программа Motion доступна для всех известных мне дистрибутивов Linux. Название говорит само за себя; кроме передачи движения, Motion может определять движение в определенной области кадра, отправлять сообщение при обнаружении активности в этой облас­ти, делать снимки, транслировать изображение по сети.

Motion ис­поведует в настройке Linux­way, конфигурационный файл хорошо комментирован, и если у вас нет проблем с английским (достаточ­но даже начального уровня), то понять смысл опций для вас не со­ставит труда.

Установка Motion

Итак, перейдем к установке. Вводим команду:

Вам предложено будет вместе с основной утилитой установить несколько зависимостей. Соглашайтесь.

После скачивания и установки система попробует запустить Motion, но вы увидите сообщение:

То есть режим демона отключен. Включаем:

Меняем в конце единственной строки “no” на “yes”.

Но это еще не всё, теперь тот же режим надо включить в другом файле:

Ищем строки

Меняем снова на “on” и запускаем Motion с конфигурационным файлом по умолчанию:

Проверьте, стартовал ли сервис:

Всё в порядке. Есть желание посмотреть на сырые данные, которые камера отправляет на микро-НТТР-сервер? Тогда наберите из сессии SSH:

8081 — порт HTTP-микросервера по умолчанию, изначально доступен только локально (только с localhost), это мы потом поправим. Будьте готовы, что в окно терминала повалятся кракозябры, и корректно закрыть терминал не получится.

Откройте другой терминал и снимите процесс, который вы обнаружили на предыдущем шаге:

Это было маленькое отступление, почти шутка. Зато вы теперь знаете, что с помощью telnet можно проверять активность сервисов на внешних портах localhost.

Настройка Motion «под себя»

Итак, где всё это веселое хозяйство, вы уже знаете: в /etc/motion/ motion.conf. Параметров много, но не очень. Файл являет собой шедевр конфигурационного файла — комментарии исчерпывающие, краткие и понятные.

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

Видеоустройство. Благо, в 99 % случаев это оно и есть, так что оставляем как есть.

Порт встроенного web-сервера. Можно менять по желанию, только не попадите на какой-нибудь существующий порт, занятый нужной службой (типа 22, 23, 80, 143 и подобных).

Доступ к камере только с localhost; если стоит “on”, камера не будет видна из сети.

Ширина картинки; для случая нашей камеры, максимум — 640.

Аналогично — высота, максимум — 480.

Количество кадров в секунду. Сами решайте; для нашего случая 2 в секунду самое то.

Можно повернуть изображение на заданное количество градусов (если камера прикреплена подуглом).# Threshold for number of changed pixels in an image that # triggers motion detection (default: 1500) threshold 1500

Этот параметр можно охарактеризовать как чувствительность при определении движения. Чем меньше значение, тем чувствительнее детектор.

Уровень шума. Позволяет игнорировать шум, создаваемый камерой. Установите оптимальное значение для своей камеры;меня устроило по умолчанию.

Позволяет следит только за определенной областью.

  • 1 — левый верхний угол,
  • 2 — верхняя средняя часть, …,
  • 5 — центр, …,
  • 9 — правый нижний угол.

Если область не определена, то слежение происходит по всему экрану.

Качество jpeg-сжатия.

Интервал в секундах, между которыми будут автоматически делаться снимки при наличии движения.

Позволяет рисовать рамку вокруг движущегося объекта. Интересная опция, попробуйте.

Рисуем ли текст на кадре; если да — то где и в каком формате.

Каталог, в котором мы будем складывать файлы видео и картинки, далее подробно расписываются имена для разных вариантов записи.

Далее для краткости опишу сразу всю секцию:

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

Прочитайте внимательно — создатели предусмотрели практически всё, что нужно для эффективного наблюдения и регистрации событий.

Дальше идут параметры для связи с базами данных MySQL и PostgreSQL и настройки конфигов для нескольких камер. Не описываю: кто пользуется этими службами, настроит это сам.

Закрываем, перезапускаем motion: service motion restart

Заходим из локальной сети через браузер на IP-адрес сервера (на порт 8081, если вы его не изменяли) — например, так: http://192.168.0.30:8081/.

И наслаждаемся картинкой. Обратите внимание на нижний правый угол картинки — там стоят дата и время, ровно так, как мы задали в файле /etc/motion/motion.conf.

Но наслаждаемся недолго — вы же не будете открывать одно окно браузера для панели управления, а второе — для камеры? Сейчас очень модно стало слово «дашборд [dashboard]», означающее «приборная панель». Так вот, сведем на один дашборд кнопки и картинку.

Первый дашборд

Откройте файл, который выводит кнопки и индикаторы. У меня их несколько; обкатываю на index-test.php, потом переношу удавшиеся изменения в index.php.

В конец текста, после закрывающей скобки ?> (конец php) и перед тегом , добавьте строку:

Перезагрузите web-страницу — внизу, после кнопок, должна появиться область видеокамеры. Место width=“25%” делает окно видеопотока в 25 % от обшей ширины окна браузера; можете менять это число так, как вам нравится.

Ну что, всё? Можно праздновать победу? Ан нет. Давайте поразмышляем, что будет, если вы захотите «пробросить» порт web-сервера наружу, в Интернет. Сейчас я не про безопасность, а про то, что отобразится на дашборде. Ваш браузер будет искать адрес 192.168.0.30 в своей локальной сети. И точно не найдет открытый порт8081с видеопотоком.

Поэтому надо найти способ сделать так, чтобы браузер знал точный адрес хоста, на котором расположен ваш ПД. Положим, вы сделаете выход в Интернет через хост 111.222.333.444; тогда надо пробросить порт 8081 на этом хосте на внутренний IP-адрес 192.168.0.30 на тот же порт. И, убрав предыдущее изменение, добавить строку:

Успех? Попробуйте зайти из локальной сети. В случае удачи вы всё же увидите окно камеры. Но если вы используете динамический DNS, или неправильно прописали правила iptables на сервере, то вы не увидите ничего.

А нет ли способа узнать, на какой адрес мы стучимся? Пусть хост сообщит браузеру, какой его настоящий IP-адрес в данный момент. Тогда при доступе из локальной сети это будет 192.168.0.30, при доступе извне —тот IP-адрес, через который вы входите на свой дашборд.

Такой способ есть, для этого в php есть массив переменных $_SERVER. Он содержит информацию о заголовках, путях и местоположении скриптов. Записи в этом массиве создаются web-сервером. Для начала мы воспользуемся только одной переменной.

Определим функцию, которая будет извлекать полный путь к IP-адресу камеры и помещать ее в переменную. Внутри тегов ближе к началу страницы расположите строки:

А в том месте, где вам надо вывести область камеры (опять-таки внутри кода php), расположите две строки:

Нужно ли комментировать этот великолепный прием, позволяющий независимо от протокола (HTTP или HTTPS) иметь верный IP-адрес сервера? Думаю, что не стоит.

В результате вы должны получить нечто, похожее на это:

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

Моя собака тоже решила принять участие в написании статьи про видеонаблюдение в Linux, а заодно показать себя. Если честно, она просто пытается достать печенье.

Небольшое замечание: с этого момента учитывайте загрузку командного контроллера. Одновременные запись информации на медленную карту памяти и вещание в дашборд могут перегрузить процессор. Если это станет критичным, отключите запись на диск (что там писать?). Достаточно будет закомментировать строку:

в конфигурационном файле, и motion перестанет записывать, тем самым вполовину разгрузив процессор.

Ну что, теперь вполне можно показать первое приближение ПД кому-нибудь из домашних? Особенно если у вас наличествует смартфон с большим экраном, который можно использовать как пульт.

Еще по теме: Как спрятать камеру видеонаблюдения.

А в следующей статье про видеонаблюдение в Linux, вас снова ждет интересное продолжение, пока!

Дима (Kozhuh)

Эксперт в кибербезопасности. Работал в ведущих компаниях занимающихся аналитикой компьютерных угроз. Анонсы новых статей в Телеграме.

Добавить комментарий

  1. Игорь

    Лучшее решение для организации виденаблюления на Linux.

    Ответить
  2. Валерий

    Это конечно всё хорошо, но..:
    1. Как сделать так, что бы Motion писал с камер видео со звуком?
    2. Как сделать, что бы при заполнения жесткого диска видеозаписями, Motion автоматически подтирал старые?

    Ответить
  3. r476

    Дружище, напиши статью как при помощи nmap искать чужие камеры и подбирать пароли к ним

    Ответить
  4. Виктор

    после установки — убивает камеры на повал! пеерстают откликаться на простейшее mpv av://v4l2:/dev/video0 естественно в сеть тоже никакой трансляции не идет! пробовал на нескольких вебках и на современных и на доисторических времен xp — не взлетает!

    Ответить
  5. Andrew Dark

    пишешь скрипт на удаление файлов старше чем N дней в таргет дир мотион — и будет тебе счастье, со звуком вопрос открьіт

    Ответить
  6. Марат

    он автоматом переключает канал на -1 (т.е. телевизонный канал), что в случае к примеру вебкамеры работать не будет. В конфиге мотион нужно поменять параметр в строке input с -1 на 1 к примеру (у меня это тв-тюнер, через который подключена аналоговая камера через композитный вход).

    Ответить