Кремень КД Реклама
Кремень КМ Реклама

Диетический апельсиновый осьминог и USB камера - автомобильный видеорегистратор

Mef78
Идет загрузка
Загрузка
11.06.2017
12376
33
Техничка

Подпишитесь на автора

Подпишитесь на автора, если вам нравятся его публикации. Тогда вы будете получать уведомления о его новых статьях.

Отписаться от уведомлений вы всегда сможете в профиле автора.

25
Продолжение статьи Апельсиновый диетический осьминог. Octoprint. В комментариях к статье просили рассказать как привязать USB камеру к серверу печати.

Своей USB вебкамеры у меня никогда не было. Не нужная мне игрушка. Однако, с моей и с машины супруги в хозяйстве завалялась пара старых автомобильных видеорегистраторов. Регистратор с машины супруги Lexand погиб из-за раздувшейся батарейки, выгнуло плату и где-то что-то отвалилось (об этом я узнал уже после замены батарейки, регистратор стал виснуть), второй с моей прошлой машины - Highscreen, с машиной продал кабель питания, а кабель был хитрый, только с ним регистратор вставал автоматически на запись. Тоже не сразу понял почему регистратор на запись не встает, поменял батарейку, но бесполезно.
Диетический апельсиновый осьминог и USB камера - автомобильный видеорегистратор
Диетический апельсиновый осьминог и USB камера - автомобильный видеорегистратор
Супруге и мне купили новые регистраторы, эти давно валялись дома.

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

Многие авто видео регистраторы умеют работать кард ридером и веб камерой. Решил воспользоваться данной возможностью и попробовать прикрутить камеру к апельсинке. Из двух регистраторов только Lexand захотел стать вебкой. Highscreen упорно прикидывался card reader-ом.

Единственный USB порт на Orange Pi Zero занят принтером, зато на плате есть 13pin гребенка под плату расширения, на которой есть выходы двух

USB. Решил ей и воспользоваться.

Вот распайка гребенки.

1x13 Header

1 5V

2 GND

3 USB-DM2

4 USB-DP2

5 USB-DM3

6 USB-DP3

7 LINEOUTR

8 LINEOUTL

9 TV-OUT

10 MIC-BIAS

11 MIC1P

12 MIC1N

13 CIR-RX

Первый вывод рядом с разъемом ethernet.

Обрезал usb кабель, к кабелю припаял разъемчик маму.
Диетический апельсиновый осьминог и USB камера - автомобильный видеорегистратор
Диетический апельсиновый осьминог и USB камера - автомобильный видеорегистратор
Диетический апельсиновый осьминог и USB камера - автомобильный видеорегистратор
Красный плюс, черный минус, белый и зеленый с данными. Их запаял как получится, с первого раза угадал. Вариантов то все равно 2, и регистратор или будет, или не будет работать.

Ставить поддержку камеры решил на DietPi и Orange Pi с 512Мб памяти. На этой моей апельсинке радиатор побольше.

Начинаем установку.

Как обычно через Putty заходим на апельсинку, под пользователем octoprint.

Инструкцию взял на официальной страничке октопринта.

sudo apt-get update && apt-get upgrade

cd ~

sudo apt-get install subversion libjpeg8-dev imagemagick libav-tools libv4l-dev cmake


При попытке установить получаем сообщение

Package libjpeg8-dev is not available, but is referred to by another package.

This may mean that the package is missing, has been obsoleted, or

is only available from another source

However the following packages replace it:

libjpeg62-turbo-dev

Пробуем еще раз

sudo apt-get install subversion libjpeg62-turbo-dev imagemagick libav-tools libv4l-dev cmake

Ждем долго, около 10 минут.

git clone https://github.com/jacksonliam/mjpg-streamer.git

cd mjpg-streamer/mjpg-streamer-experimental

export LD_LIBRARY_PATH=.

make


За пару минут все скомпилировалось.

Для пробы запускаем

sudo ./mjpg_streamer -i './input_uvc.so' -o './output_http.so'

Фантастика, запустилось.

Заходим по адресу

http://IP адрес апельсинки/?action=stream
Диетический апельсиновый осьминог и USB камера - автомобильный видеорегистратор
Но изображение какое-то всё глючное, с непонятными артефактами, но оно есть. Хорошее начало!

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

В итоге после экспериментов камера нормально запустилась в HD режиме -r HD

sudo ./mjpg_streamer -i './input_uvc.so -r HD -f 5' -o './output_http.so'

Эксперименты с FPS дали приемлемое значение -f 10

sudo ./mjpg_streamer -i './input_uvc.so -r HD -f 10' -o './output_http.so'

Не смотрите не перевернутую картинку, мне регистратор так было удобнее поставить.
Диетический апельсиновый осьминог и USB камера - автомобильный видеорегистратор
Для того чтоб пользователь octoprint имел доступ к видеокамере, его надо включить в группу Video

