Контакти

Передаємо потокове відео із вебкамери, підключеної до Raspberry Pi. Підключаємо камеру до Raspberry Pi Raspberry pi управління ip ptz камерою

Добрий час доби!

У передноворічну ніч у мене виникла ідея спорудити певну подобу відеоспостереження. Все необхідне у мене було на руках:

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

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

  • Broadcom BCM2835 700MHz ARM1176JZFS processor with FPU and Videocore 4 GPU
  • GPU забезпечує Open GL ES 2.0, hardware-accelerated OpenVG, і 1080p30 H.264 high-profile decode
  • GPU є здатним до 1Gpixel/s, 1.5Gtexel/s або 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 Camera Connector
  • Розмір: 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 architec : 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" "./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 `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 градуса по1. розміри плати із камерою: 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, встановіть часовий пояс, відповідно до свого місця розташування, за допомогою утиліти 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 матрицю.



Сподобалася стаття? Поділіться їй