Контакты

Передаем потоковое видео с вебкамеры, подключенной к Raspberry Pi. Подключаем камеру к Raspberry Pi Raspberry pi управление ip ptz камерой

Доброе время суток!

В предновогоднюю ночь у меня возникла идея соорудить некое подобие видеонаблюдения. Все необходимое у меня имелось на руках:

  • Одноплатный компьютер Raspberry Pi Model B
  • Web-камера LOGITECH HD Webcam C270
Прочитав я решил немного развить идею автора.
Знакомство
Итак, для начала познакомимся c главным «компонентом»:
Внешний вид Raspberry Pi:

Характеристики:

  • Broadcom BCM2835 700MHz ARM1176JZFS processor with FPU and Videocore 4 GPU
  • GPU provides Open GL ES 2.0, hardware-accelerated OpenVG, and 1080p30 H.264 high-profile decode
  • GPU is capable of 1Gpixel/s, 1.5Gtexel/s or 24GFLOPs with texture filtering and DMA infrastructure
  • 512MB RAM
  • Boots from SD card, running a version of the Linux operating system
  • 10/100 BaseT Ethernet socket
  • HDMI video out socket
  • 2 x USB 2.0 sockets
  • RCA composite video out socket
  • SD card socket
  • Powered from microUSB socket
  • 3.5mm audio out jack
  • Raspberry Pi HD video camera connector
  • Size: 85.6 x 53.98 x 17mm"
pi@hall-pi ~ $ cat /proc/cpuinfo processor: 0 model name: ARMv6-compatible processor rev 7 (v6l) BogoMIPS: 2.00 Features: swp half thumb fastmult vfp edsp java tls CPU implementer: 0x41 CPU architecture: 7 CPU variant: 0x0 CPU part: 0xb76 CPU revision: 7 Hardware: BCM2708 Revision: 000e Serial: 000000005a82c372

Список официально поддерживаемых дистрибутивов можно найти . Я же остановил свой выбор на Raspbian без графической оболочки.

Процесс установки достаточно прост и не нуждается в подробном описании, поэтому перечислю основные факты, на которые стоит обратить внимание:

  1. Настройка часового пояса
  2. Настройка имени компьютера
  3. Включение доступа по SSH
  4. Обновление системы
После выполнения всех необходимых настроек можно приступать.
Подготовка
Для начала выполним установку всех необходимых пакетов:
sudo apt-get install imagemagick libav-tools libjpeg8-dev subversion
После чего скачаем и соберем mjpg-streamer:
sudo svn co https://svn.code.sf.net/p/mjpg-streamer/code/mjpg-streamer/ mjpg-streamer cd mjpg-streamer make
Т.к. у нас все данные будут храниться в облаке, настроим работу с удаленной файловой системой по WebDAV:
sudo apt-get install davfs2 sudo mkdir /mnt/dav sudo mount -t davfs https://webdav.yandex.ru /mnt/dav -o uid=pi,gid=pi
Для того, чтобы не вводить каждый раз имя пользователя и пароль, нужно добавить их в файл
/etc/davfs2/secrets
/mnt/dav user password
Рабочий процесс
Добавим в /etc/rc.local команды для монтирования WebDAV и запуска скрипта для трансляции в сеть:
mount -t davfs https://webdav.yandex.ru /mnt/dav -o uid=pi,gid=pi cd /home/pi/mjpg-streamer && ./mjpg_streamer -i "./input_uvc.so" -o "./output_http.so -w ./www"
Теперь, зайдя по адресу http://:8080/ мы получим доступ к камере. Осталось только сделать проброс порта на роутере и можно получить доступ к камере за пределами локальной сети.
Создание timelapse видео
Первым делом нам надо получить изображение с камеры. Т.к. она уже занята (изображение транслируется веб-сервером), то воспользуемся возможностью получения текущей картинки с веб-сервера:
curl http://localhost:8080/?action=snapshot > out.jpg
В случае, если мы хотим нарисовать дату снимка на изображение, то мы можем воспользоваться командой convert
timestamp=`stat -c %y out.jpg` convert out.jpg -fill black -fill white -pointsize 15 -draw "text 5,15 "${timestamp:0:19}"" out_.jpg
Полная версия скрипта:
#!/bin/bash filename=$(perl -e "print time") foldername=$(date --rfc-3339=date) curl http://localhost:8080/?action=snapshot > $filename timestamp=`stat -c %y $filename` mkdir /mnt/dav/out/$foldername convert $filename -fill black -fill white -pointsize 15 -draw "text 5,15 "${timestamp:0:19}"" /mnt/dav/out/$foldername/$filename.jpg rm $filename
Сборка видео осуществляется командой avconv:
avconv -r 10 -i %06d.jpg -r 10 -vcodec mjpeg -qscale 1 out.avi
Полная версия скрипта сборки видео:
#!/bin/bash filename=$(date --rfc-3339=date) i=0 for f in `ls -tr /mnt/dav/out/$filename/*.jpg 2>/dev/null` do newf=`printf %06d $i`.jpg echo $f "-->" $newf mv $f $newf i=$((i+1)) done rmdir -R /mnt/dav/out/$filename/ avconv -r 10 -i %06d.jpg -r 10 -vcodec mjpeg -qscale 1 /mnt/dav/$filename.avi rm *.jpg
Теперь осталось только прописать выполнение скриптов в планировщике Cron:
* * * * * pi bash /home/pi/cam.sh 59 23 * * * pi bash /home/pi/build.sh
Пример видео
Заключение
Данный подход помогает избавиться от необходимости траты большого количества времени на просмотр видео, а так-же удешевляет конечный продукт. Благодаря присутствию полноценной ОС, появляется возможность расширять функционал в нужном направлении.

