Видеорегистрация + видеонаблюдение для дома в Linux

Надумал и я побаловаться созданием простой и дешевой домашней системы видеонаблюдения и видеорегистрации (сподвигла меня на это статья из журнала “Хакер”). Естественно, что идея использовать веб-камеру и домашний компьютер в данном случае выглядит наиболее привлекательной.

Веб-камера для Linux

Свой выбор веб-камеры для Linux я остановил на Logitech Webcam C120 по ряду причин: во-первых, она отличается приемлемым качеством картинка (изображение с камер Genius аналогичного ценового диапазона меня не впечатлило совсем), во-вторых – камера работает по протоколу UVC, что означает её поддержку ядром Linux “из коробки” (штатно поддержка добавлена в ядро Linux с версии 2.6.26, также в Linux заработают веб-камеры, управляемые драйвером GSPCA) и в-третьих – эта веб-камера стоит всего 500 рублей и её мне не жалко разобрать с целью создания из неё ИК-камеры (камеры “ночного видения”).

Процесс создания системы домашнего видеонаблюдения по шагам

Подключаем камеру. В моём случае всё заводится самостоятельно (потому и выбрал данную камеру). Если камера подключена, а картинки нет – стоит проверить, добавлен ли текущий пользователь в группу video и при необходимости добавить его туда.
Кстати, проверить работоспособность камеры поможет обыкновенный mplayer, достаточно лишь запустить его следующим образом:
mplayer -cache 128 -tv driver=v4l2:width=640:height=480:device=/dev/video0 -vo xv tv://
Если что-то пошло не так – внимательно читаем лог ошибок. Например может понадобиться указать другое устройство вывода (-vo x11) – они перечислены по вызову mplayer -vo help

Использование программы Motion для организации видеонаблюдения

В качестве ПО для системы домашнего видеонаблюдения я выбрал программу Motion (присутствует в репозитории Debian, для работы требуется ffmpeg). Можно попробовать её аналоги, например ZoneMinder или AVReg, но поскольку Motion меня полностью устроила и именно она идёт первой в списках многих обзоров подобного софта – я заниматься тестированием не стал и просто использовал её.

Итак, что же может предложить Motion желающим собрать систему видеонаблюдения дома:

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

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

mkdir ~/.motion
sudo cp /etc/motion/motion.conf ~/.motion/
sudo chown user:group ~/.motion/motion.conf

