Телефонуйте » (+38) 096 227 41 41

Навчимося звідусіль отримувати доступ до зображення з веб-камери свого Raspberry Pi, розміщуючи його на сайті. Це дозволить підключатися до RPi з унікальним доменним ім'ям і спостерігати за своїм будинком або домашніми тваринами, коли знаходимося далеко.

Що необхідно для заняття

1. Локальна мережа
2. Mac або ПК
3. Модуль камери RPi, або сумісна веб-камера
4. RPi з запущеною ОС Raspbian "Jessie"
5. Доменне Ім'я
6. Маршрутизатор, здатний підтримувати DynDNS, noip чи іншу динамічну службу DNS; або програмне забезпечення на основі динамічного DNS-клієнта
7. Веб-сервер, запущений на RPi
8. Кабель HDMI (*опція)
9. Клавіатура (*опція)
10. Миша (*опція)
11. Монітор з входом HDMI (*опція)

*Якщо RPi налаштований як машина «без голови», то не потрібні монітор, клавіатура і миша - тільки інший комп'ютер, який буде використовуватися для віддаленого доступу до RPi через SSH за допомогою мережі.

Завантаження

MJPG-Streamer

Покрокове керівництво (стиснута версія - для просунутих користувачів)

lsusb
sudo apt-get update
sudo apt-get upgrade
sudo apt-get install libjpeg8-dev imagemagick libv4l-dev
sudo ln -s /usr/include/linux/videodev2.h /usr/include/linux/videodev.h
sudo apt-get install subversion
cd ~
svn co https://svn.code.sf.net/p/mjpg-streamer/code/mjpg-streamer/ mjpg-streamer
cd mjpg-streamer
make mjpg_streamer input_file.so input_uvc.so output_http.so
sudo cp mjpg_streamer /usr/local/bin
sudo cp output_http.so input_file.so input_uvc.so /usr/local/lib/
sudo cp -R www /usr/local/www
sudo nano ~/.bashrc
     export LD_LIBRARY_PATH=/usr/local/lib/
source ~/.bashrc
/usr/local/bin/mjpg_streamer -i "input_file.so -f /tmp/stream -n pic.jpg"-o "output_http.so -w /usr/local/www"
sudo nano /usr/sbin/livestream.sh
     #!/bin/bash
     /usr/local/bin/mjpg_streamer -i "/usr/local/lib/input_uvc.so" -o "/usr/local/lib/output_http.so -w /var/www/html/stream -c username:password"
sudo chmod 755 /etc/init.d/livestream.sh
sudo update-rc.d livestream.sh defaults

Короткий план

1. Оновити RPi і встановити програмне забезпечення залежностей
2. Завантажити вихідний код MJPG-Streamer
3. Компілювати вихідний код
4. Захопити зображення з веб-камери і розмістити його на веб-сторінці
5. Налаштувати MJPG- Streamer для запуску при завантаженні

Два способи: модуль камери або USB веб-камера

Можемо використовувати модуль камери RPi, або будь-який іншу сумісну USB веб-камеру. Метод з веб-камерою USB простіший і є можливість вибору якісної камери, але наведемо інструкції для обох методів. У керівництві, буде використана веб-камера USB. Інструкції щодо модуля камери RPi знайдете у додатку.

Покрокове керівництво (детальна інструкція)

Перевірка, чи визначає RPi вебкамеру

Підключіть USB веб-камеру і виконайте команду:

lsusb

Знайдіть запис, що відноситься до вашої веб-камери. Це буде хорошою ознакою того, що камера розпізнана.

Оновлення RPi і встановлення залежностей

По-перше, оновіть RPi, а потім встановіть деякі з залежності MJPG-Streamer:

sudo apt-get update
sudo apt-get upgrade
sudo apt-get install libjpeg8-dev imagemagick libv4l-dev

Треба зробити налаштування: файл videodev.h замінити на videodev2.h, але ця заміна має бути зроблена вручну. Щоб зробити її, просто створіть символічне посилання:

sudo ln -s /usr/include/linux/videodev2.h /usr/include/linux/videodev.h

Завантаженя та компіляція MJPG-Streamer

На жаль, MJPG-Streamer не доступний через apt-get, таким чином, ми повинні cкомпілювати його з вихідного коду. Це трохи складніше, ніж налаштування веб-камери з використанням Motion, але MJPG-Streamer менш ресурсоємний, тому додаткова складність встановлення варта того.
Є кілька різних способів установки MJPG-Streamer. Найпростіший - з допомогою subversion, про що розповідається тут. Якщо хочете дізнатися про деякі інші методи, то перегляньте додаток внизу поста.

Завантаження за допомогою Subversion (SVN)

Встановіть subversion (якщо необхідно):