sudo usermod -a -G video octoprint

После этого надо выйти из системы и заново войти под пользователем octoprint

Проверяем

cd mjpg-streamer/mjpg-streamer-experimental

./mjpg_streamer -i './input_uvc.so -r HD -f 10' -o './output_http.so'


Теперь работает без sudo, отлично.

Пол дела сделано.

В качестве варианта запуска на официальной страничке октопринта предложено запускать с ключиком -w ./www

./mjpg_streamer -i './input_uvc.so -r HD -f 10' -o './output_http.so -w ./www'

Проверил, запускается. И ладно.

Для того чтоб иметь возможность запускать видео прямо из октопринта, создадим несколько скриптов. Честно скопипастил их из официального мануала

cd ~

cd OctoPrint/scripts

nano webcam


Внутри скрипта пишем (копипастим внутрь)

#!/bin/bash

# Start / stop streamer daemon

case '$1' in

start)

/home/octoprint/OctoPrint/scripts/webcamDaemon >/dev/null 2>&1 &

echo '$0: started'

;;

stop)

pkill -x webcamDaemon

pkill -x mjpg_streamer

echo '$0: stopped'

;;

*)

echo 'Usage: $0 {start|stop}' >&2

;;

esac

Сохраняем готовый скрипт по CTRL+O

Выходим из nano по CTRL+X

nano webcamDaemon

Внутри скрипта пишем (копипастим внутрь)

#!/bin/bash

MJPGSTREAMER_HOME=/home/octoprint/mjpg-streamer/mjpg-streamer-experimental

MJPGSTREAMER_INPUT_USB='input_uvc.so'

MJPGSTREAMER_INPUT_RASPICAM='input_raspicam.so'

# init configuration

camera='auto'

camera_usb_options='-r HD -f 10'

camera_raspi_options='-fps 10'

if [ -e '/boot/octopi.txt' ]; then

source '/boot/octopi.txt'

fi

# runs MJPG Streamer, using the provided input plugin + configuration

function runMjpgStreamer {

input=$1

pushd $MJPGSTREAMER_HOME

echo Running ./mjpg_streamer -o 'output_http.so -w ./www' -i '$input'

LD_LIBRARY_PATH=. ./mjpg_streamer -o 'output_http.so -w ./www' -i '$input'

popd

}

# starts up the RasPiCam

function startRaspi {

logger 'Starting Raspberry Pi camera'

runMjpgStreamer '$MJPGSTREAMER_INPUT_RASPICAM $camera_raspi_options'

}

# starts up the USB webcam

function startUsb {

logger 'Starting USB webcam'

runMjpgStreamer '$MJPGSTREAMER_INPUT_USB $camera_usb_options'

}

# we need this to prevent the later calls to vcgencmd from blocking

# I have no idea why, but that's how it is...

vcgencmd version

# echo configuration

echo camera: $camera

echo usb options: $camera_usb_options

echo raspi options: $camera_raspi_options

# keep mjpg streamer running if some camera is attached

while true; do

if [ -e '/dev/video0' ] && { [ '$camera' = 'auto' ] || [ '$camera' = 'usb' ] ; }; then

startUsb

elif [ '`vcgencmd get_camera`' = 'supported=1 detected=1' ] && { [ '$camera' = 'auto' ] || [ '$camera' = 'raspi' ] ; }; then

startRaspi

fi

sleep 120

done

Сохраняем готовый скрипт по CTRL+O

Выходим из nano по CTRL+X

chmod +x /home/octoprint/OctoPrint/scripts/webcam

chmod +x /home/octoprint/OctoPrint/scripts/webcamDaemon


Далее

cd ~

cd .octoprint

nano config.yaml


Конфиг практически дефолтный

accessControl:

salt: y0pnvQf2Xdv3wKIm1Hu7onQJUwibqXNe

api:

key: 2BE34DF7924C400C95A71825CBE806F5

plugins:

announcements:

_config_version: 1

channels:

_blog:

read_until: 1495612800

_important:

read_until: 1478614200

_octopi:

read_until: 1490979600

_plugins:

read_until: 1495238400

_releases:

read_until: 1496325600

discovery:

upnpUuid: 084b7f82-8a71-4a98-a80f-abb4a2b5170a

softwareupdate:

_config_version: 5

check_providers:

navbartemp: navbartemp

printerProfiles:

default: _default

serial:

autoconnect: true

baudrate: 250000

port: /dev/ttyUSB0

server:

firstRun: false

secretKey: P3ZKW0v4hEcIUF6wr8LFnXYFHuz5C30L

seenWizards:

corewizard: null

cura: null

softwareupdate: null

К концу конфига дописываем копипастом

system:

actions:

- action: streamon

