Системы безопасности с каждым годом занимают все более прочное место в жизни современного общества. Системы видеонаблюдения на основе видеокамер (CCTV cameras) становятся все более популярными для охраны личных жилищ и офисов. Хотя в последнее время значительно снизились цены на обычные камеры видеонаблюдения, тем не менее, системы видеонаблюдения с опцией трансляции видеоизображений через сеть интернет все еще остаются достаточно дорогими.
В этой статье мы рассмотрим создание очень дешевой камеры видеонаблюдения с захватом движения на основе платы Raspberry Pi и обычной USB веб камеры. Камеру можно будет подготовить к работе за несколько минут.
Но прежде чем мы перейдем к сути проекта, кратко рассмотрим программное обеспечение (ПО) для систем видеонаблюдения под названием Motion, которое является «сердцем» этого проекта. Motion представляет собой свободно распространяемое программное обеспечение с открытым исходным кодом, предназначенное для систем видеонаблюдения (CCTV software) и работающее в операционной системе Linux. Оно способно обнаруживать движение и начинать запись видео при его обнаружении. Когда на вашей Raspberry Pi будет установлено ‘Motion’, вы легко можете превратить ее вместе с камерой в своеобразную систему безопасности и получить доступ к следующему функционалу:
- Доступ к видеоизображениям, получаемым с камеры, из любой точки сети Интернет через веб-браузер, для этого необходимо будет ввести IP адрес вашей платы Raspberry Pi.
- Запись и сохранение видео при любом обнаружении движения в поле зрения камеры. Записанный файл можно будет просмотреть позже.
- Возможность создания красивого Timelapse Video (фотосъемка с определенным интервалом между снимками, в результате которого можно получить ускоренное видео).
- Возможность делать снимки через регулярные интервалы времени, которые также сохраняются на диск.
Также с помощью ПО Motion можно настраивать заранее определенные ‘триггеры’ на определенные события. Motion работает с видеокамерами, подключаемыми через порт USB, если вы хотите использовать специализированную камеру для платы (Pi Camera), то в этом случае вам будет необходима специализированная сборка Motion.
Быстрый запуск камеры видеонаблюдения на Raspberry Pi с захватом движения
Чтобы начать записывать ваше первое видео и транслировать его через сеть интернет, понадобится ввести всего лишь несколько команд. Но перед этим убедитесь в том, что ваша плата Raspberry Pi подключена к сети Интернет – через LAN или Wi-Fi. После этого выполните следующую последовательность шагов.
Шаг 1. Обновите вашу Raspberry Pi OS до последней версии с помощью команды:
1 |
sudo apt-get update |
Шаг 2. Установите библиотеку ‘Motion’ с помощью следующей команды:
1 |
sudo apt-get install motion |
Шаг 3. Установите процесс Motion (Motion daemon) в состояние «yes» (чтобы он был всегда запущен и действовал) с помощью редактирования файла /etc/default/motion. Его можно отредактировать с помощью редактора ‘nano’, запустив его с правами суперпользователя.
1 |
sudo nano /etc/default/motion |
Затем сохраните файл нажав ‘CTRL+X’, затем ‘Y’, после чего нажав Enter.
Шаг 4. Далее нам необходимо установить разрешение на использование целевого каталога (/var/lib/motion/), в котором программное обеспечение Motion будет сохранять все записываемые видео и изображения. Вам необходимо установить Motion в качестве «владельца» этого каталога с помощью команды:
1 |
sudo chown motion:motion /var/lib/motion/ |
Это разрешение крайне необходимо выставить, иначе вы получите ошибку, показанную на рисунке ниже. Эта ошибка высветится если вы будете проверять состояние (статус) Motion с помощью команды: sudo service motion status.
Шаг 5. На этом этапе у нас уже практически все готово, нам необходимо всего лишь изменить одну настройку в конфигурационном файле Motion (/etc/motion/motion.conf) – мы должны выключить stream_localhost (off). Мы должны отключить эту настройку, иначе вы не сможете транслировать видео в сеть Интернет и оно будет доступно только на самой плате Raspberry Pi. Измените эту настройку в конфигурационном файле Motion (Motion Configuration file) с помощью редактора ‘nano’:
1 |
sudo nano /etc/motion/motion.conf |
Теперь у нас все готово к трансляции видеоизображения в сеть Интернет, получаемого с USB веб камеры, подключенной к плате Raspberry Pi. Запустите Motion с помощью следующей команды и откройте IP вашей Raspberry Pi на порту 8081 в вашем браузере (например, 192.168.1.103:8081):
1 |
sudo /etc/init.d/motion start |
После этого вы увидите транслируемое видеоизображение как показано на рисунке ниже. В данном проекте мы использовали очень дешевую USB веб камеру (Quantum web camera QHM500LM), но если вы хотите улучшить качество изображения в данном проекте, вы можете использовать более дорогую камеру с хорошим разрешением.
Кроме просмотра данного видеоизображения (видео стрима с камеры) на компьютере вы его также можете просматривать на любом устройстве, в котором есть браузер, например, смартфоне, планшете и т.д. На следующем рисунке представлен для примера скрин с экрана смартфона.
Вы всегда сможете начать, остановить, возобновить и узнать состояние программы Motion с помощью следующих команд:
1 2 3 4 |
sudo /etc/init.d/motion start sudo /etc/init.d/motion stop sudo service motion restart sudo service motion status |
Или же вы можете перезагрузить Raspberry Pi в случае возникновения проблем:
1 |
sudo reboot |
Примечание: если у вас модель платы Raspberry Pi ниже версии 3, то вам, скорее всего, понадобится Wi-Fi адаптер чтобы подключить плату к роутеру по беспроводному соединению. Мы в этом проекте использовали плату Raspberry Pi 2 Model B, поэтому нам такой адаптер понадобился. Платы Raspberry Pi 3 и выше имеют в составе встроенный Wi-Fi.
Изменение настроек камеры наблюдения
Итак, в первоначальном варианте у нас камера уже работает. Теперь давайте рассмотрим какие ее настройки можно изменить чтобы оптимизировать ее использование конкретно под наши задачи. В конфигурационном файле Motion все эти настройки достаточно детально объяснены, приведены их значения по умолчанию и рекомендуемые значения. Посмотреть вы их можете введя следующую команду:
1 |
sudo nano /etc/motion/motion.conf |
Независимо от того, настроена ли видеотрансляция в сеть Интернет или нет, программа Motion записывает и сохраняет видеофайлы всегда, когда она обнаруживает движение. Соответственно, вы можете настроить частоту кадров, качество, ширину/высоты этих видеоизображений. Но если вы устанавливаете высокую частоту смены кадров для видео реального времени, убедитесь в том, что у вас достаточно быстрое соединение с интернетом. В нашем проекте мы использовали следующие значения (вы можете изменить их по своему усмотрению):
1 2 3 4 5 6 7 8 |
# Image width (pixels). Valid range: Camera dependent, default: 352 (ширина видео) width 640 # Image height (pixels). Valid range: Camera dependent, default: 288 (высота видео) height 480 # Maximum number of frames to be captured per second. (максимальное число кадров, захватываемых в секунду) # Valid range: 2-100. Default: 100 (almost no limit). framerate 50 stream_quality 90 |
Также можно настроить работу камеры наблюдения таким образом, что она будет сохранять несколько статичных изображений перед и после процесса записи видео (после того как камера обнаружит движение):
1 2 3 4 5 6 |
# Specifies the number of pre-captured (buffered) pictures from before motion (число изображений перед процессом записи видео) # was detected that will be output at motion detection. (после того как камера обнаружит движение) # Recommended range: 0 to 5 (default: 0) (рекомендуемый диапазон) pre_capture 0 # Number of frames to capture after motion is no longer detected (default: 0) (число изображений, захватываемых после того, как камера не будет фиксировать движение) post_capture 0 |
Программа Motion по умолчанию делает слишком много изображений когда она обнаруживает движение и для «маленьких» движений такое большое количество ‘jpg’ файлов может слишком напрягать. В связи с этим можно либо отключить эту настройку (output_pictures off) или установить ее в значение ‘best’:
1 |
output_pictures best |
Также можно настроить захват снимков через регулярные интервалы, определяемые вами, с помощью следующей настройки:
1 2 |
# Make automated snapshot every N seconds (default: 0 = disabled) snapshot_interval 0 |
Одной из самых «привлекательных фишек» программы является timelapse Video, причем это совершенно бесплатно, в то время как другие программы для создания такого видео могут стоить достаточно дорого. Вы можете настроить интервал снимков для Timelapse Video:
1 2 |
# Default value 0 = off - else save frame every Nth second (иначе сохраняем кадр каждую N-ю секунду) ffmpeg_timelapse 2 |
Вы можете изменить каталог, в который по умолчанию сохраняются все изображения и видеофайлы (Target Directory), с помощью опции ‘target_dir’, но не забывайте сделать Motion «владельцем» этого каталога как объяснено ранее в статье.
1 2 3 |
# Target base directory for pictures and films (каталог для сохранения изображений и видео) # Recommended to use absolute path. (Default: current working directory) (рекомендуется использовать абсолютный путь) target_dir /var/lib/motion |
Также можно изменить порт, через который происходит трансляция видео в сеть интернет (по умолчанию – 8081):
1 2 |
# The mini-http server listens to this port for requests (default: 0 = disabled) stream_port 8081 |
Если вы не хотите работать с видеофайлами большой длительности, вы можете настроить Motion таким образом, чтобы она делала несколько коротких видеофайлов определенной длительности вместо одного длинного. Вы можете задать длительность этих файлов в секундах (0 – бесконечно):
1 2 3 |
# Maximum length in seconds of a movie (максимальная длина видеофайлов в секундах) # When value is exceeded a new movie file is created. (Default: 0 = infinite) (когда это значение превышается, создается новый файл, по умолчанию 0 – бесконечность) max_movie_time 30 |
Также вы можете изменить границу (в числе изменяемых пикселов в изображении), при превышении которой камера будет фиксировать движение.
1 2 3 4 5 6 7 |
# Threshold for number of changed pixels in an image that # triggers motion detection (default: 1500) (граница в пикселах, при превышении которой фиксируется движение) threshold 1500 # Picture frames must contain motion at least the specified number of frames (движение должно фиксироваться в определенном числе кадров) # in a row before they are detected as true motion. At the default of 1, all (чтобы камера засчитала это за наличие движения) # motion is detected. Valid range: 1 to thousands, recommended 1-5 (диапазон изменения: от 1 до нескольких тысяч, рекомендуется 1-5) minimum_motion_frames 5 |
По умолчанию, логи (logs) программы Motion сохраняются в файл ‘syslog’, но вы можете изменить файл, в который будут сохраняться логи:
1 2 |
# Use a file to save logs messages, if not defined stderr and syslog is used. (default: not defined) logfile /tmp/motion.log |
Не забывайте сохранять и заново запускать программу Motion после того как внесли какие-нибудь изменения в ее настройки. Чтобы сохранить файл motion.conf, нажмите CTRL+X, затем Y и затем Enter.
Мы рассмотрели базовые настройки, которые можно изменить для программы Motion. Но при желании вы можете глубже погрузиться в изучение ее конфигурационного файла. Там вы найдете еще настройки для изменения яркости, контрастности, битовой скорости передачи данных, триггерам (triggers), идентификации с помощью пароля и многое другое.
Как смотреть видеотрансляцию с камеры через сеть интернет
Ранее в статье мы рассмотрели как смотреть видео трансляцию с камеры в нашей локальной сети, используя IP адрес нашей платы Raspberry Pi. Но если вы хотите смотреть ее из любой точки через сеть интернет, вы должны настроить перенаправление (переадресацию) порта (Port Forwarding) в вашем роутере/модеме. В большинстве случае вам потребуется перенаправлять порт 80 (используемый для HTTP или интернета) на ваш локальный или частный (private) IP адрес вашей платы Raspberry Pi (например, 192.168* в нашем случае). После настройки перенаправления (переадресации) порта все входящие соединения на порт 80 будут перенаправляться на ваш локальный адрес и вы сможете смотреть трансляцию из любой точки в сети интернет вводя там публичный (public) IP адрес вместе с портом видео трансляции, который мы установили ранее (8081).
Каждый роутер имеет свой собственный интерфейс для настройки перенаправления порта (Port Forwarding), чтобы получить доступ к этим настройкам, вы должны войти в панель управления своим роутером, расположенную по адресу (192.168.1.1). Но помните о том, что для того, чтобы вы могли смотреть видео трансляцию через сеть интернет с камеры, подключенной к вашей Raspberry Pi, вы должны иметь статичный IP адрес при выходе в сеть интернет и он не должен изменяться при каждой перезагрузке вашего роутера/модема. Про услугу подключения статичного IP адреса вы можете узнать у своего провайдера (обеспечивающего вам выход в сеть интернет) – чаще всего она платная (100-200 рублей в месяц), но у некоторых провайдеров она может быть бесплатной.