sudo apt-get install subversion

Потім завантажте копію вихідного коду MJPG-Streamer в домашню папку і перейдіть в каталог mjpg-streamer, коли завершиться завантаження:

cd ~
svn co https://svn.code.sf.net/p/mjpg-streamer/code/mjpg-streamer/ mjpg-streamer
cd mjpg-streamer

В MJPG-Streamer входить багато плагінів, але ми скомпілюємо лише три. Якщо плануєте використовувати тільки веб-камеру USB, то можете змінити команду нижче, щоб задовольнити свої потреби. Просто викиньте ті елементи, які вам не потрібні.

input_uvc.so (для USB веб-камери): копіює JPG-файли з одного входу (в даному випадку, з веб-камери) до одного або більше вихідних модулів. Це добре для потокової передачі великих зображень з більш високою частотою кадрів і при меншому завантаженні процесора.
input_file.so (для модуля камери): аналогічно описаному вище, але копіює їх з каталогу.
output_http.so: потокова передача файлів на веб-сервер

make mjpg_streamer input_file.so input_uvc.so output_http.so

Крім того, запустивши make, ви можете скомпілювати все, що прийшло з MJPG-Streamer. Тут вибране для встановлення тільки те, що було необхідно, щоб заощадити об’єм сховища і ресурси.

Копіюваня MJPG-Streamer в інше місце

Можете запустити MJPG-Streamer після компіляції прямо з папки ( ./mjpg_streamer), але було б краще перемістити його на постійне місце.
Виконайте наступні команди, щоб скопіювати MJPG-Streamer в більш глобально доступний каталог:

sudo cp mjpg_streamer /usr/local/bin
sudo cp output_http.so input_file.so input_uvc.so /usr/local/lib/
sudo cp -R www /usr/local/www

/usr/local/ є загальним місцем для сторонніх предметів або речей, доданих в систему адміністратором. Але ви могли б скопіювати його туди, куди вам подобається, або просто залишити там, де він є. Після цього в покроковому керівництві треба просто змінити шляхи на інші.

Експортування шляхів

Якщо зараз спробувати запустити mjpg_streamer, то, ймовірно, повернеться повідомлення про помилку при пошуку шляхів (error about search paths). Це тому, що прямо зараз система не знає, де знайти файли. Це легко виправити. Просто додайте наступний рядок в ~/.bashrc (якщо ви викликали команди вище, щоб скопіювати файли в /usr/local/). Буде зроблена постійна його заміна, так що не треба буде робити це щоразу, коли входите:

     export LD_LIBRARY_PATH=/usr/local/lib/

Можете вийти і зайти знову, але простіше виконати команду source, щоб застосувати зміни (це має той же ефект, що і перезавантаження):

source ~/.bashrc

Тепер, можете просто викликати mjpg_streamer, незалежно від того, в якій директорії знаходитесь. Ми майже готові розпочати зйомки.

Використання input_uvc.so для захоплення зображень

Запустіть mjpg_streamer за допомогою команди:

/usr/local/bin/mjpg_streamer -i "/usr/local/lib/input_uvc.so" -o "/usr/local/lib/output_http.so -w /usr/local/www"

Ця команда має такі параметри:

-i: використовує input_uvc.so (USB веб-камера) як вхід
-o: output_http.so для виходу (відправка зображення на веб-сервер)
-w: каталог, який має HTML, CSS, JS і файли: /usr/local/www

Ви можете скасувати потік, натиснувши Ctrl + C. Якщо хочете поекспериментувати з деякими іншими параметрами, то деякі з них перераховані нижче:

-b: запуск у фоновому режимі
-p: встановити інший порт за замовчуванням, а не порт 8080 за замовчуванням
-c: запитує ім'я користувача:пароль
-у YUYV: дозволяє формат YUYV й відключає режим MJPEG
-f: частота кадрів (у секундах)

Якщо використали параметр -b, то будете отримувати підказку на екрані. Отже, як зупинити запущений потік? Після команди запуску, ви побачите рядок, типу:

forked to background (4979)

Якщо хочете зупинити потік, просто запустіть:

kill 4979

що просто вбиває процес ID (PID) MJPG-Streamer.

Перегляд потокового відео з веб-камери через браузер (при підключенні до локальної мережі)

Навіть, якщо вже маєте веб-сервер, то можете, як і раніше, працювати з ним без проблем, тому що потік доступний на іншому порту (за замовчуванням): 8080. Тому, коли заходите на нього з браузера, просто додайте :8080 після IP-адреси:

• локально: http://localhost:8080
• з іншого пристрою в мережі: http://<ip_адреса_raspberry_pi>:8080

Доступ до RPi через Інтернет

