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