Апельсиновый осьминог: обычная вебкамера
Хочу сказать, что штатная 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.
Еще больше интересных статей
Самоустанавливающаяся печатающая головка
Подпишитесь на автора
Подпишитесь на автора, если вам нравятся его публикации. Тогда вы будете получать уведомления о его новых статьях.
Отписаться от уведомлений вы всегда сможете в профиле автора.
Плавающая гайка
Подпишитесь на автора
Подпишитесь на автора, если вам нравятся его публикации. Тогда вы будете получать уведомления о его новых статьях.
Отписаться от уведомлений вы всегда сможете в профиле автора.
Печать 4-мя сменными соплами в массы! Часть 1.
Подпишитесь на автора
Подпишитесь на автора, если вам нравятся его публикации. Тогда вы будете получать уведомления о его новых статьях.
Отписаться от уведомлений вы всегда сможете в профиле автора.
Работа над реализацией печа...
Комментарии и вопросы
Может, сингх? Или ситх? :)
А не осталось случаем конфига....
И вас с наступающим!
Ребят подскажите может есть у...
Здравствуйте.Помогите найти оф...
Добрый день, я новичок. Взял д...
Коллеги! Столкнулся я давеча в...