Перегляд зображення з веб-камери при підключенні до локальної мережі - це здорово, але покажемо, як отримати доступ до веб-камери з будь-якого місця, ввівши URL типу: myDomain.com:8080. Цей потік може бути захищений паролем, але це насправді не дуже безпечно, тому будьте обережні, якщо зробите веб-камеру доступною онлайн.

Попередні умови

• Перенаправлення порта 8080 на ваш RPi
• Включення служби динамічного DNS на маршрутизаторі
• (опціонально) Налаштування веб-сервера з каталогом, захищеним паролем

Після того, як описане вище завершено, зможемо отримати доступ до відео потоку зі своєї веб-камери з будь-якого браузера, перейшовши на http://myDomainName.org:8080. Але ще немає пароля! Будь-хто в Інтернеті зможе побачити вашу веб-камеру.
Ми можемо задати, щоб MJPG-Streamer використовував пароль, за допомогою параметра -c. Даний пароль не надто безпечний (це тільки кодування base 64), але він може бути першою лінією оборони. Дехто зможе легко перехопити і розшифрувати пароль, але якщо ви знаходитесь в довіреній мережі, то це не така вже й проблема.
Команда буде виглядати наступним чином:

/usr/local/bin/mjpg_streamer -i "/usr/local/lib/input_uvc.so" -o "/usr/local/lib/output_http.so -w /usr/local/www -c username:password"

Кращий спосіб добитися безпеки будь-якого інтернет-ресурсу - використання моделі пошарової оборони. Тому, перш ніж захочете винести це в Інтернет, можете захиститися за допомогою інших інструментів.

Вбудовування відеопотоку на веб-сторінку

Для простоти, зробимо сторінку в тому ж каталозі, в якій знаходяться HTML-файли (/usr/local/www/ для цього заняття). Це полегшує перевірку, що сторінка працює. Після того, як переконаєтесь, що все працює, сторінку можна перемістити будь-куди, але треба буде просто налаштувати шляхи. Введіть наступний HTML-код, створивши файл mycam.html, і сторінка буде готова до роботи:

<html>
   <head><title>My Live-stream</title></head>
   <body>
     <center><h1>My Camera</h1></center>
      <center>
     <img src="/?action=stream" />
      </center>
<body>
</html>

Тепер, перейдіть на сторінку, щоб побачити її:

http://192.168.1.100:8080/mycam.html (в локальній мережі)
http://myDomainName.org:8080/mycam.html (через Інтернет

де 192.168.1.100 треба замінити на ІР-адресу RPi.

Запуск MJPG-Streamer як демона (фонову службу)

Дотепер ми запускали MJPG-Streamer у міру потреби, запускаючи команду з нашими параметрами. Якщо хочете зробити це більш постійним і запускати відео потік при завантаженні RPi, то повинні задати, щоб це виконувалось.
Нижче є два сценарії: дуже простий, який виконує команди, і просунутий сценарій, який дозволить вам використовувати команду служби, щоб контролювати його:

sudo service livestream.sh start
sudo service livestream.sh stop
sudo service livestream.sh restart

Простий сценарій

Дуже простий сценарій нижче:

sudo nano /etc/init.d/livestream.sh
#!/bin/bash
/usr/local/bin/mjpg_streamer -i "/usr/local/lib/input_uvc.so" -o "/usr/local/lib/output_http.so -w /usr/local/www -c username:password"

Збережіть сценарій. Зробіть його виконуваним:

sudo chmod 755 /usr/sbin/livestream.sh

Наступна команда зробить, щоб він виконувався під час завантаження:

sudo update-rc.d livestream.sh defaults

Розширений сценарій

Нижче наводиться сценарій, який буде завантажувати MJPG-Streamer при запуску RPi і дозволить використовувати команду служби:

#!/bin/sh
# /etc/init.d/livestream.sh
### BEGIN INIT INFO
# Provides:          livestream.sh
# Required-Start:    $network
# Required-Stop:     $network
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: mjpg_streamer for webcam
# Description:      Streams /dev/video0 to http://IP/?action=stream
### END INIT INFO
f_message(){
        echo "[+] $1"
}
 