Настройка Motion – правим motion.conf

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

  • Запуск в режиме демона
    # Start in daemon (background) mode and release terminal (default: off)
    daemon on
  • Устройство для захвата видео – если камера одна – оставить как есть, иначе изменить на video1…videoN по необходимости
    # Videodevice to be used for capturing (default /dev/video0)
    # for FreeBSD default is /dev/bktr0
    videodevice /dev/video0
  • Какой вход для видео использовать. В случае USB-камеры оставить как есть.
    # The video input to be used (default: 8 )
    # Should normally be set to 0 or 1 for video/TV cards, and 8 for USB cameras
    input 8
  • Разрешение видео, выдаваемое камерой – отредактировать в соответствии с характеристиками своей камеры
    # Image width (pixels). Valid range: Camera dependent, default: 352
    width 640
    # Image height (pixels). Valid range: Camera dependent, default: 288
    height 480
  • Число кадров в секунду – опять же в соответствии с характеристиками камеры (к примеру некоторые камеры позволяют снимать с бОльшим разрешением, но меньшей частотой кадров или наоборот). Для PAL стандартное значение – 25 кадров/сек.
    # Maximum number of frames to be captured per second.
    # Valid range: 2-100. Default: 100 (almost no limit).
    framerate 30
  • После какого количества секунд отсутствия движения будет перезапущена запись (а файл перезаписан).
    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 0
  • Сколько времени (в секундах) вести запись в один файл. После превышения предела создаётся новый файл.
    # The file rollover mode of the timelapse video
    # Valid values: hourly (ежечасно), daily (ежедневно, default), weekly-sunday (еженедельно, начало недели в Вс), weekly-monday (аналогично с началом в Пн), monthly (ежемесячно), manual (вручную).
    ffmpeg_timelapse_mode hourly
  • Варианты сохранения скриншота с движением – все подряд (on), ни одного (off), первый (first), лучший (best) или с движением ближе к центру изображения (center).
    output_normal best
  • Сохранение потока с камеры как видеофайла.
    # Use ffmpeg to encode mpeg movies in realtime (default: off)
    ffmpeg_cap_new on
  • Выбор кодека, которым будет обработан сохраняемый видеопоток (поддерживаемые кодеки подробно перечислены в конфиге). Выбранный кодек должен быть установлен в системе, иначе при запуске Motion будет выдавать ошибку.
    ffmpeg_video_codec mpeg4
  • Путь к каталогу, в котором будет храниться отснятый материал.
    target_dir /home/user/camera_video
  • Номер порта, на котором будет работать встроенный http-сервер Motion – при необходимости прописать любой свободный порт.
    # The mini-http server listens to this port for requests (default: 0 = disabled)
    webcam_port 8081
  • Процент качества для сжимаемых в jpeg изображений с камеры, которые будут выводиться в браузер.
    # Quality of the jpeg images produced (default: 50)
    webcam_quality 90
  • Частота обновления видео в браузере (кадров в секунду) в случае отсутствия зарегистрированного движения – если не планируется просматривать изображение с камеры периодически, то можно отключить. При обнаружении движения частота обновления станет равной параметру webcam_maxrate.
    # 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)
    webcam_motion 2
  • Частота обновления видео в браузере в случае регистрации движения программой.
    # Maximum framerate for webcam streams (default: 1)
    webcam_maxrate 10
  • Разрешить (off) или запретить (on) доступ к просмотру камеры с удаленных машин.
    # Restrict webcam connections to localhost only (default: on)
    webcam_localhost on

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

Для проверки работы программы можно зайти веб-браузером на адрес http://localhost:8081 и полюбоваться на результат своих трудов 🙂 Также нужно отметить, что веб-интерфейс позволяет производить настройку Motion (удобно при нескольких камерах), для чего нужно внести соответствующие изменения в секцию HTTP Based Control конфигурационного файла программы.

В заключение дам ссылку на motion.conf, который у меня получился в результате. А в следующей заметке о создании системы домашнего видеонаблюдения под Linux я хочу рассказать о том, как сделать из веб-камеры камеру “ночного видения”. До встречи!