command: /home/octoprint/OctoPrint/scripts/daemon start

confirm: false

name: Start video stream

- action: streamoff

command: /home/octoprint/OctoPrint/scripts/daemon stop

confirm: false

name: Stop video stream

Сохраняем конфиг по CTRL+O

Выходим из nano по CTRL+X

Перезапускаем OctoPrint

sudo service octoprint restart

После перезапуска в верхней части октопринта появится меню system, в котором будет 2 пункта

Start video stream

Stop video stream
Диетический апельсиновый осьминог и USB камера - автомобильный видеорегистратор
Стандартные скрипты рабочие 100%, но написаны под универсальный вариант, в том числе и под камеру распберри пи.

Я слегка оптимизировал скрипт, все лишнее убрал, и вместо 2х скриптов сделал всего 1.

cd ~

cd OctoPrint/scripts

nano streamer


Внутри скрипта пишем (копипастим внутрь)

#!/bin/bash

# Start / stop streamer

MJPGSTREAMER_HOME=/home/octoprint/mjpg-streamer/mjpg-streamer-experimental

MJPGSTREAMER_INPUT_USB='input_uvc.so'

# init configuration

camera_usb_options='-r HD -f 10'

# runs MJPG Streamer, using the provided input plugin + configuration

function runMjpgStreamer {

input=$1

pushd $MJPGSTREAMER_HOME

echo Running ./mjpg_streamer -o 'output_http.so -w ./www' -i '$input'

LD_LIBRARY_PATH=. ./mjpg_streamer -o 'output_http.so -w ./www' -i '$input'

# LD_LIBRARY_PATH=. ./mjpg_streamer -o 'output_http.sow' -i '$input'

popd

}

# starts up the USB webcam

function startUsb {

logger 'Starting USB webcam'

runMjpgStreamer '$MJPGSTREAMER_INPUT_USB $camera_usb_options'

}

case '$1' in

start)

startUsb >/dev/null 2>&1 &

echo '$0: started'

;;

stop)

pkill -x mjpg_streamer

echo '$0: stopped'

;;

*)

echo 'Usage: $0 {start|stop}' >&2

;;

esac

Сохраняем конфиг по CTRL+O

Выходим из nano по CTRL+X

chmod +x /home/octoprint/OctoPrint/scripts/streamer

cd ~

cd .octoprint

nano config.yaml


К концу конфига дописываем копипастом

system:

actions:

- action: streamon

command: /home/octoprint/OctoPrint/scripts/streamer start

confirm: false

name: Start video stream

- action: streamoff

command: /home/octoprint/OctoPrint/scripts/streamer stop

confirm: false

name: Stop video stream

Сохраняем конфиг по CTRL+O

Выходим из nano по CTRL+X

Перезапускаем OctoPrint

sudo service octoprint restart

Все точно так же работает.

Теперь заходим на октопринт и в плагинах настраиваем адрес откуда будет браться потоковое видео
Диетический апельсиновый осьминог и USB камера - автомобильный видеорегистратор
В Stream URL прописываем

http://ip_адрес_апельсина:8080/?action=stream

У меня это

http://192.168.0.2:8080/?action=stream

Для того чтоб проверить работоспособность, предварительно стартуем stream через меню system

После этого можно нажать на кнопку test и посмотреть видео
Диетический апельсиновый осьминог и USB камера - автомобильный видеорегистратор
Камера у меня перевернута вверх ногами.

Для таких деятелей как я в настройке плагина есть галка Flip webcam vertically
Диетический апельсиновый осьминог и USB камера - автомобильный видеорегистратор
Не забываем сохранять настройки плагина при выходе.

Теперь при входе во вкладку Control

можно наблюдать что делает принтер.
Диетический апельсиновый осьминог и USB камера - автомобильный видеорегистратор
Для чего я прикрутил регистратор веб камеру ? Было интересно прикрутить и попробовать. В конце концов опыт.

Буду ли я ей пользоваться - навряд ли.

А вот теперь немного фото того как это выглядит
Диетический апельсиновый осьминог и USB камера - автомобильный видеорегистратор
Диетический апельсиновый осьминог и USB камера - автомобильный видеорегистратор
Диетический апельсиновый осьминог и USB камера - автомобильный видеорегистратор
Диетический апельсиновый осьминог и USB камера - автомобильный видеорегистратор
Из заметных минусов: с включенной камерой апельсин стал сильнее греться. На время испытаний к нему притулил вентилятор. Если использовать постоянно - неплохо бы подумать над активным охлаждением.

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

В остальном я неплохо провел день, пока на улице стоит ужасная погода.

Подпишитесь на автора

Подпишитесь на автора, если вам нравятся его публикации. Тогда вы будете получать уведомления о его новых статьях.

Отписаться от уведомлений вы всегда сможете в профиле автора.

25
Комментарии к статье