OctoPrintで使えるネットワークカメラを作る

失敗の原因が知りたい

3Dプリンターの出力に失敗はつきものです。

数多のもじゃもじゃ出力の末にパーツが完成します。

寝る前にプリントを始めた結果、朝には樹脂の塊と向き合う。

そんなことも少なくありません。

失敗するのはいいのですが、せめてどこで失敗したのか?が分からないと改善することができません。

タイムラプス撮影できるカメラを作り、 失敗する瞬間を見て悲鳴をあげましょう 失敗を分析してみましょう。

f:id:polaroidoon:20220223202224j:plain

OctoPrint のタイムラプス撮影を使用する

OctoPrintにはタイムラプス撮影機能があります。

印刷中に一定時間ごと、またはレイヤごとに1枚の写真を撮影し、動画を作成してくれます。

こんな感じ。

OctoPrintで使えるカメラは以下の通り。

Raspberry PiにOctoPrintをインストールしている場合、カメラモジュールを取り付けるだけで撮影できるようです。

しかし、私のOctoPrint環境はRaspberry Piではなく普通のPCなのでカメラモジュールが利用できません。

また、USB接続のWebカメラを持っていません。

今回はRaspberry Piとカメラモジュールを使ってネットワークカメラを作り、OctoPrintから使用することにしました。

Raspberry Pi が手に入らない!

昨今の半導体不足により、Raspberry Piが入手しづらい状況です。高いし売り切れてるし…

今回は使い道がなくて死蔵していた 初代 Raspberry Pi を使用します。

カメラモジュールは余っていたAliExpressで300円程度で購入したものを使用します。

ケースを作る

初代Raspberry Piを使用したいい感じのケース…というのはモデルが見つけられなかったので、適当に作成します。

  • カメラモジュールが搭載できる
  • 三脚固定用にアルカスイス互換のクイックシューが使用できる
  • 自然空冷で冷やせる通気性のよいデザイン

GrabCADで見つけた初代Raspberry Piのモデルをもとに、Fusion360でケースをモデリングします。

https://grabcad.com/library/raspberry-pi-model-b

ケースのモデルは Prusa Prints に登録しました。https://www.prusaprinters.org/prints/136584-raspberry-pi-model-bfirst-gen-casealca-swiss-style

Raspberry Piをネットワークカメラにする

OctoPrintはmjpeg配信してくれるカメラに対応しているので、今回用意したRaspberry Pi をネットワークカメラとして公開できるようにします。

  1. Raspberry OSをインストール
  2. mjpg-streamを導入
  3. Overlay FSを導入 失敗

raspberry OS

ここを参考にインストールします。

aose.hatenablog.jp

mjpeg-stream

カメラモジュールで撮影した画像をストリーミング配信します。

https://github.com/jacksonliam/mjpg-streamer/tree/master/mjpg-streamer-experimental

git clone https://github.com/jacksonliam/mjpg-streamer/tree/master/mjpg-streamer-experimental

start.shを修正して、systemdに登録しました。

start.sh

#!/bin/sh
export LD_LIBRARY_PATH="$(pwd)"
./mjpg_streamer -o "output_http.so -p 8080"  -i "input_uvc.so -r SXGA -hf true -vf true"

mjpg-streamer.service

[Unit]
Description=mjpg-streamer
After=network-online.target
Wants=network-online.target

[Service]
Type=simple
User=pi
WorkingDirectory=/home/pi/mjpg-streamer/mjpg-streamer-experimental/
ExecStart=/bin/sh start.sh

[Install]
WantedBy=multi-user.target

これで以下URLから映像が確認できます。ブラウザーVLCで開いて確認します。

http://[IPADDRESS]:8080/?action=stream

overlayFS

電源を雑にON/OFFしてもいいように、ReadOnlyのファイルシステムにしておくとよいでしょう。

ですが、今回は初代RaspberryPiだったのでメモリが足りず起動できなくなったので断念しました。

壊れたら次のSDカードを用意しましょう…

OctoPrintに設定する

こんな感じ f:id:polaroidoon:20220222175236p:plain

完成

おめでとうございます。もじゃもじゃが生まれる瞬間を目にすることができましたね!

タイムラプス撮影できる環境ができあがりました。

ホントは成功する動画が撮れたほうがうれしいんだけど…