В этой статье будет говориться о том, как своими руками собрать недорогую IP-камеру на базе Raspberry Pi Zero W и оригинального модуля камеры.
В принципе, именно с этой целью я изначально и планировал использовать «мини-малинку». Но впечатления от ее работы в такой роли оказались неоднозначными.
Сразу скажу, что свою стоимость подобное устройство отрабатывает. Но чуда не произошло и получить аналог промышленно выпускаемой IP-камеры за меньшие деньги не получилось.
Ну а подробнее обо всем читайте дальше в статье.
Содержание
Что нам понадобится
Для осуществления описываемых в этой статье действий понадобится:
- Raspberry Pi Zero W + корпус + CSI-шлейф
- Raspberry Pi Camera Board V2 или Raspberry Pi NoIR Camera Board V2
- Локальная сеть
Опционально может потребоваться отдельное устройство под видеорегистратор. Он понадобится если есть необходимость использовать 2 или более камер видеонаблюдения в одном комплексе.
В качестве видеорегистратора может использоваться практически любой компьютер под управлением Linux или даже Windows.
Сборка камеры
Все необходимое для сборки — это микрокомпьютер Raspberry Pi Zero W, microSD-карточка с образом системы, корпус с отверстием под глазок камеры, сам модуль камеры и шлейф с полноразмерного разъема CSI на миниатюрный CSI, используемый в моделях Zero и Zero W.
При помощи шлейфа подключаем модуль камеры к микрокомпьютеру.
Размещаем Raspberry Pi Zero W в основании корпуса.
Закрепляем модуль камеры под крышку на предназначенных для этого пластиковых защелках.
Совмещаем крышку с основанием корпуса, и процесс сборки IP-камеры можно считать завершенным.
К сожалению, каких-либо приспособлений для навесного крепления на корпусе Zero W не предусмотрено. Но главное определиться где будет стационарно размещена камера, а уж крепление придумать можно всегда.
На время экспериментов я просто прикрепил ее на скотч к оконному стеклу.
Вариант 1: MotionEyeOS
Наиболее простой способ использования Raspberry Pi в качестве сетевой камеры — это использование приложения MotionEye.
MotionEye представляет собой сервер видеонаблюдения, работающий на базе консольной утилиты Motion. Которая, в свою очередь, позволяет распознавать движение на видеопотоке с камеры и выводить этот видеопоток на открытый порт веб-сервера.
MotionEye можно установить на любой компьютер под управлением Linux как обычное приложение, а на Raspberry Pi и некоторых других одноплатных компьютерах также возможно использовать готовую сборку MotionEyeOS — минималистичный Linux-дистрибутив, весящий всего 230Мб и не содержащий в себе ничего, кроме самого MotionEye и минимального количества необходимых для его работы пакетов.
Я считаю, что для IP-камеры удобнее использовать именно готовую сборку. Ведь мы же не будем делать из камеры многозадачное устройство, а раз так — правильнее установить максимально облегченную версию системы.
Поэтому скачиваем образ системы с этой страницы и записываем его на microSD-карту как любой другой Linux-дистрибутив для Raspberry Pi (если вы не знаете как это делать — подробнее все действия описаны в обзорах Raspberry Pi 3 и Raspberry Pi Zero W).
После чего создаем файл wpa_supplicant.conf со следующим содержимым:
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev update_config=1 country=RU network={ ssid="НАЗВАНИЕ ТОЧКИ ДОСТУПА WIFI" psk="ПАРОЛЬ ОТ WIFI" key_mgmt=WPA-PSK }
И кидаем его в корневую директорию карточки памяти с записанным образом. Это нужно для того, чтобы Zero W автоматически подсоединилась к беспроводной сети.
Затем находим локальный IP-адрес нашей камеры в локальной сети, и открываем его в браузере.
И перед нами открывается веб-интерфейс MotionEye с уже работающей камерой.
Для доступа к видеопотоку камеры и настройкам системы нужно залогиниться под пользователем admin с пустым паролем. В дальнейшем свой пароль можно будет задать в настройках.
К слову, настройки достаточно обширны. Мы можем:
- Менять разрешение и частоту кадров видеопотока
- Включать и отключать систему обнаружения движения на видео
- Задавать место для хранения видеозаписей, которым может быть как собственная память Zero W, так и расшаренный сетевой ресурс, FTP-сервер в интернете или облачные хранилища Dropbox и Google Диск
- Кодек, которым будет кодироваться видео
- Подключать дополнительные камеры, в том числе и сетевые, поддерживающие протоколы RTSP или MJPEG
- Записывать не только видео, но и фото с заданной частотой (или по срабатыванию детектора движения)
- Гибко настраивать сам модуль камеры, меняя в том числе и ISO с экспозицией
- Передавать поток с камеры на сторонний видеосервер
В общем, вещь вполне серьезная. Может быть не настолько, как коммерческие системы видеофиксации, но скорее всего возможности MotionEye закроют все потребности домашнего пользователя по части видеонаблюдения.
А что с недостатками? А главный недостаток заключается в том, что Motion на Raspberry Pi не умеет использовать аппаратное ускорение. Поэтому вся нагрузка при работе с видеопотоком ложится на процессор — далеко не самый мощный даже в третьей «малине» и откровенно слабоватый в Zero и Zero W.
Давайте просто посмотрим примеры видеозаписей, сделанных через MotionEye на Zero W:
(Кстати, эти записи почему-то по-разному воспроизводятся в разных плеерах. Например, во всеядном Media Player Classic видео в высоких разрешениях идут как очень медленное слайдшоу, в то время как в Lister — встроенном в Total Commander просмотрщике файлов — они проигрываются намного лучше и с большей частотой кадров. Надо будет еще поэкспериментировать с выбором кодеков для сжатия)
Что мы видим? Хорошо пишется видеопоток с разрешением 640×480 пикселей, почти нормально идет видео в разрешении 800×600. На видео в более высоких разрешениях процессорной мощности Raspberry Pi Zero W уже не хватает и fps падает до 2-3 кадров в секунду.
Так что придется идти на компромисс, выбирая между разрешением видео и частотой кадров. Ну и о возможности Raspberry Pi Camera Board снимать в fullHD разрешении можно забыть: снимать-то она может, но видеопоток не будет успевать обрабатываться, поэтому в таком разрешении можно рассчитывать только на фотофиксацию.
Вариант 2: RTSP-поток на стороннее устройство
Другой вариант использования Raspberry Pi Zero W в качестве камеры — транслировать видео по RTSP-протоколу на другое устройство, выполняющее функции видеорегистратора.
Для этого нам понадобится уже не Motion, а VLC Player и консольная утилита raspivid, о которой я писал в обзоре модуля камеры.
Устанавливаем в Raspbian пакет vlc:
sudo apt-get install vlc
И запускаем трансляцию видеопотока:
raspivid -o - -t 0 -n -w 640 -h 480 -fps 30 | cvlc -vvv stream:///dev/stdin --sout '#rtp{sdp=rtsp://:8554/}' :demux=h264
При этом параметрами -w и -h устанавливается разрешение видео (ширина и высота соответственно), а ключ -fps ограничивает максимальную частоту кадров.
Видеопоток будет доступен в сети по адресу rtsp://ip-адрес-rpi-zero-w:8554/. Его можно интегрировать в любые приложения для видеонаблюдения, либо просматривать через видеоплееры с поддержкой сетевого воспроизведения — например, тот же VLC Player или Media Player Classic.
По RTSP-протоколу видео идет без таких просадок по fps как в Motion, но возникает другая проблема: транслируется оно с задержкой 3-5 секунд.
Вариант 3: MotionEye (клиент) + MotionEye (сервер)
Еще один вариант заключается в том, чтобы установить на Zero W MotionEye в качестве клиентского модуля, а на другом устройстве развернуть MotionEye в качестве сервера видеорегистратора для записи и трансляции видео. И соединить их по сети.
Это позволит снизить нагрузку на процессор Zero W (особенно если активировать в настройках MotionEye опцию («Fast Network Camera»).
Заключение
К явным плюсам подобной самодельной камеры можно отнести стоимость. Около 25 долларов стоит сам микрокомпьютер, еще 20 долларов за камеру, итого устройство обходится нам в 45 долларов или примерно 2700 рублей по нынешнему курсу. Средняя IP-камера в российской рознице будет стоить в 2-3 раза дороже. Минимум.
Еще один однозначный плюс — компактные габариты. Описываемую в данной статье камеру легко спрятать. И хотя в целом наше законодательство негативно относится к скрытому видеонаблюдению, в пределах своего жилища (не являющегося местом общего пользования) человек вправе устанавливать камеры так, как посчитает нужным.
Ну а минус — качество видео. Требовательных пользователей оно не удовлетворит.
В целом можно сказать, что свои деньги подобное устройство отрабатывает. Но я ожидал лучшего результата.
Raspberry Pi Zero W (набор)в интернет-магазине GearBest Raspberry Pi Camera Board V2на AliExpress
ZoneMinder пробовали установить?
Нет, не пробовал еще. Он лучше MotionEye?
Насколько я знаю, в Raspberry Pi есть аппаратный энкодер. Неужели он не используется MotionEye?
Есть, но не используется. На гитхабе есть форк MotionEyeOS с допилом аппаратного ускорения, но сам автор отмечает его сырость:
https://github.com/jasaw/motioneyeos/releases
Хотелось бы узнать по поводу температуры платы в процессе работы, поскольку я так понимаю в эту коробочку радиатор не влезает, и выдержит ли камера длительную работу.
Греется в разумных пределах.
Точную температуру не назову, но за несколько дней нон-стоп работы в закрытом корпусе и без радиаторов вся конструкция становится теплой на ощупь, но не горячей.
У Raspberry Pi Zero W вообще нагрева практически нет, что выгодно отличает ее от ближайших конкурентов от других производителей.