Кремень FMZ Реклама
Kremen FMHM Реклама

Апельсиновый осьминог: обычная вебкамера

eta4ever
Идет загрузка
Загрузка
24.01.2016
38894
152
RepRap

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

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

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

36
Апельсиновый осьминог: обычная вебкамера
Малость устарело, наиболее актуальное из моего — https://3dtoday.ru/blogs/eta4ever/orange-octopus-the-season-autumn-2018/. Config.yaml ручками не надо ломать.

Хочу сказать, что штатная CSI-камера 'апельсинки' меня несколько разочаровала. Поэтому в дальнем ящике шкафа был откопан пакетик, в котором содержались кишочки старой китайской вебкамеры. Судя по их состоянию, камера подвергалась переделке в 'микроскоп' (переворот объектива и приклеивание его какой-то липкой мерзостью). Восстановив статус кво, я быстренько ее настроил, благо, все работает почти как в 'малинке'. Естественно, об этом сразу захотелось написать, но просто настройка камеры - это слишком скромно. А тут мне подсказали хорошую идею для реализации - надо, чтобы камера включалась и выключалась средствами OctoPrint - ну, чтобы не греть зря 'малинку-апельсинку'.

Поэтому сегодняшняя пошаговая инструкция будет из двух частей - как 'поднять' USB-вебкамеру в Debian и как сделать в OctoPrint два пункта меню для управления ею. Описывать процесс я буду на примере Orange Pi, но инструкция применима и к Raspberry практически без изменений (имя пользователя разве что будет другое).

Настройка USB вебкамеры

Исходная позиция - Orange Pi PC с установленным минимальным Debian (сборка от loboris) и развернутым принт-сервером OctoPrint. Далее производим установку необходимого ПО для работы с камерой, почти по инструкции (раздел Webcam), но с некоторыми изменениями.

cd ~

sudo apt-get install subversion libjpeg62-turbo-dev cmake


Устанавливаем необходимые компоненты для сборки mjpg-streamer.

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

cd mjpg-streamer/mjpg-streamer-experimental


Скачиваем актуальный исходный код для mjpg-streamer.

nano Makefile

Ищем 'PLUGINS += input_raspicam.so', закомментируем эту строку ('#PLUGINS += input_raspicam.so';). Не надо нам штатной 'малиновой камеры'. Ctrl+O, Enter, Ctrl+X.

export LD_LIBRARY_PATH=.

make


Компилируем. Камеру пока не подключаем!

ls /dev/video*

Смотрим, что у нас с устройствами. По идее, вывод должен быть пустым. У меня уже было устройство /dev/video0, поскольку подключены модули ядра для штатной камеры. Но дальше я предполагаю, что их нет. Подключаем камеру, повторяем команду. Если появилось /dev/video0, то все должно быть хорошо, идем дальше. Если не появилось, тогда ой. Возможно, камера не поддерживается, или произошел еще какой-то забавный глюк, пишем об этом в комментариях вместе с моделью камеры и выводом lsusb.

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

Пробуем запустить захват видео с минимальными настройками. Если получаем 'Unable to set format: 1196444237 res: 640x480 Init v4L2 failed !! exit fatal i: init_VideoIn failed', то пробуем sudo ./mjpg_streamer -i './input_uvc.so -y' -o './output_http.so'. В итоге получаем много буковок, главный признак того, что поток пошел - у нас нет приглашения командной строки (orangepi@OrangePI:~$), а просто мигающий курсор в последней строке.

Заходим браузером по адресу http://(адрес 'апельсинки';):8080/?action=stream. Там должна быть картинка с камеры. Если все работает, можно настроить автозапуск mjpg-streamer, но мы этого делать не будем.

Включаем-выключаем

Для начала, некоторые подготовительные действия. Если запущен mjpg-streamer, прибиваем его (Ctrl+C).

sudo usermod -a -G video orangepi

Чтобы разрешить 'обычному' пользователю доступ к устройствам video, надо добавить его в соответствующую группу. После этого закрываем сеанс (exit) и подключаемся к Orange Pi заново.

cd ~/

mjpg-streamer/mjpg-streamer-experimental


Переходим в каталог, где у нас собран mjpg-streamer.

sudo make install

Устанавливаем mjpg-streamer в систему. При этом исполняемый файл окажется в /usr/local/bin, плагины - в /usr/local/lib. После установки можно его грохнуть из домашней папки (cd ~ && rm -rf mjpg-streamer).

cd~ && nano webcam-streamer

Создаем скрипт запуска и остановки mjpg-streamer со следующим содержимым (почерпнул отсюда):

#!/bin/bash

Daemon=mjpg_streamer

DaemonBase=/usr/local

DaemonArgs='-i 'input_uvc.so -d -y' -o 'output_http.so''

case '$1' in

start)

eval LD_LIBRARY_PATH=${DaemonBase}/lib ${DaemonBase}/bin/${Daemon} ${DaemonArgs} >/dev/null 2>&1 &

echo '$0: started'

;;

stop)

pkill -x ${Daemon}

echo '$0: stopped'

;;

*)

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

;;

esac


Ctrl+O, Enter, Ctrl+X.

chmod +x webcam-streamer && mv webcam-streamer /usr/local/bin/

Делаем скрипт исполняемым и переносим его в нужное место.

nano ~/.octoprint/config.yaml

Теперь прикручиваем запуск скрипта к OctoPrint. Ищем раздел system, у меня он был пустой (с фигурными скобками {}). Если у вас он не пустой, значит, вы там что-то уже настраивали, не так ли? В итоге как-то так:

system:

actions:

- action: streamon

command: /usr/local/bin/webcam-streamer start

confirm: false

name: Start stream

- action: streamoff

command: /usr/local/bin/webcam-streamer stop

confirm: false

name: Stop stream


Ctrl+O, Enter, Ctrl+X.

sudo /etc/init.d/octoprint restart

Перезапускаем OctoPrint. Заходим в веб-интерфейс (http://(адрес 'апельсинки';):5000), где у нас в верхней части окна появилось меню System, а в нем - два пункта - Start stream и Stop stream. Но они пока что бесполезны, надо еще прописать в настройках (Settings - Webcam - Stream URL) путь к потоку (http://(адрес 'апельсинки';):8080/?action=stream).
Апельсиновый осьминог: обычная вебкамера
А вот теперь все должно работать. Нажимаем System - Start stream, перезагружаем страницу, на вкладке Control должна появиться картинка с камеры. Ну и, соответственно, по Stop stream mjpg-streamer отключается. На этом, пожалуй, все. Вопросы, замечания, предложения приветствуются.

P.S. На Raspberry Pi это все должно работать, но есть одно 'но'. Если у вас дистрибутив OctoPi (сборка с предустановленным OctoPrint), то для управления веб-камерой там используется дополнительный демон, который будет упорно эту камеру включать, если она выключена. С ним придется сражаться.

P.P.S. Запущенный mjpg-streamer у меня 'кушает' 30-70% одного (из четырех) ядра Orange Pi PC.

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

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

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

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