Создаем систему видеонаблюдения с помощью motion

В этой статье я хочу рассказать о настройке и использовании домашней системы слежения. Вы сможете сделать за любой территорией, попадающей в поле зрения вышей веб-камеры, отправлять себе сообщение при обнаружении активности в этой области, делать снимки, транслировать изображение по сети (можно прикрутить авторизацию для доступа видео с вашей веб-камеры и смотреть удаленно, если у вас есть статический ip) вообще что захотите — полный контроль и свобода выбора, что в общем характерно для ос gnu/linux и подобных (в дальнейшем речь пойдет именно о linux).

Итак, представляю вашему вниманию замечательную утилиту — Motion, распространяющуюся по лицензии GPL. Скорее всего она уже есть в репозитории вашего дистрибутива, если нет (хотя я сомневаюсь в этом) — можно скачать deb, rpm или исходный код со страницы закачки на офф сайте. Я воспользовался средствами своего пакетного менеджера.



Можно запускать, но лучше сначала немного настроить ее под себя. Конфигурационный файл хранится в /etc/motion (лучше его скопировать в домашний каталог пользователя, указать путь к конфгу можно опцией -c). Отредактируем его vim /etc/motion/motion.conf

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

Первая опция:
daemon (on/off) — будет ли motion запускаться в режиме демона(в фоне). Можно указать также опцию -n при запуске, тогда программа будет запущена в обычном режиме.

Далее:
videodevice /dev/video0 — указываем наше видео устройство. У меня это /dev/video0.

rotate (0,90,180,270) — повернуть изображение на заданное количество градусов(если камера прикреплена под углом)
width 320
height 240

— ширина и высота картинки в пикселях, соответственно

framerate (2-100) — количество кадров, захватываемых в секунду. Естественно, чем больше значение, тем больше потребление ресурсов компьютера. Выбирайте оптимальное значение.
minimum_frame_time 0 — вдогонку предыдущей опции — позволяет задать минимальное время между захватом двух кадров. Можно, например сделать захват кадра каждый 5 сек.

netcam_url value — используйте, если доступ к вашей камере осуществляется посредством сети. вместо value укажите путь до видеопотока. По умолчанию эта опция не используется
auto_brightness off
brightness 0
contrast 0
saturation 0
hue 0

— яркость, контраст, насыщенность и т.п.

Следующая важная для нас секция:
# Motion Detection Settings:
threshold 1500 — можно охарактеризовать как чувствительность для определения движения. Чем меньше значение, тем чувствительнее детектор.
noise_level 32 — уровень шума. Позволяет игнорировать шум, создаваемый камерой. Установите оптимально значение для вашей камеры.

area_detect (1-9) Позволяет следит только за определенной областью. 1 — левый верхний угол, 2 — верхняя средняя часть,… 5 — центр,… 9 — правый нижний угол.

mask_file value — Указываете путь до pgm файла с маской движения, которое не нужно фиксировать. Позволяет игнорировать качание ветвей деревьев и пр. Подробнее о файлах pgm здесь netpbm.sourceforge.net/doc/pgm.html

Далее идут еще несколько опций по определению движеия и опции кодирования изображения и видео. Их описание я опущу.

snapshot_interval N — Создает снимки каждые N секунд.
locate (on/off) — рисовать рамку вокруг движущегося объекта.

target_dir /usr/local/apache2/htdocs/cam — Папка, куда будут сохраняться изображения. Я установил это значение ~/motionshots

snapshot_filename %v-%Y%m%d%H%M%S-snapshot
jpeg_filename %v-%Y%m%d%H%M%S-%q
movie_filename %v-%Y%m%d%H%M%S

— Настраиваем имена файлов.

on_event_start value
on_event_end value
on_picture_save value
on_motion_detected value
on_area_detected value
on_movie_start value
on_movie_end value
on_camera_lost value

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

Теперь можно запускать
motion [-c /путь/до/конфига]. Можно также добавить в список демонов вашей системы( rc-update add motion default для гетнты, для арча — добавить в DAEMONS=() в /etc/rc.conf, для других дистрибутивов точно не знаю, но это не сложнее)

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

И напоследок несколько скриншотов с примером использования. Как видно, при обнаружения движения motion в режиме non-daemon выводит строчки вида [1] File of type 1 saved to: /home/vladimir/motionshots/01-20110727140020-00.jpg





UPD: Благодарю за инвайт! Топик перенес в Linux для всех
Поделиться публикацией
AdBlock похитил этот баннер, но баннеры не зубы — отрастут

