RaspbianにOctoPrintをインストールする
OctoPrintをRaspberry Pi 3 Bなどで動かすと3Dプリンタをブラウザから管理できます。USBカメラでプリントの状況をリアルタイムで見ることもできます。
以前に、最小構成のOSで手軽にOctoPrintを動かせるOctoPiを使いましたが、今回はOctoPiを使わずOctoPrintをソースからインストールしてみます。
以前の記事でOctoPiを動かしました。
3Dプリンタ用サーバ"OctoPrint"をRaspberry Pi 3 Model Bで動かしてみる
Raspberry Pi用のOctoPrintが動く専用イメージファイルOctoPiを使いました。
OctoPiは動作に必要な環境が出来上がっているためお手軽にOctoPrintを動かす事ができました。普通はOctoPiで動かす方が良いでしょう。
他のプログラムも使うことを考えるとOctoPiを使うより普通のRaspbianにOctoPrintをインストールした方が良さそうだからです。
https://octoprint.org/download/#installing-from-source
手順に従ってやってみます。
Raspbianのバージョンは記事公開時の最新版である
RASPBIAN STRETCH WITH DESKTOP Version:March 2018
を使いました。
レポジトリの更新をします。
virtualenvをインストールします。
Pythonの仮想環境を作ります。
実行するには
これでOctoPrintは動きます。パソコンのブラウザで
"http://[Raspberry PiのIPアドレス]:5000"
を開きます。
初回は初期設定をいろいろ聞かれますので選択していきます。
mjpg-streamerのインストール手順はこちらにあります。
https://github.com/foosel/OctoPrint/wiki/Setup-on-a-Raspberry-Pi-running-Raspbian#webcam
書いてある通り実行していきます。
必要なライブラリをインストールします。
ライブラリのインストールが終わったらmjpeg-streamerをインストールします。
そして、パソコンなどのブラウザで
"http://[Raspberry PiのIPアドレス]:8080/?action=stream"
を開くとカメラの映像が表示されるでしょう。
~/.octoprint/config.yamlファイルをテキストエディタで開きます。
ファイルの最後に次のテキストを追加します。
自分で最新のFFmpegをインストールしても良いですね。
関連記事:stretchなRASPBIANとTinkerOSでFFmpegをビルドする
ホームディレクトリにwebcamというテキストファイルを作ります。中身のテキストは次のようにします。
もう一つwebcamDaemonというテキストファイルを作ります。中身のテキストは次のようにします。
接続したUSBカメラの解像度とフレームレートの組み合わせを表示するには次のコマンドを入れます。
関連記事:OctoPrintの初期設定をしてUSBカメラを使えるようにする
作成したスクリプトファイルに実行許可を与えます。
停止するには
OctoPrintとmjpg-streamerを動かし、ブラウザでOctoPrintを表示します。
Controlタブを選択するとカメラの映像が表示されているでしょう。
公式サイトの手順通りに行えば簡単に入れることができました。
OctoPrintとmjpg-streamerは完全に独立して動いている事がわかりました。OctoPrintとmjpg-streamerを一緒に起動するスクリプトも作ると便利でしょう。
個人的にお勧めなUSBカメラはこれです。
価格も安くレンズが広角なので狭い3Dプリンタ内を撮影するのに良いです。
mjpg-streamerでは音声が無いので他のストリーム方法を検討したいと思っていました。OctoPrintとは独立しているので他の映像ストリーム手段を動かせば実現できそうです。その時、Controlタブへ埋め込むのは難しそうですね。OctoPrintのPluginでどうにかできるのか今後の検討課題です。
以前に、最小構成のOSで手軽にOctoPrintを動かせるOctoPiを使いましたが、今回はOctoPiを使わずOctoPrintをソースからインストールしてみます。
以前の記事でOctoPiを動かしました。
3Dプリンタ用サーバ"OctoPrint"をRaspberry Pi 3 Model Bで動かしてみる
Raspberry Pi用のOctoPrintが動く専用イメージファイルOctoPiを使いました。
OctoPiは動作に必要な環境が出来上がっているためお手軽にOctoPrintを動かす事ができました。普通はOctoPiで動かす方が良いでしょう。
今回はOctoPrintのソースからRaspbianにインストールして動かします。
OctoPrintではmjpg-streamerによりカメラのライブ映像を見ることができます。mjpg-streamerでは音声を送ることができないのを不満に思っていました。別の手段で音声付きのライブストリーミングをしたいと思っています。他のプログラムも使うことを考えるとOctoPiを使うより普通のRaspbianにOctoPrintをインストールした方が良さそうだからです。
OctoPrintをインストールする
OctoPrintのインストール方法はOctoPrint公式のダウンロードページに書いてあります。https://octoprint.org/download/#installing-from-source
手順に従ってやってみます。
Raspbianのバージョンは記事公開時の最新版である
RASPBIAN STRETCH WITH DESKTOP Version:March 2018
を使いました。
レポジトリの更新をします。
sudo apt update sudo apt upgrade
必要なライブラリのインストール
Pythonは既に入っていますのでインストールの必要はありませ。pipも入っています。virtualenvをインストールします。
sudo pip install virtualenv
ソースからインストール
OctoPrintをダウンロードします。ダウンロードするディレクトリはユーザーディレクトリ下のDownloadsディレクトリにしています。cd ~/Downloads git clone https://github.com/foosel/OctoPrint.git cd OctoPrint
Pythonの仮想環境を作ります。
virtualenv venvOctoPrintをインストールします。
./venv/bin/python setup.py installこれでインストールは完了です。
実行するには
~/Downloads/OctoPrint/venv/bin/octoprint serveとします。
これでOctoPrintは動きます。パソコンのブラウザで
"http://[Raspberry PiのIPアドレス]:5000"
を開きます。
初回は初期設定をいろいろ聞かれますので選択していきます。
mjpg-streamerをインストールする
OctoPiと違いmjpg-streamerは動きません。そのためカメラのライブ映像が見えません。mjpg-streamerを別途インストールします。mjpg-streamerのインストール手順はこちらにあります。
https://github.com/foosel/OctoPrint/wiki/Setup-on-a-Raspberry-Pi-running-Raspbian#webcam
書いてある通り実行していきます。
必要なライブラリをインストールします。
cd ~ sudo apt-get install subversion libjpeg62-turbo-dev imagemagick ffmpeg libv4l-dev cmakeこれはstretch用だそうです。jessieやWheezyの場合も書いてありますね。
ライブラリのインストールが終わったらmjpeg-streamerをインストールします。
cd ~/Downloads git clone https://github.com/jacksonliam/mjpg-streamer.git cd mjpg-streamer/mjpg-streamer-experimental export LD_LIBRARY_PATH=. make
mjpg-streamerの動作確認
makeが完了したら動かしてみます。Raspberry PiにUSBカメラをつないでおきます。./mjpg_streamer -i "./input_uvc.so" -o "./output_http.so"YUVモードで動かすカメラの場合は
./mjpg_streamer -i "./input_uvc.so -y" -o "./output_http.so"と入れます。
そして、パソコンなどのブラウザで
"http://[Raspberry PiのIPアドレス]:8080/?action=stream"
を開くとカメラの映像が表示されるでしょう。
OctoPrintへカメラの設定をする
OctoPrintへカメラ映像のURLを設定します。~/.octoprint/config.yamlファイルをテキストエディタで開きます。
ファイルの最後に次のテキストを追加します。
webcam: stream: http://<your Raspi's IP>:8080/?action=stream snapshot: http://127.0.0.1:8080/?action=snapshot ffmpeg: /usr/bin/ffmpegjessie以前の場合はffmpegではなくavconvにするそうです。
自分で最新のFFmpegをインストールしても良いですね。
関連記事:stretchなRASPBIANとTinkerOSでFFmpegをビルドする
mjpg-streamerの起動用スクリプトを作る
mjpg-streamerを起動するスクリプトを作ります。ホームディレクトリにwebcamというテキストファイルを作ります。中身のテキストは次のようにします。
#!/bin/bash # Start / stop streamer daemon case "$1" in start) pkill -x webcamDaemon ~/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複数回startをすると、次に作るwebcamDaemonというプロセスが何個も動きそうなのでstartにpkillを追加しています。
もう一つwebcamDaemonというテキストファイルを作ります。中身のテキストは次のようにします。
#!/bin/bash MJPGSTREAMER_HOME=~/Downloads/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 640x480 -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 donecamera_usb_optionsあるいはcamera_raspi_optionsでカメラの解像度やフレームレートを設定します。このスクリプトで露出など細かい設定もできそうです。
接続したUSBカメラの解像度とフレームレートの組み合わせを表示するには次のコマンドを入れます。
v4l2-ctl -d /dev/video0 --list-formats-extこれで表示されない解像度やフレームレートでは映像が表示されないでしょう。
関連記事:OctoPrintの初期設定をしてUSBカメラを使えるようにする
作成したスクリプトファイルに実行許可を与えます。
chmod +x webcam chmod +x webcamDaemon
スクリプトの使い方
作成したスクリプトを使ってmjpg-streamerを動かすにはwebcam startとします。
停止するには
webcam stopとします。
OctoPrintとmjpg-streamerを動かし、ブラウザでOctoPrintを表示します。
Controlタブを選択するとカメラの映像が表示されているでしょう。
まとめ
RaspbianにOctoPrintをインストールしてみました。公式サイトの手順通りに行えば簡単に入れることができました。
OctoPrintとmjpg-streamerは完全に独立して動いている事がわかりました。OctoPrintとmjpg-streamerを一緒に起動するスクリプトも作ると便利でしょう。
個人的にお勧めなUSBカメラはこれです。
mjpg-streamerでは音声が無いので他のストリーム方法を検討したいと思っていました。OctoPrintとは独立しているので他の映像ストリーム手段を動かせば実現できそうです。その時、Controlタブへ埋め込むのは難しそうですね。OctoPrintのPluginでどうにかできるのか今後の検討課題です。
コメント
コメントを投稿