Одноплатный компьютер Raspberry Pi позволяет создавать действительно интересные и полезные вещи: от мультимедийных центров до систем домашней автоматизации. Благодаря подключению различных модулей к Raspberry Pi можно значительно расширить функциональность этого миникомпьютера.



Одним из таких дополнительных подключаемых модулей является камера, позволяющая делать снимки или снимать видео. Сегодня на рынке представлен ряд камер для Raspberry Pi, и в этом материале проведем их небольшой обзор.


Рассмотрим шесть наиболее популярных камер: ZeroCam Noir, ZeroCam FishEye, Raspberry Pi Compatible Fisheye Camera, Raspberry Pi Camera V2, Raspberry Pi Camera V2 Noir и Raspberry Pi Camera 1.3.



ZeroCam Noir – это модуль камеры для Raspberry Pi Zero или Raspberry Pi Zero W, поэтому, если вы хотите использовать его в Raspberry Pi 3 или 2, вам нужно использовать адаптерный кабель. Эта камера не имеет инфракрасного фильтра на объективе, поэтому идеально подходит для съемки при слабом освещении. Вот некоторые ее основные характеристики: 5-мегапиксельный сенсор, 2592 × 1944 пикселей, 1080p при 30 FPS (или 60 FPS при 720p, 90 FPS при 480p), фокусное расстояние 3.60 мм, 53.50 градуса по горизонтали, 41.41 градуса по вертикали, прибл. размеры платы с камерой: 60 x 11.4 x 5.1 мм.



Это версия ZeroCam типа «рыбий глаз», что означает, что она имеет широкоугольное изображение. Эта камера также сделана для Pi Zero или Pi Zero W, поэтому, чтобы использовать ее с другой Pi-панелью, вам нужен адаптерный кабель.



Это совместимая с Raspberry Pi камера типа «рыбий глаз», которую легко можно найти на различных торговых интернет-площадках типа AliExpress, TaoBao, eBay. Она характеризуется широкоугольным обзором 175º. В ее основе лежит датчик Omnivision 5647 разрешением 5 мегапикселей (2592 x 1944 пикселей).



Эта камера оснащена 8-мегапиксельным датчиком изображений Sony IMX219 с фиксированным фокусным объективом, способным отображать статические изображения 3280 × 2464 пикселей, она поддерживает видео 1080p30, 720p60 и 640 × 480p90. Камера совместима со всеми платами Raspberry Pi, но если вы хотите использовать ее с Pi Zero, вам нужен адаптерный кабель.



Эта камера обладает всеми функциями модуля Raspberry Pi Camera V2, но у нее нет инфракрасного фильтра. Это означает, что это почти идеальная камера для съемки в темное время суток.



Raspberry Pi Camera 1.3 является предшественником модуля V2. Она оснащена 5-мегапиксельным датчиком OmniVision OV5647.