Подробнее
Реклама
Комментарии 24
  • +9
    Объясните, пожалуйста, зачем текстовый вывод консоли вы вставили в статью не плэйн-текстом (в тегах code или source), а картинкой, да ещё и скриншотом целого рабочего стола?
    • 0
      Решил сделать скриншотами для наглядности, один тест как-то суховато.
      Рабочий стол сейчас уберу, оставлю только окна.
    • +1
      Еще бы кто-нибудь написал нормальную веб-морду для просмотра этих записей.
      В остальном все вполне работоспособно, по крайней мере за 1.5 года эксплуатации 8 камер никаких серьезных проблем замечено мной не было.
      • 0
        Каким образом у вас подключены камеры? IP-камеры или аналоговые?
        • 0
          IP-камеры c PoE питанием.
      • +1
        где результат работы?
        оценка качества?
        скриншоты?
        • 0
          где результат работы?

          >Теперь при обнаружении активности в наблюдаемой области программа сохраняет снимки в указанную директорию и выполняет ваш скрипт

          оценка качества?

          Это субъективно для каждого в отдельности. Я лишь описал инструмент, а человек сам решает подходит он ему для конкретной задачи или ищет альтернативу.
          скриншоты?

          Я выложил три скриншотя с примером запуска и получения результата работы прогрммы.
          Да и какие Вам вообще нужны скриншоты прогаммы-демона?
          • +3
            ваша статья(на данный момент) — пересказывание параметров настройки из HOWTO и man. это совсем неинтересно, вот я вам скажу, гораздо интересней узнать оценку параметра срабатывания motion детектора для различной освещенности, нагрузки процессора, пробовали ли вы передавать данные по сети, какие выходят скриншоты, можно ли на них ставить timestamp, как программа ведет себя в темноте. вы не провели опыт, оставив систему на пару часов, чтобы оценить пресловутое «качество» работы сервиса.

            вот вы написали

            «отправлять себе сообщение при обнаружении активности в этой области, делать снимки, транслировать изображение по сети (можно прикрутить авторизацию для доступа видео с вашей веб-камеры и смотреть удаленно, если у вас есть статический ip) вообще что захотите — полный контроль и свобода выбора, что в общем характерно для ос gnu/linux и подобных (в дальнейшем речь пойдет именно о linux).»

            но совершенно ничего этого не раскрыли в статье. вы не попробывали ни «отправить себе сообщение», ни «транслировать изображение по сети», ни «смотреть удаленно», что значит «полный контроль»? — нераскрыто.

            в итоге — нет выводов, кроме «Теперь при обнаружении активности в наблюдаемой области программа сохраняет снимки в указанную директорию и выполняет ваш скрипт». клевый вывод: таким образом, мы показали что программа делает то, что она там должна делать.

            но это мы и так бы знали, воспользовавшись HOWTO.
            так-то.
            • 0
              Зря вы так.

              Я вот уже два года пользуюсь тупой китайской виндовой софтиной, которая шла вместе с картой захвата. И если было бы нормальное linux-решение — с удовольствием бы перешел.

              Так вот про motion первый раз услышал, причем с примерами. Попробую поднять у себя.
              А так гуглятся только платные версии, покупку которых никто не финансирует…
              • 0
                Могу запилить еще мини-статейку с демонстрацией, скажем, той же отправке сообщения по jabber при обнаружении активности, если кому надо.
        • 0
          второй раз сталкиваюсь с обзором «motion как видеорегистратор» и не разу «настроил avreg и забыл»…
          • +1
            Расскажите пожалуйста, чем вас не устроил Zoneminder. Или это просто ради саморазвития всё затеяно?
            • 0
              Сейчас как раз реализовываем подобное.
              zoneminder ужасно тупит, грузит проц, а местами вообще костыль на костыле (пример: вместо видео он пишет кадры в jpeg).
              Для себя решили сделать собственный демон на OpenCV. Ещё и CUDA туда прикрутим. А логику — в отдельный демон (ибо нефиг).
              • 0
                Я кстати начал писать с использованием OpenCV, но так как это было нужно прямо сейчас забросил. Вообще как я понял архитектура должна быть такая:

                1) Камеры ВСЕГДА льют поток в детекторы движения.
                2) Детекторы буфирезируют его скажем минут на 10. И проверяют буфер на движение. Если обнаружено движение то детектор отдает поток с момента -1 минута до движения и +1 после (опционально настраиваемо) устройству по имени сторидж.
                3) Сторидж маркирует и сохраняет потоки (в бд, в raw партицию, как угодно....)

                CUDA хорошо, но нужно и без нее… Не всегда руководство понимает зачем крутая видюха…
            • 0
              Туда можно прикрутить функционал для того, чтобы делать снимок камерой в момент регистрации движения или он там уже есть?
              • 0
                Именно в момент, а не через промежутки
                • 0
                  Ну вот он как раз при обнаружении движеня и делат снимки. А через интервал — это уже опционально.
              • 0
                wiki.linuxformat.ru/index.php/LXF115:Hardcore_Linux#Web-.D0.BA.D0.B0.D0.BC.D0.B5.D1.80.D1.8B:_.D0.A1.D1.82.D0.B0.D1.82.D1.8C_.D0.91.D0.BE.D0.BB.D1.8C.D1.88.D0.B8.D0.BC_.D0.91.D1.80.D0.B0.D1.82.D0.BE.D0.BC
                февраль 2009го
                • 0
                  IP камеры это не кошерно 8) -=- Вы бы попробовали две вебки прикрутить что бы вместе писали 8)

                  возможность в motion есть н все упирается в железо а точнее в контролет USB
                  мне пока две вебки на одном контролере запустить не удалось — а тебе %username%?
                  • 0
                    У только одна usb камера, больше ничего нет. Поэтому попробовать не могу.
                  • 0
                    Хорошая статья. Но к сожалению motion работает только для MJPEG. Многие камеры сейчас поддерживают RTSP (и моя в том числе). Я пытался сделать шлюз с помощью VLC но он почему то живет минут 30 потом появляется мусор. Радость была в том, что моя камера уже сама умела детектить движение и даже маски там есть.
                    У кого есть опыт с RTSP?
                    • 0
                      Здесь статья, в которой я описывал как настроить motion для работы с rtsp. Вернее motion только запускает захват потока с камеры и останавливает его.
                    • 0
                      Кстати, в последних версиях motion сменились названия параметров в конфиге. Старый конфиг уже не покатит, придётся переделывать.

                      Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.