Видеорегистрация + видеонаблюдение для дома в 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 я хочу рассказать о том, как сделать из веб-камеры камеру «ночного видения». До встречи!



Category Рубрики: *NIX | Tag Метки: , , , , | Comments 20 комментариев »

20 комментариев

  1. pessimist says:

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

    • dimio says:

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

      • Murz says:

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

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

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

        • dimio says:

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

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

  2. Аноним says:

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

    • Юрий says:

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

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

  3. m2 says:

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

  4. m2 says:

    после удаления ИК фильтра эта проблема уже не беспокоит.

  5. Andrey says:

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

    • dimio says:

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

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

    • mszerg says:

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

  6. Михаил says:

    Спасибо за подробный конфиг.
    Хочу сделать статью на своем блоге [ссылка] о rasbery pi и видеонаблюдении

  7. caphook says:

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

    • dimio says:

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

  8. caphook says:

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

    • dimio says:

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

  9. Александр says:

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

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