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

Первоначально материал опубликован на 3DToday, но ввиду его DIY-направленности, считаю целесообразным перепост.

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

DSC05187

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

Настройка 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: 640×480 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 -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.

 

Ссылка на форум “обсуждение Orange Pi”

Ссылка на форум “обсуждение OctoPrint на Raspberry Pi

10

Метки: ,    2016-01-26      Раздел: Настройка, Принт-сервер  
Автор: Просмотров: 2 912   50 комментариев



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

  1. Отличная статья. По себе скажу, всё это кажется абракадаброй ровно до того момента пока сам не возьмёшься за применение %)
    Теперь несколько вопросов.
    1. Почему меню System должно быть пустым? У меня уже были пункты.
    2. Как посмотреть загрузку процессора?
    3. Покажите snapshot с этой камеры. Интересно качество картинки.
    На подходе такая же моя статья, но я её не стал называть “Демоны Raspberry Pi”, потому что всё оказалось намного проще, чем описано на путанных форумах *OK*

    0
    1. Спасибо. Я старался все расписать подробно. Если чуть-чуть понимать, как работает linux (особенно все, что из дебиана растет, те же бубунты), то вообще все просто.

      1. Если у вас он не пустой, значит, вы там что-то уже настраивали, не так ли?
      В чистом Octoprint меню System пустое.

      2. Поставьте htop (sudo apt-get install htop), им удобно смотреть загрузку.

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

      1
      1. Спасибо за ответы. Меню изначально (до моего вмешательства) было такое

        0
        1. Так, а вы сборку OctoPi используете?

          0
          1. Настроенный образ операционки с OctoPi для Raspberry Pi. Вот тут качал http://mirror.tsone.net.uk/octopi/ А вы не пробовали этот образ устанавливать на Orange Pi?
            Вот код этого меню из config.yaml, может пригодится :)
            – action: shutdown
            async: true
            command: sudo shutdown -h now
            confirm: You are about to shutdown the system.
            ignore: true
            name: Shutdown
            – action: reboot
            async: true
            command: sudo shutdown -r now
            confirm: You are about to reboot the system
            ignore: true
            name: Reboot
            – action: restart
            async: true
            command: sudo service octoprint restart
            confirm: You are about to restart OctoPrint
            ignore: true
            name: Restart OctoPrint

            У меня ещё и Cura установлена. А на вашем есть?

            0
      2. Мне кажется у меня htop неправильно показывает загрузку

        0
        1. Картинка обрезалась, непонятно ничего толком. Полностью ее можно как-нибудь глянуть?

          0
        1. Да, фигня какая-то. А просто top что кажет?

          0
          1. Да он убогий какой-то

            0
  2. О, вот спасибо за статью. Правда вебка у меня нашлась другая но по качеству не лучше :). На днях буду заниматься настройкой апельсина. А моделью напечатанного корпуса для апельсина не поделитесь?

    0
    1. Я вот здесь собираю все материалы по апельсинке: https://3deshnik.ru/forum/viewtopic.php?f=5&t=81
      Конкретно корпус вот этот: http://www.thingiverse.com/thing:1068457

      Печатал ABS’ом Sirius, напилинг минимальный (главным образом, чтобы карточка свободно вставлялась-вынималась).

      0
  3. Не, малиновая сборка не должна на апельсине работать.
    Выключение и перезапуск полезны, надо себе добавить.
    Куру можно прикрутить, не заморачивался.

    0
    1. Не плохо НаноСердце получилось :) Для этих камер свет нужен хороший и картинка будет норм.

      0
      1. Да, чувствительность у вебок – алес капут.
        Nanoheart спаял (заказывал плату+рассыпуху), Teacup в первом приближении собрал, ушами движками пошевелил, буду к “дровам” прилаживать.

        0
  4. Так и не появилось у меня /dev/video0
    вот этот кусок хлама по lsusb:
    Bus 008 Device 003: ID 18ec:3299 Arkmicro Technologies Inc. Webcam Carrefour
    Надо наверно выкинуть ее и купить нормальную камеру.

    0
    1. Хм. А можно еще отключить камеру, потом включить и вывод dmesg?

      0
    2. Встречаются жалобы бубунтоводов на такую камеру, если погуглить, да.

      0
  5. Камера заработала после обновления ядра. Даже удалось получить с нее изображение до выполнения sudo make install. После этой команды камера при помощи /usr/local/bin/webcam-streamer start не работает.
    Octoprint работает, видит принтер и управляет им но в веб интерфейсе упорно не хочет появляться кнопка System. Если добавляю строки из статьи в config.yaml то octoprint не стартует и “возмущается” на эти строки.
    Вечером продолжу копать.

    0
    1. Там есть какое-то западло с config.yaml, у меня не с первого раза взлетело. То ли отступы по фен-шую должны быть, то ли еще чего. Я могу попробовать свой файл выковырнуть, но только ближе к вечеру.

      0
  6. Я только вечером доберусь до своего апельсина, так-что жду.

    0
  7. Конфиг победил (все пришлось построково копировать), а вот поднятие камеры – нет. Если запускать все с каталога где собран mjpg-streamer (sudo ./mjpg_streamer -i “./input_uvc.so” -o “./output_http.so”)то по адресу http://(адрес «апельсинки»):8080/?action=stream есть изображение с камеры.
    Делаю sudo make install, все раскидывается по нужным каталогам с правами.
    Создаю webcam-streamer делаю его исполняемым и перемещаю в /usr/local/bin/
    Пробую стартовать как из octoprint так и с командной строки при помощи команды /usr/local/bin/webcam-streamer start
    И ничего нет ни по адресу ни в октопринт. В top тоже нет намека на mjpg_streamer.
    Продолжаю искать проблему…

    0
    1. Так. А от обычного пользователя (без sudo) из каталога, где он собран, стартует?

      0
  8. Стартует от обычного пользователя

    0
    1. Косяк в скрипте запуска. Надо убрать ключ -d, чтобы осталось

      DaemonArgs=”-i \”input_uvc.so -y\” -o \”output_http.so\”

      0
  9. Всем привет! все делаю по инструкции, но у меня не заходит в папку по этой комманде…
    cd mjpg-streamer/mjpg-streamer-experimental
    папка не найдена пишет :'(
    Может где-то есть готовая сборка с октопринтем и настроенной камерой?
    в линуксе не особо силен((

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

      Нормально проходит?
      Сейчас попробовал, папки создаются как в инструкции. Готовой сборки, к сожалению, нет.

      0
      1. Вот что выходит… :(

        orangepi@orangepi:~$ sudo apt-get install subversion libjpeg62-turbo-dev cmake
        [sudo] password for orangepi:
        Reading package lists... Done
        Building dependency tree
        Reading state information... Done
        E: Unable to locate package libjpeg62-turbo-dev
        orangepi@orangepi:~$ git clone https://github.com/jacksonliam/mjpg-streamer.git
        fatal: destination path 'mjpg-streamer' already exists and is not an empty directory.
        orangepi@orangepi:~$ ^C
        orangepi@orangepi:~$ cd mjpg-streamer/mjpg-streamer-experimental
        -bash: cd: mjpg-streamer/mjpg-streamer-experimental: No such file or directory
        orangepi@orangepi:~$ git clone https://github.com/jacksonliam/mjpg-streamer.git
        fatal: destination path 'mjpg-streamer' already exists and is not an empty directory.
        orangepi@orangepi:~$

        0
  10. Жаль что нет готовых образов((( мне кажется так намного легче для установки окты и всего для 3д принтера… вроде можно средствами акрониса сделать образ… и сразу выложить на яндекс диск или любое облако :-[

    0
    1. Там не акронисом, там просто raw-образ карты надо сделать, и всего делов. Но у меня сейчас нет настроенного образа с камерой, я с Armbian теперь экспериментирую.

      Можно вот так сделать, и результат запостить (вход в каталог mjpg-streamer, вывод содержимого каталога)?
      cd mjpg-streamer
      ls

      0
      1. Вот что вышло :-[

        login as: orangepi
        orangepi@192.168.1.76's password:
        Welcome to Ubuntu 14.04.4 LTS (GNU/Linux 3.4.39 armv7l)

        * Documentation: https://help.ubuntu.com/

        Last login: Mon Apr 11 23:39:14 2016 from desktop-ksli4dj
        orangepi@orangepi:~$ cd mjpg-streamer
        orangepi@orangepi:~/mjpg-streamer$ ls
        get?download=36:mjpg-streamer-rpi mjpg_streamer output_file.so
        input_file.so mjpg-streamer output_http.so
        input_uvc.so mjpg-streamer.log output_udp.so
        Makefile mjpg-streamer.sh
        orangepi@orangepi:~/mjpg-streamer$

        0
        1. Ну, ок. Находясь в этом каталоге продолжаем по инструкции – редактируем Makefile (nano Makefile…) и далее.

          0
  11. При вводе команды “nano Makefile”
    открывается редактирование файла и там пусто… я добавил строку #PLUGINS += input_raspicam.so
    и далее делал все по инструкции..
    видимо откудато нужно качать этот исходный код… а откуда хрен знает и как потом его скопировать в папку..
    эхх далек я от извращенного линукса((

    orangepi@orangepi:~/mjpg-streamer$ nano Makefile
    orangepi@orangepi:~/mjpg-streamer$ export LD_LIBRARY_PATH=.
    orangepi@orangepi:~/mjpg-streamer$ make
    make: *** No targets. Stop.
    orangepi@orangepi:~/mjpg-streamer$ ls /dev/video*
    ls: cannot access /dev/video*: No such file or directory

    0
    1. Блин. Какой-то фундаментальный косяк, я его никак понять не могу. У вас какая сборка линукса вообще, откуда скачанная?

      0
  12. Lubutno 14 вроде.. но при вводе команды cat /etc/issue.net
    пишет:
    Ubuntu 14.04.4 LTS
    Я уже не помню откуда качал… с 4пда вроде..
    Ладно не мучайтесь, хрен с этой камерой… буду ждать вдруг кто выложит готовую сборку.. Спасибо за помощь!

    0
    1. А, понятно. Я теперь мучаться не буду, инструкция проверена только для сборки Debian minimal от loboris. Ну, на Armbian тоже должна работать, а вот что касается “посторонней” убунты (хоть она из дебиана и вышла) – ничего гарантировать не могу. Линуксы для китайских плат – это жесть и капец, там все может быть по-разному.

      0
      1. у меня как раз китайская ардуина с дебильным контроллером CH341g :'(
        Debian minimal от loboris у меня не видела ардуину даже с установкой драйверов((
        делал так же по инструкции с 3дешника..

        0
        1. Для этого нужно обновление модулей ядра сделать, у меня в статье об этом было.
          Но вообще, считаю, что не стоит возиться – надо ставить Armbian, там меньше дурацких косяков.

          0
        2. Про Armbian я на тридэшник не репостил, вот http://3dtoday.ru/blogs/eta4ever/orange-octopus-junior-and-penguin-stuff/
          Для OPi PC и OPi One дистрибутив один и тот же.

          1
          1. О! спасибо, попробую :)

            0
  13. Armbian установил =) теперь проблема с запуском октопринта :'(
    все делаю по вашей инструкции Апельсиновый осьминог
    и при вводе команды ~/OctoPrint/venv/bin/octoprint
    выходит ошибка: You should not run OctoPrint as root!
    :'(

    0
  14. все нашел проблему)) я под пользователем root зашел))

    0
  15. Чет у меня после редактирования файла окта не запускается :(
    если удалить все с раздела system то окта сразу включается.. прям проклятье какое то с этой вебкой((
    accessControl:
    salt: fRCSKfEeMeOxYUkEWRyIWUoK4LspbrCx
    api:
    key: 81D746015B244ADE99F9486AAFB6471A
    appearance: {}
    feature: {}
    gcodeViewer: {}
    plugins:
    discovery:
    upnpUuid: 16c27fcc-d3fe-49f8-b5da-1654fc0bff77
    softwareupdate:
    _config_version: 4
    checks:
    octoprint:
    checkout_folder: null
    printerParameters: {}
    printerProfiles:
    defaultProfile:
    axes:
    e:
    inverted: false
    speed: 300
    x:
    inverted: false
    speed: 1600
    y:
    inverted: false
    speed: 1600
    z:
    inverted: false
    speed: 200
    color: green
    extruder:
    count: 1
    nozzleDiameter: 0.4
    offsets:
    - - 0.0
    - 0.0
    heatedBed: true
    id: _default
    model: ZAV MAX-R
    name: Default
    volume:
    depth: 200.0
    formFactor: rectangular
    height: 232.5
    origin: lowerleft
    width: 200.0
    serial:
    autoconnect: true
    baudrate: 250000
    port: /dev/ttyUSB0
    timeout: {}
    server:
    commands: {}
    firstRun: false
    secretKey: b1wWShHGtyVdbjkyTBzt8D8yAS7DYf1V
    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
    temperature: {}
    webcam:
    watermark: false

    0
  16. Эх… а у меня печалька…

    0
  17. В итоге… удалось завести свою дреееевнюю камеру с низким разрешением… но вместо картинки получаю “шум”

    0
  18. Подключил другую камеру… картинка нормальная…
    короче нужна камера
    :)

    0
    1. Значит, у меня еще не настолько барахляная камера была, с которой я начинал экспериментировать (на заглавной картинке статьи). Она хоть показывала :)
      Сейчас нечто более цивильное, но столь же “дорогостоящее” использую, оно и по качеству, и по fps куда больше радует.

      0
  19. Если было изображение… значит камера была явно хорошая… :)
    На работе попробовал разные камеры (5 шт.) отказалась работать только моя… древняя… все остальные работают… и даже очень прилично…

    0

Добавить комментарий




     
Авторизация
*
*
Генерация пароля
Яндекс.Метрика