Сравнение полей обора и качества изображения камер для Raspberry Pi

В этом тесте все камеры установлены на расстоянии 1 метра от тестового изображения. Результаты следующие:











Сравнение качества изображения и цветопередачи камер для Raspberry Pi при зумировании











Сравнение качества съемки ночью

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







Выводы

Все камеры работают немного лучше, чем ожидалось от таких дешевых модулей. К сожалению, универсальной камеры среди них нет, и приходится идти на компромисс, поскольку, похоже, нет широкоугольных («рыбий глаз») камер с удаленным ИК-фильтром. Поэтому, если вам нужен широкий угол, вам понадобится обычное освещение, и, наоборот, ночью у вас вряд ли получится широкоугольная съемка.

Т.к. этот компьютер обладает достаточной производительностью для того чтобы принимать, хранить, обрабатывать и передавать по wifi, на другие устройства, видео с камеры (например с usb камеры). Существуют специальные камеры для Raspberry PI которые подключаются к специальному разъёму на нём и USB камеры которые подключаются к, какому либо, порту USB на Raspberry PI. Т.к. USB камеры, как правило, гораздо дешевле чем специальные (пусть и хуже) то далее рассмотрим использование именно USB камеры с Raspberry PI. Существует некоторое количество программ для захвата видео с USB камеры или же можно написать свою но для простоты для начала рассмотрим захват и передачу видео с использованием программы motion. Для установки программы motion на Raspberry PI нужно сначала подключиться к нему через программу Putty (или любую другую программу-терминал с возможностью связи по SSH) (о том как это сделать смотрите в предыдущей статье "Raspberry PI 3 настройка и управление GPIO по WIFI "). После подключения к Raspberry PI нужно произвести обновление системы командами

Sudo apt-get update

Sudo apt-get upgrade

После успешного обновления системы нужно установить программу motion командой

Sudo apt-get install motion

При установке возможно будет задан вопрос "Do you want to continue?" после которого надо будет ввести буку "Y". После установки программы motion нужно будет внести некоторые изменения в конфигурационные файлы. Откроем файл motion.conf в редакторе nano командой

Sudo nano /etc/motion/motion.conf

После чего

Заменить на

Далее найдём другие строки для изменения, для этого нажмём сочетание клавиш CTRL+W, впишем "stream_localhost" и нажмём enter, после этого должна найтись нужная строка, если не нашлась то переменная "stream_localhost" называется как то по другому например "webcam_localhost" или что то подобное. После того как строка с данной переменной найдена нужно

Stream_localhost on

заменить на

Stream_maxrate 1

И заменить на

Stream_maxrate 100

Заменить на

После чего

Minimum_frame_time 0

Заменить на

Minimum_frame_time 1

Последнее делается для того чтобы кадры выводились раз в секунду - это не очень хорошо смотрится но зато видео не будет пропадать при резком изменении изображения. Назначение каждой переменной можно прочитать в комментариях.
Теперь сохраним изменения нажав CTRL+O и enter после чего нажмём CTRL+X и выйдем из редактора nano. Теперь давайте отредактируем другой файл, для этого введём команду

Sudo nano /etc/default/motion

И заменим строку

Start_motion_daemon=no

Start_motion_daemon=yes

После чего сохраним изменения нажав CTRL+O и enter а дальше нажмём CTRL+X и выйдем из редактора nano. Теперь запустить передачу видео (USB камера при этом должна быть подключена к одному из портов) можно командой

Sudo service motion start

Остановить командой

Sudo service motion stop

Для того чтобы увидеть видео нужно открыть браузер, и вписать в адресной строке IP адрес Raspberry PI после чего поставить двоеточие и 8081 (IP адрес Raspberry PI:8081) и нажать enter после чего в браузере должно появится видео с USB камеры. Посмотреть как это всё делается, увидеть результат и кое что ещё можно в видео:

Вот так простым способом можно получить видео с USB камеры подключённой к Raspberry PI. Если это Raspberry PI 3 со встроенным wifi и питающийся от powerbank (или какого либо другого переносного источника электроэнергии)(например такой такой или подешевле такой хотя не рекомендуется использовать дешёвый, Raspberry PI нужен нормальный источник питания для использования всех его возможностей, также очень желательно поставить радиатор на процессор и другие микосхемы которые нареваются в ходе работы Raspberry, в идеале радиатор д.б. медным и порытым специальной чёрной краской) то на основе всего этого можно сделать какую либо систему видеонаблюдения, видеокамеру или что то подобное.

