Сегодня 3 мая, пятница ГлавнаяНовостиО проектеЛичный кабинетПомощьКонтакты Сделать стартовойКарта сайтаНаписать администрации
Поиск по сайту
 
Ваше мнение
Какой рейтинг вас больше интересует?
 
 
 
 
 
Проголосовало: 7272
Кнопка
BlogRider.ru - Каталог блогов Рунета
получить код
3D-принтеры сегодня!
3D-принтеры сегодня!
Голосов: 1
Адрес блога: http://3dtoday.ru
Добавлен: 2014-04-22 17:41:45
 

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

2017-06-11 19:23:50 (читать в оригинале)

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

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


Супруге и мне купили новые регистраторы, эти давно валялись дома.
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 кабель, к кабелю припаял разъемчик маму.
6ad12e2cfaed31b7d86286c8717c040c.jpg5fcd89d4d6361f10e901ead18b6a3af5.jpg936649e699dbbd2faabc506933125e9e.jpg
Красный плюс, черный минус, белый и зеленый с данными. Их запаял как получится, с первого раза угадал. Вариантов то все равно 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
cc1c448e2db9ef219d6974190a74e1ee.jpg

Но изображение какое-то всё глючное, с непонятными артефактами, но оно есть. Хорошее начало!
Попробовал поэкспериментировать с ключами. mjpg_streamer выдает подсказку если где-то ошибиться в ключе.
6554d6e41c3ee94da050b7f76eed65bd.jpg

Интересуют нас ключи -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"
Не смотрите не перевернутую картинку, мне регистратор так было удобнее поставить.
b6939fafa1c3dfb61a445999dabd142a.jpg

Для того чтоб пользователь 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
b658e134ef946755402e0567b27d31e4.jpg


Стандартные скрипты рабочие 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

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

В Stream URL прописываем
http://ip_адрес_апельсина:8080/?action=stream
У меня это
http://192.168.0.2:8080/?action=stream
Для того чтоб проверить работоспособность, предварительно стартуем stream через меню system
После этого можно нажать на кнопку test и посмотреть видео

7c7cd6ce130730d17bd9dee763fdcafe.jpg

Камера у меня перевернута вверх ногами.
Для таких деятелей как я в настройке плагина есть галка Flip webcam vertically
756d505be557e35613c991293be5373e.jpg

Не забываем сохранять настройки плагина при выходе.
Теперь при входе во вкладку Control
можно наблюдать что делает принтер.5878306fa9b198937ded98fef61c2d7b.jpg

Для чего я прикрутил регистратор веб камеру ? Было интересно прикрутить и попробовать. В конце концов опыт.
Буду ли я ей пользоваться - навряд ли.
А вот теперь немного фото того как это выглядит99928a01a2dc7d021ccbe03d2b2550c6.jpg673bb2e4b983ba438a1b8db7ecfc1c84.jpg540c211e794fff72461d1c147a8ba3f7.jpgd5652383a76fbba67a308defa1c542cb.jpg

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

Тэги: техничка

 


Самый-самый блог
Блогер Рыбалка
Рыбалка
по среднему баллу (5.00) в категории «Спорт»


Загрузка...Загрузка...
BlogRider.ru не имеет отношения к публикуемым в записях блогов материалам. Все записи
взяты из открытых общедоступных источников и являются собственностью их авторов.