amazon

Now Loading...
Now Loading...

RaspbianにOctoPrintをインストールする

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で動かす方が良いでしょう。

今回は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 venv
OctoPrintをインストールします。
./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/ffmpeg
jessie以前の場合は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
done
camera_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タブを選択するとカメラの映像が表示されているでしょう。
OctoPrintのControlタブ画面

まとめ

RaspbianにOctoPrintをインストールしてみました。
公式サイトの手順通りに行えば簡単に入れることができました。

OctoPrintとmjpg-streamerは完全に独立して動いている事がわかりました。OctoPrintとmjpg-streamerを一緒に起動するスクリプトも作ると便利でしょう。
個人的にお勧めなUSBカメラはこれです。

価格も安くレンズが広角なので狭い3Dプリンタ内を撮影するのに良いです。

mjpg-streamerでは音声が無いので他のストリーム方法を検討したいと思っていました。OctoPrintとは独立しているので他の映像ストリーム手段を動かせば実現できそうです。その時、Controlタブへ埋め込むのは難しそうですね。OctoPrintのPluginでどうにかできるのか今後の検討課題です。

コメント

最近のコメント

Threaded Recent Comments will be here.

amazon

Now Loading...

このブログの人気の投稿

フローリングのワックス剥がしを簡単にするにはどうするのが良いのだろうか

パソコンでビデオを高画質再生するmadVRビデオレンダラを使ってみる

ビデオカメラでライブ配信をしたいのでHDMIキャプチャ機器を調べた