Один из самых популярных проектов на Raspberry Pi — это создание сервера видеонаблюдения с возможностью трансляции в интернет. Многие используют подобные системы в качестве охранных систем (и я в том числе), но сущестуют и другие способы применения. Если вы придумали что то интересное, можно написать об этом в комментариях. Подобный проект обойдется примерно в £60 — £70, но я использовал некоторые дополнительные компоненты, которые были у меня в наличии (и, получается, ничего не стоили). Я использовал вебкамеру Logitech Quickcam в своем проекте.

Что нам понадобится:

  • Raspberry Pi
  • SD карта объемом 8 Гб или более
  • Вебкамера
  • Доступ в интернет с помощью Ethernet или WiFi адаптера
  • USB концентратор с внешним питанием
  • Клавиатура
  • Мышь (для настройки WiFi)

Итак, начнём с установки на SD карту свежей версии Debian «Wheezy», которую можно . Для установки образа на компьютере с Windows можно использовать утилиту , а для компьютеров Mac использовать эту программу . (Подробнее об установке образов )

После завершения копирования образа, вставляем SD карту в Raspberry Pi. Подключаем сетевой кабель или беспроводной адаптер, а также клавиатуру. И, наконец, не забудьте подключить USB концентратор и подать на него питание.

После включения Raspberry Pi, установите часовой пояc, в соответствии со своим местоположением, с помощью утилиты raspi-config .

Обратите внимание, что для входа в свежеустановленной системе нужно использовать имя пользователя pi с паролем raspberry .

Если используется подключение к сети по WiFi:

Для настройки беспроводного адаптера и подключения к WiFi с помощью графического интерфеса необходимо ввести команду:

После этого можно будет настроить беспроводное подключение. По окончании, щелкните мышью в левый нижний угол экрана и выберите пункт Log out для возврата в командную строку.

Теперь пришло время обновить систему. Наберите в командной строке:

Sudo apt-get update sudo apt-get upgrade

и дождитесь завершения. Теперь необходимо установить Motion — программное обеспечение, которое будет заниматься трансляцией видео с помощью встроенного вебсервера. Для этого, введите:

Sudo apt-get install motion

и подождите. По завершении установки, подключите вебкамеру к порту USB концентратора с внешним питанием.

Теперь нужно внести изменения в конфигурационный файл программы Motion. Для этого выполните команду:

Sudo nano /etc/motion/motion.conf

Откроется редактор с конфигурационным файлом, в который можно внести исправления. Наиболее важными являются эти параметры:

Daemon = OFF (исправить на ON – этот параметр где-то в начале файла) webcam_localhost = ON (исправить на OFF – этот параметр где-то в конце файла)

Нажмите Ctrl + X для сохранения, а затем ‘y’ для подтверждения операции и, наконец, Enter для указания имени файла.

Теперь можно запускать сервер Motion:

Sudo service motion start

Подождите примерно 60 секунд, затем введите в браузер IP адрес Raspberry Pi. Оптимальным выбором браузера будет Firefox последней версии.

Адрес выглядит так: 192.168.X.X:8081

Убедитесь, что в конце строки указан порт 8081 для того, чтобы увидеть изображение. Для доступа к настройкам используйте порт 8080 вместо 8081.

Порт 8081 – видео Порт 8080 – веб интерфейс конфигурации

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

Поздравляю! Вы только что настроили свой собственный сервер видеонаблюдения на своём Raspberry Pi! Желаю успехов и не стесняйтесь распространять текст этой статьи!

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

Внимание! Всё, что описано в данной статье вы повторяете на свой страх и риск! Я не несу ответственности за любые последствия. Статья представляет собой только руководство.

