今回はRaspberry PiにUSBのWebカメラを接続して、カメラの映像に何か動きがあったら写真を撮影する「監視カメラ」を作成してみました。この動作を実現させるためにmotionという定番のソフトウェアを使用しています。

motionについては私よりも詳しい方がすでにいろいろと紹介されていますので「いまさら」感はあるのですが、前々から自分でもやってみたかったので、今回実際に自分でやった内容を備忘録として残しておきます。

使ったもの

  • Raspberry Pi 3 モデルB
  • Webカメラ(ロジクール C922n)

motionのインストール

まずmotionをインストールします。Raspberry Piのコマンドプロンプトで以下のコマンドを実行します。

これだけです。とても簡単ですね。

motionの設定

motionの設定ファイルは /etc/motion/motion.conf になります。これをnanoなどのエディタで開き、必要なところを書き換えていきます。

nanoで設定ファイルを開くには以下のようにします。

設定できるパラメータが非常に多いですが、今回は書き換えたところだけを説明します。上側がデフォルト、下が書き換え後です。

デーモン(バックグラウンドで動作するサービス)として使用する場合はonにします。

映像信号の方式。日本ではNTSCであるため1を選択します。

画像の横幅です。ハイビジョン(HD)の解像度(1280×720)に変更しています。

画像の高さです。同上。

1秒間にキャプチャする画像の最大フレーム数です。今回は静止画を記録するので1秒に2枚の撮影にしています。動画として撮影したい場合はもっと数値を大きくする必要があります(その分、CPUの負荷が高くなるので注意してください)。

動作を検出するピクセル数です。低くするほど敏感に検知することになりますが、光のちょっとした変化でも「動き」と検知してしまいます。実際の環境でテストしながら、望ましい値に決めることになります。

短時間の間に複数の動きを検知した場合、独立したファイルとして記録する単位を示します。例えば5を設定すると、動く~止まる~動くと検知しても、5秒以内なら1つのファイルとして記録されます。

ファイルの記録先のフォルダ(ディレクトリ)です。なるべく浅いフォルダのほうが使いやすいので変更しています。

検知した動きを動画ファイルとして保存するかどうか。今回、動画は記録しないのでoffにします。

検知した動きを静止画ファイルとして保存するかどうか。今回、静止画として記録するのでonにします。

つぎにサービス(デーモン)として動かすためにファイル/etc/default/motionを作成し、内容を以下のようにします。

保存ディレクトリの用意

画像を保存するディレクトリを作成します。

作成したディレクトリのパーミッションを変更します。

motionの起動

以下のコマンドで実行されるらしいのですが、

なぜか私の環境ではうまくいきませんでした。仕方がないので以下のコマンドで直接起動させました。-n オプションは非デーモンモードでの起動です。

カメラの映像に動きがあったときに写真が自動的に記録されています。

さいごに

監視カメラが安価に販売されているのにわざわざ自分で監視カメラを作るメリットは、自分の好みに合わせてパラメータを細かく調整したり、他のプログラムと組み合わせて使えるという自由度の高さだと思います。今後、撮影した画像を自動的にメール送信する仕組みを作りたいと思います。