前回から間があいてしまいましたが、今回はRaspberry Piを使って動体検知で動画を記録する監視カメラを作ります。
動体検知の監視カメラに必要な材料
監視カメラを作るのに必要な部品は以下のとおり。
- Raspberry Pi 本体 :660円~
- ラズパイ用カメラモジュール :700円~
- USBケーブル(電源用):100円~
- MicroSDカード 600円~
- ケース :0円~
いずれも機能さえあればスペックはさほど問いません。
例えば高画質画像で記録したければ純正のカメラモジュール、滑らかに記録したければCPU能力が高いRaspberryPiの上位モデルなど、ニーズとお財布を相談して使う部品をアレンジしていけばよいでしょう。
今回のサンプル画像は、前回の「都こんぶ」の箱にRaspberry Pi ZEROを入れて、ノーブランドカメラモジュールを使った「都こんぶカメラ」を使っています。
この「都こんぶカメラ」レベルなら、カメラモジュールをAmazon、本体をスイッチサイエンスあたりで調達してうまくいけば3,000円くらいで全て揃えることができます(夏休み需要なのか最近は660円のRaspberry Pi Zeroが入手難のようで、ラズパイ本体の調達がコスト面のネックです)。
後述のイメージを見るとわかりますが、安いパーツで揃えても監視カメラ用途なら十分なスペックになります。
作り方
Raspberry Pi OSのインストールやカメラモジュールの接続、無線LANを使用する場合の設定については過去記事を参照ください。
Motionのインストール
動体検知にはMotionというソフトウェアを利用します。Motionはその名のとおり「動き」を検知して、静止画や動画を撮影できるソフトウェアです。
インストールは簡単。ネットワークにつなげてからRaspberry Pi起動後のコマンドラインでapt(またはapt-get)を使ってインストールします。
$ sudo apt install motion
motion.confの修正
Motionの設定は、設定ファイルであるmotion.confを編集して行います。
$ sudo nano /etc/motion/motion.conf
motion.confは、英語でのコメントを含め、かなりの行数ですが、デフォルト値で十分な項目も多いため、必要最低限の修正をし、必要に応じてカスタマイズしていけばよいと思います。
私が主に修正している項目は以下のとおり。
daemon on
norm 1
width 640
height 480
framerate 10
threshold 1000
event_gap 20
locate on
target_dir /mnt/nas
daemon
バックグラウンドで動作するサービスとして使用する場合はonにします。onにすればOS起動と連動して勝手に起動してくれるため、私はdaemonモードで使っていますが、監視カメラ専用で使用する場合にはoffでアプリケーションを起動させても問題ありません。
norm
映像信号の方式。日本ではNTSCであるため1を選択します。
width
画像の横幅です。
height
画像の高さです。
framerate
動画を記録する際の1秒間に期録する最大フレーム数です。多いほど滑らかになりますが、ファイルサイズが大きくCPU負荷が高まります。
CPUが非力なRaspberry Pi Zero を使用する場合は10くらいにとどめておかないと対応できないと思います。
threshold
動体検知の感度を示します。動作を検出するピクセル数なので、低くするほど敏感に検知することになります。風で草が揺れても検知するなどのデメリットもあるため、実際の環境でテストしながら調整していくとよいです。
event_gap
短時間の間に複数の動きを検知した場合、独立したファイルとして認識する単位を示します。
例えば20を設定すると、動く~止まる~動くと検知しても、20秒以内なら1つのファイルとして記録されます。
locate
onにすると、動体検知した対象物を白い枠で囲ってくれます。画像としては正直邪魔ですが、付けると何となく監視カメラ感がでてて個人的には好きです。
target_dir
ファイルの記録先のフォルダ(ディレクトリ)です。
SDカードは容量に限りがあること、繰り返し録画はカード破壊の原因となる観点で、家で常時使う場合には個人的にネットワークドライブを指定して直接記録するようにしています。
/etc/default/motionの設定(daemon onの場合のみ)
daemonモードでサービスとして使用する場合には、/etc/default/motionも編集でyesにする必要があります。
$ sudo nano /etc/default/motion
start_motion_daemon=yes
利用方法
Motionの起動
サービスとして利用する場合にはsudo service motion startで起動します。あるいはラズパイを再起動すれば自動起動します。
$sudo service motion start
カメラ画像の閲覧と記録
Raspberry Piがネットワークに接続されている場合には、WEBブラウザのアドレス欄に「Raspberry Piのipアドレス:8081」を入力するとMotionが記録しているカメラの画像がリアルタイムに表示されます。監視カメラのモニタのような感じになりますね。
実際の保存される画像は上のような感じ。スペックが低いRaspberry Pi Zeroのフレームレート10で撮影したので、走っている車は一瞬しか映りませんが、監視カメラ用途ではこれでも十分な感じです。(画質はGIFに変換して落ちていますので、実際はもう少し良いです)。
大人の夏の自由工作としてカメラで遊んでみよう
今回使ったMotionは実際はかなり多機能。例えば検知後にアプリを指定することもできるので、例えば、「動作を検知して携帯に写真をメールで送付する」のような応用機能も、比較的簡単に実現することができます。
消費電力が小さいZeroシリーズで構築すれば、モバイルバッテリーを電源にしてアウトドアで何日も連続稼働させることも可能です。
使い方次第では、ペットモニタや昆虫や植物の観察用カメラ、ドライブレコーダーなど様々な活用方法も考えられますね。
個人的には、交差点でカウンターをカチカチやっている交通量調査って、動体検知機能を応用させれば機械に代替させられるんじゃないかなと思ったりもします。
3,000円くらいから作れるラズパイの監視カメラ。コロナのせいで子供たちの短い夏休みは終わってしまいましたが、大人の夏の自由工作としてチャレンジしてみてはどうでしょうか。