Два года назад, когда я только начал заниматься мультикоптерами, мне пришлось сделать небольшой . Поскольку квадрокоптер задумывался сугубо автономным, все что требовалось от этого пульта - это управлять беспилотником во время испытаний и настройки.

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

  1. Батарейки в корпус никак не влазили, поэтому приходилось их приматывать к корпусу изолентой:)
  2. Настройка параметров была вынесена на четыре потенциометра, которые оказались очень чувствительными к температуре. В помещении настраиваешь одни значения, выходишь на улицу - а они уже другие, уплыли.
  3. У Arduino Nano, которую я использовал в пульте, есть всего 8 аналоговых входов. Четыре были заняты настроечными потенциометрами. Один потенциометр служил газом. Два входа были подключены к джойстику. Оставался свободен только один выход, а параметров для настройки гораздо больше.
  4. Единственный джойстик был вовсе не пилотным. Управление газом с помощью потенциометра тоже весьма угнетало.
  5. А еще пульт не издавал никаких звуков, что иногда бывает крайне полезно.

Чтобы устранить все эти недостатки, я решил кардинально переделать пульт. И железную часть, и софт. Вот что мне захотелось сделать:

  • Сделать большой корпус, чтобы в него можно было запихнуть все что хочется сейчас (включая батарейки), и что захочется позже.
  • Как-то решить проблему с настройками, не за счет увеличения числа потенциометров. Плюс, добавить возможность сохранения параметров в пульте.
  • Сделать два джойстика, как на нормальных пилотных пультах. Ну и сами джойстики поставить православные.

Новый корпус

Идея чрезвычайно проста и эффективна. Вырезаем из оргстекла или другого тонкого материала две пластины и соединяем их стойками. Все содержимое корпуса крепится либо к верхней, либо к нижней пластине.

Элементы управления и меню

Чтобы управлять кучей параметров, нужно либо разместить на пульте кучу потенциометров и добавить АЦП, либо делать все настройки через меню. Как я уже говорил, настройка потенциометрами не всегда хорошая идея, но и отказываться от нее не стоит. Так что, решено было оставить в пульте четыре потенциометра, и добавить полноценное меню.

Чтобы перемешаться по меню, и менять параметры обычно используют кнопки. Влево, вправо, вверх, вниз. Но мне захотелось использовать вместо кнопок энкодер. Эту идею я подсмотрел у контроллера 3D-принтера.


Разумеется, за счет добавления меню, код пульта распух в несколько раз. Для начала я добавил всего три пункта меню: "Telemetry", "Parameters" и "Store params". В первом окне отображается до восьми разных показателей. Пока я использую только три: заряд батареи, компас и высота.

Во втором окне доступны шесть параметров: коэффициенты PID регулятора для осей X/Y,Z и корректировочные углы акселерометра.

Третий пункт позволяет сохранять параметры в EEPROM.

Джойстики

Над выбором пилотных джойстиков я долго не размышлял. Так получилось, что первый джойстик Turnigy 9XR я добыл у коллеги по квадрокоптерному делу - Александра Васильева, хозяина небезызвестного сайта alex-exe.ru . Второй такой же заказал напрямую на Hobbyking.


Первый джойстик был подпружинен в обоих координатах - для контроля рыскания и тангажа. Второй я взял такой же, чтобы затем переделать его в джойстик для управления тягой и вращением.

Питание

В старом пульте я использовал простой регулятор напряжения LM7805, который кормил связкой из 8 батареек AA. Жутко неэффективный вариант, при котором 7 вольт уходили на нагрев регулятора. 8 батареек - потому что под рукой был только такой отсек, а LM7805 - потому что в то время этот вариант мне представлялся самым простым, и главное быстрым.

Теперь же я решил поступить мудрее, и поставил достаточной эффективный регулятор на LM2596S. А вместо 8-ми AA батареек, установил отсек на два LiIon аккумулятора 18650.


Результат

Собрав все воедино, получился вот такой аппарат. Вид изнутри.


А вот с закрытой крышкой.


Не хватает колпачка на одном потенциометре и колпачков на джойстиках.

Наконец, видеоролик о том, как происходит настройка параметров через меню.


Итог

Физически пульт собран. Сейчас я занимаюсь тем, что дорабатываю код пульта и квадрокоптера, чтобы вернуть им былую крепкую дружбу.

По ходу настройки пульта, были выявлены недостатки. Во-первых, нижние углы пульта упираются в руки:(Наверное я немного перепроектирую пластины, сглажу углы. Во-вторых, даже дисплея 16х4 не хватает для красивого вывода телеметрии - приходится названия параметров сокращать до двух букв. В следующей версии девайса установлю точечный дисплей, либо сразу TFT матрицу.



Понравилась статья? Поделитесь ей