21 мысль о “Видеорегистрация + видеонаблюдение для дома в Linux”

  1. Здравствуйте, а какие минимальные параметры для домашнего компьютера должны быть, чтобы было смысл устанавливать такую систему ?

    1. Конкретных минимальных требований не нашел, но что точно нужно – это камера с возможностью её подключения к компу 🙂 Количество и качество записей будут зависеть от размера HDD. Требования к процессору обуславливаются используемым для сжатия видео кодеком, если настроить зпись без сжатия – достаточно будет самого древнего компьютера.
      Могу сказать, что на роутере с процессором 384 МГц и 30 Мб ОЗУ у меня Motion работает с одной веб-камерой.

      1. > Могу сказать, что на роутере с процессором 384 МГц и 30 Мб ОЗУ у меня Motion работает с одной веб-камерой.

        А какой именно роутер используете? И из современного оборудования (а то статья уже 2-летней давности) что-то можете порекомендовать как роутер? Хотелось бы чтобы он потянул запись сразу с 2-3 камер…

        И ещё вопрос – если для записи использовать рабочий компьютер (Intel Atom D2500) – запись видео в фоне (640х480) со сжатием сильно добавит тормозов в работе?

        1. Всё тот же – DIR-620. Порекомендовать ничего не могу – я просто пользователь и выбирал под себя по соотн. цена/качество на тот момент. Так что надо выбирать с производительным процессором и памяти хорошо бы не меньше сотни Мб – тут скорее мини-комп подойдёт или даже raspberry pi какой-нибудь, наверняка для него готовые решения по созданию роутера в сети уже лежат.

          Motion с моими настройками при записи с одной веб-камеры в фоне на ноуте моём с проц. 1,2 ГГц тормозов не добавляла.

  2. Роутер в качестве видеорегистратора… Присобачить клаву и монитор к простому роутеру- такое себе не могу представить.

    1. >Роутер в качестве видеорегистратора… Присобачить клаву и монитор к простому роутеру- такое себе не могу представить.

      Это потому, что в силу малообразованности Вы не понимаете, что 99% роутеров вполне работают и поддаются настройке и обслуживанию без постоянного подключения клавиатур и мониторов. У Вас как раз тот случай, когда было бы лучше промолчать – можно сойти за умного. Если Вам приходилось работать только с персональными компьютерами это не значит, что так происходит всегда и везде.

      1. Молчать, не возможно, когда интересно.
        Могу допустить, что на роуторе всстроена Linux.
        Ман бы глянуть, как видео регистратор настраивается.
        Но даже, если настроить, а храниться где будет запись?
        Роутер будет принимать с камеры и кидать на какой-то внешний накопитель- я правильно понял?

  3. Камера c120 имеет функцию RightLight. При плохой освещенности пытается скрыть дефекты и шум. Из-за этого наблюдается заторможенность работы, появляются белые линии. На windows с помощью драйверов устройства можно отключить эту функцию. Но для линукс я не нашел решения. Сталкивались ли вы с этим?

  4. А можете посоветовать минимальный дистрибутив (может даже без визуального интерфейса), на котором нормально будет работать тот же motion.
    Т.е. идея создать что-то типа сборки легковесной без лишних сборок – залил, настроил и забыл. И как раз для использования со старыми малопроизводительными системниками.

    1. Легковесную сборку можно сделать из любого дистра в принципе. Из готовых общего назначения я пользовался DamnSmall и Puppy. Небольшой список есть в вики: http://ru.wikipedia.org/wiki/Mini_Linux

      Motion заработает также в любом дистре с достаточными библиотеками, вопрос тут скорее в железе – чтобы хватало ресурсов для работы Motion. Но коль скоро она нормально на роутере работает, то на “старом”, лет до 10 возрастом, системнике должна заработать тоже.

    2. Самый маленький компьютер на котором можно запустить motion – это роутер с прошивкой openwrt, как это сделано описано здесь [ссылка]

  5. “идея использовать веб-камеру и домашний компьютер в данном случае выглядит наиболее привлекательной”
    Видел я в Серпухове в магазине мини-компьютер на одной платке за 2,500 рублей. С линуксом на борту, двумя юсб-портами, одним эзернет. Больше не изучал.

    1. Raspberry Pi от 2100 в интернете уже “здесь”, сборки Linux под него давно есть. Вероятно это он и был, в исполнении “В”.

  6. Ну и как бы вы оценили его использование в домашней видеорегистрации вместо домашнего компьютера?
    Все же хоть сейчас и достаточно дармовых старых “пней”, но компы на них громоздки.

    1. Судя по характеристикам – вполне подходит. Кроме того – маленький, не шумит, жрет умеренно. Да и в гугле отзывы о нормальной работе связки RPi+motion есть.

  7. Уважаемые спецы! Не могу посмотреть свой localhost:8089. И порты менял. И в силу своих чайницких возможностей менял настройки motion. А вот настройки motion по IP_adres:8089 вижу. Помогите а? (все остальное в motion работает нормально). Спасибо.

    1. нипонял почему мой вопрос не опубликовался. повторю. как комп с юсб вепкамерами подклюяить к компу с системой CMS?

Добавить комментарий для dimio Отменить ответ

Ваш адрес email не будет опубликован. Обязательные поля помечены *