# Carry out specific functions when asked to by the system
case "$1" in
        start)
                f_message "Starting mjpg_streamer"
                /usr/local/bin/mjpg_streamer -b -i "/usr/local/lib/input_uvc.so" -o "/usr/local/lib/output_http.so -w /usr/local/www -c username:password"
                sleep 2
                f_message "mjpg_streamer started"
                ;;
        stop)
                f_message "Stopping mjpg_streamer…"
                killall mjpg_streamer
                f_message "mjpg_streamer stopped"
                ;;
        restart)
                f_message "Restarting daemon: mjpg_streamer"
                killall mjpg_streamer
                /usr/local/bin/mjpg_streamer -b -i "/usr/local/lib/input_uvc.so" -o "/usr/local/lib/output_http.so -w /usr/local/www -c username:password"
                sleep 2
                f_message "Restarted daemon: mjpg_streamer"
                ;;
        status)
                pid=`ps -A | grep mjpg_streamer | grep -v "grep" | grep -v mjpg_streamer. | awk ‘{print $1}’ | head -n 1`
                if [ -n "$pid" ];
                then
                        f_message "mjpg_streamer is running with pid ${pid}"
                        f_message "mjpg_streamer was started with the following command line"
                        cat /proc/${pid}/cmdline ; echo ""
                else
                        f_message "Could not find mjpg_streamer running"
                fi
                ;;
        *)
                f_message "Usage: $0 {start|stop|status|restart}"
                exit 1
                ;;
esac
exit 0

Після збереження, виконайте ті ж команди, що й вище:

sudo chmod 755 /etc/init.d/livestream.sh
sudo update-rc.d livestream.sh defaults

Успіх!

Тепер ваша веб-камера доступна через Інтернет і запускається при включенні RPi.

Додаток

Завантаження MJPG-Streamer за допомогою curl або wget

wget http://sourceforge.net/code-snapshots/svn/m/mj/mjpg-streamer/code/mjpg-streamer-code-182.zip
unzip mjpg-streamer-code-182.zip

Закінчити роботу запущених команди можна з розділу subversion.

Завантаження MJPG-Streamer за допомогою scp

Завантажте MJPG-Streamer на іншому пристрої, а потім використайте SCP, щоб скопіювати його на RPi.

scp ~/Downloads/ This email address is being protected from spambots. You need JavaScript enabled to view it.:~/

де 192.168.1.100 замыныть на ІР-адресу RPi.

Закінчити роботу запущених команд можна з розділу subversion.

Використання input_file.so для захоплення зображень

Для цього методу, необхідно встановити камеру, щоб почати запис зображення, використовуючи команду raspistill. Ви також буде потрібна папка для зберігання файлів; для прикладу, просто зробимо її в /tmp:

mkdir /tmp/stream

Потім увімкніть камеру з командою, аналогічною наступній:

raspistill --nopreview -w 640 -h 480 -q 5 -o /tmp/stream/pic.jpg -tl 100 -t 9999999 -th 0:0:0 &

Параметри команди пояснені нижче, тому змініть їх, як вважаєте за потрібне:

--nopreview: Не відображати вікно попереднього перегляду
-w і -h: ширина і висота зображення (в пікселях)
-q: якість <1-100>
-o: записати у файл (з ім'ям pic.jpg)
-tl: час (у мс) затримки, перш ніж буде зроблений знімок і вимкнеться і прив'яже останнє повне зображення до файлу
-t: час (9999999ms)
-th: встановити параметри мініатюри (x:y:quality)
&: посилає завдання у фоновому режимі (не входить в raspistill)

Після того, як зображення почали захоплюватися камерою, вводимо:

/usr/local/bin/mjpg_streamer -i "input_file.so -f /tmp/stream -n pic.jpg" -o "output_http.so -w /usr/local/www"

Тепер зможемо переглядати відеопотік камери RPi з будь-якого браузера - лише не забудьте крім адреси EPi вказати порт 8080. Приємного перегляду :)

(За матеріалами: jacobsalmela.com)

Попереднє заняття - Наступне заняття

Новини

  • SDR в IoT

    iotSDR пропонує платформу розробок для IoT-радіо та мережевих доменів. На платі два передавачі Microchip AT86RF215, для вводу-виводу модему на Xilinx ZYNQ SoC, приймач GNSS MAX2769 для GPS, Galileo, BieDou та Glonass. Плата сумісна з ПЗ GNURadio SDR. Дозволяє розробити протоколи фізичного рівня LoRa, SigFox, WightLess, Bluetooth, BLE, 802.15.4, ZigBee тощо для IoT, або шлюз IoT через TheThingsNetwork, LPWAN або Google Thread. Пам'ять EEPROM: 1x AT24MAC602 , flash-пам'ять: 1x QSPI 128 Мб, RAM: 256 MБ DDR3,слот для Micro SD карти, входи/виходи: 2x 8-бітних інтерфейси PL, інтерфейс 8-бітного PS, Gigabit Ethernet, USB 2.0 (USB3310), USB 2.0 (CP2104), 2x SMA RF-роз'єми для приймача діапазонів IoT, 2x SMA RF-роз'єми для приймача 2,4 ГГц , RF-роз'єм приймач GNSS, FPGA-роз'єм JTAG для програмування. Розміри плати: 76,2 мм x 101,6 мм.

     

    in Новини

Записатися на курс