ラズパイでライブカメラ自作(プラレールカメラ)

Raspberry Pi

ラズパイZero Wでライブカメラ自作

子供が大きくなりプラレールやラジコンを一人で遊べるようになってきた今日この頃、”運転席からの景色”を見たいと思うのが乗り物好きの心情ってもの。GoProや既製品あるのでお金を払えば実現できますが、飽きたときに監視カメラなどほかの用途で使えるようにラズパイZero Wにmjepg-streamerをインストールして小型ライブカメラを自作、プラレールに組み込むことにします。ラズパイZeroがプラレールにぎりぎり納まることに気づいちゃったのがキッカケです。使わないときはヨメが下の子ゼロ歳児のベビーカメラとして使ってます。裸ラズパイの小型カメラよりもある程度大きさあった方が使いやすいようです。

Raspberry Pi Zero Wでライブカメラ

まずは中身のカメラを作製します。移動するものなので無線が必須、Raspberry Pi Zero Wとラズパイ純正カメラを使います。ラズパイZeroはカメラコネクタが一回り小さいため専用のケーブルを準備する必要がある点注意です。USBカメラでも代用できますが大きさがネック。ラズパイ純正カメラのサイズが小さくて安くて性能も十分です。

Raspberry Pi OS (32Bit) LiteをインストールしてSSHまで完了させます。まだの方は↓がお役に立つかも。

物理的にカメラを接続した状態で設定画面から3 Interface Options ⇒ I1 Legacy Camera ⇒ Yesを選択、再起動します。

//最初のおまじない
$ sudo apt update && sudo apt full-upgrade -y
//カメラ設定
$ sudo raspi-config
//コマンドで片づけるならこっち
$ sudo raspi-config nonint do_camera 0 && sudo reboot now

配信にはMJPG-Streamerを使用します。パワーのないラズパイZeroですがMJPGならほんの少しの遅延だけでWiFiで映像配信できます。

$ cd
$ sudo apt install -y git cmake libjpeg-dev
$ git clone https://github.com/neuralassembly/mjpg-streamer.git
$ cd mjpg-streamer/mjpg-streamer-experimental
$ make
$ sudo make install
// 自分用、まとめて実行
$ sudo apt install -y git cmake libjpeg-dev && git clone https://github.com/neuralassembly/mjpg-streamer.git
$ cd mjpg-streamer/mjpg-streamer-experimental && make && sudo make install

エラーもなくインストールが完了したらひとまず起動してみます。

$ cd ~/mjpg-streamer/mjpg-streamer-experimental
$ mjpg_streamer -o './output_http.so -w ./www -p 8080' -i './input_raspicam.so -x 1920 -y 1080 -fps 30 -q 10'

ブラウザでhttps://[ラズパイのIPアドレス]:8080にアクセスすればライブ映像が見られるようになってます。たったこれだけ。Streamのタブで30フレーム/秒のフルHDの動画がみれるはずです。ほんのちょっと遅延あるけどぜんぜん許容圏内でしょ?

MJPG-Streamerの設定

問題なく使えることを確認できたら電源ONするだけで配信が始まるように設定します。こちらのサイトを参考にしています、わかりやすい解説で大変ありがたい。mjpg-streamer.shという手順(スクリプト)が記載されたファイルを作り起動時に自動で実行されるようにしていきます。

$ cd ~/ && sudo nano mjpg-streamer.sh

でファイルを開いたら以下を追記します。Ctrl+Sで保存、Ctrl+Xで閉じるです。ユーザー名はpiとしています、必要に応じて変えてください。

#!/bin/bash
# MJPG-Streamerの起動シェル

# MJPG-Streamerの格納先ディレクトリ
MJPG_DIR="/home/pi/mjpg-streamer/mjpg-streamer-experimental"

DEV="/dev/video1"

# カメラ設定
WIDTH=1920
HEIGHT=1080
RES="${WIDTH}x${HEIGHT}"
FPS=30
QUALITY=10
PORT=8080
ROTATE=180

#RPI: ラズパイ専用カメラモジュール USB: USBカメラ
CAMERA_MODE="RPI"
#CAMERA_MODE="USB"

# カレントディレクトリ移動
cd $MJPG_DIR
pkill mjpg_streamer

# カメラ種別ごとに実行コマンドを切り替える
if [ "$CAMERA_MODE" == "RPI" ]; then
./mjpg_streamer -i "./input_raspicam.so -x $WIDTH -y $HEIGHT -fps $FPS -quality $QUALITY -rot $ROTATE" -o "./output_http.so -w ./www -p $PORT"
else
./mjpg_streamer -i "./input_uvc.so -d $DEV -r $RES -f $FPS" -o "./output_http.so -w ./www -p $PORT"
fi

exit 0

このあとプラレールに組み込む際に上下逆に取り付けるのでROTATE=180を指定しています。このファイルが再起動後も実行されるように設定を進めます。

$ chmod 755 mjpg-streamer.sh
$ cd /etc/systemd/system
$ sudo nano mjpg-streamer.service
// 自分用、まとめて実行
$ sudo chmod 755 mjpg-streamer.sh && cd /etc/systemd/system && sudo nano mjpg-streamer.service

開いたファイルに以下を記載します。

[Unit]
Description=MJPG-Streamer Service
After=network-online.target

[Service]
Type=simple
KillMode=process
Restart=always
ExecStart=/home/pi/mjpg-streamer.sh

[Install]
WantedBy=multi-user.target

この設定をシステムに記録します。

$ sudo systemctl daemon-reload
$ sudo systemctl enable mjpg-streamer.service

再起動してストリーミングされているか確認します。

PiSugarでワイヤレス化

プラレールに組み込むのにコンセントにさしちゃ走らせられない、2両目にモバイルバッテリー積む手もありますがスマートにラズパイZeroサイズの専用バッテリーを搭載します。2時間くらい使えるのでベビーカメラでも重宝してます。

プラレールに組み込み

できれば先頭車両からの景色が見たい。けど動力車は中身ギッシリなので最後尾を改造します。電池を逆にすればカメラ車両を先頭にできます。

パカッと開けるとこんな感じ。スペースは何とかなりそうなのでZero Wを固定していきます。通常のラズパイカメラの画角72度は狭すぎたので最終的にワイド120度を使っています。写真のカメラは試作時のものです。

どうしても中央の補強リブがじゃまになるので撤去します。軟プラなのでニッパーやモデラーズナイフで簡単に除去できます。ケガだけしないように。

PiSugarの厚みがギリギリなので補強リブはほぼ撤去します。この辺りはドナーとなる車両みながら現物合わせです。

カメラを先頭にインストールするために顔パーツの裏も整形します。ちなみに顔側についている四角いパーツをちょっと変形させて接着剤をはがすときれいに顔だけ外れます、思ったより簡単。

素直にカメラを設置できるほどのスペースがないので最低限の固定パーツを残して引きちぎりました。ちょうどカメラの位置に穴を開けてホットボンドで留めています。画像のケーブルだと短くて自由度がないので長いものを使いました。

先に書いた通りラズパイ純正カメラ(画角72度)をセットした後に「狭すぎる!」ってんでワイドカメラに変更しました。位置合わせメンドウになって四角く切り抜いちゃいました、これはこれでヨシです。元に戻すのはホットボンドでちゃちゃっと。グルーガンはDIYの強い味方です。

ラズパイを小型のライブカメラとして使うことでプラレールでもベビーカメラでも防犯でも使えるのでMJPG-Streamerと組み合わせて運用は非常にオススメです。

コメント

タイトルとURLをコピーしました