camera

Raspberry PiでMotionを使って監視カメラを作ってみよう

2022年7月31日

Raspberry PiでMotionを使って監視カメラを作ってみよう

こんにちは。ポン吉です。

今回はMotionの使い方を紹介します。下記、スマートホームでの監視カメラの作り方の子記事になります。こちらの記事もあわせて参照してみてください。

 
ラズパイでカメラを使う場合のソフトウェアは「Motion」「MJPG-Streamer」の2つが主流です。Motionは設定項目が多く誤検知を防止するためにややコツがいります

誤検知をなくしたいけどパラメタ多すぎ!
わけわかんねー!怒

読者
ポン吉

そんなMotionに関するお悩みを解決します!

ラズパイ監視カメラ
Motionのセットアップ方法
監視カメラmjpg-streamer motion
Motionの性能チューニングやサービス組み込み方法

 

今回の記事を読めばラズパイでMotionを使うノウハウをバッチリ身につけられます!

今回のテーマはこちら!

  • Motionのセットアップ方法を紹介
  • ストリーム動画配信で高フレームレートを出すためのチューニングノウハウを紹介
  • スマートホーム監視カメラとして本番運用時のトラブル事例とその対策について紹介

 

それではやってみましょう~♪

Motion セットアップ方法

ラズパイ監視カメラ

Motionとは?

Motionはカメラ画像から動体検知をすることが出来るソフトウェアです。MJPG-Streamerのようにリアルタイムに動画配信をすることもできます。カメラで侵入者の検知などをしたい場合にMotionを使いましょう。 

MotionはMJPG-Streamerと異なり、小型組み込み機器を想定したアプリではありません。かなりCPUスペックを要求されるアプリなのでラズパイでの処理は重くキツイものになります。

FullHDのカメラ動画をデフォルト設定で使うとラズパイ4でも5fps程度しか出ません。非常に遅い。また、設定オプションがわかりずらく初心者には取っつきにくいところが難点。

現在、うちのスマートホームではMotionは使っていないのですが、過去2~3年間ほどオプション設定をあれこれ試行錯誤しながら悩みつつ使っていた経験はありますので、誤検知防止に向けたノイズ対策で有効なオプションを中心に紹介したいと思います。

動体検知が不要な方は「Motion」ではなく、必要スペックが低く軽量な「MJPG-Streamer」を使いましょう。下記にてMJPG-Streamerの詳細記事を記載していますので、こちらも参考にしてみてください。

Motionのセットアップ

セットアップ
ポン吉

難易度:☆☆☆☆

sudo apt install -y motion

さくっとインストールできると思います。

インストールの最後に以下のようなエラーメッセージが出力されます。

motion[1768]: [0:motion] [EMG] [ALL] motion_startup: Exit motion, cannot create log file /var/log/motion/motion.log: Permission denied

ログファイルの出力先がないためエラーが出ています。オプション設定でログの出力先を変更するか、/var/log/motionのディレクトリを作っておくようにしましょう。

 

Motionのチューニングノウハウ

コーディング・チューニング

Motionのオプション設定

Motionのオプション設定ファイルは /etc/motion/motion.conf にあります。こちらのファイルを編集しましょう。管理者権限が必要なのでsudoしています。エディタはvi以外でnanoでも好きなものでよいです。

sudo vi /etc/motion/motion.conf

Motionにデフォルトでインストールされるconfファイルは、基本オプション設定のみに絞って記載されています。下記、サイトにMotionの全オプションが記載されていますので参照してみてください。最新版のVer 4.3ではなんと208個の設定パラメータが存在します・・・

あれでも絞ってたのね。パラメタ多すぎ!!

読者
ポン吉

ここまで細かい設定が可能なアプリはなかなかありません!

どこに何を変更して書いたかわからなくなるので「設定ファイルの一番下に変更したいパラメタだけまとめて追記する」という記載方法をオススメします。設定ファイルの上部で指定している値は、下部で指定した値で上書きされるので気にしなくても大丈夫です。

# /etc/motion/motion.conf のファイル一番下に記載を追加

# SYSTEM
daemon on
log_file /tmp/motion.log
target_dir /tmp

# VIDEO
videodevice /dev/video1
norm 1
v4l2_palette 8
width 1920
height 1080
framerate 30

# STREAM
stream_localhost off
stream_maxrate 30
stream_quality 50

# DETECTION
threshold 1500
locate_motion_mode on
locate_motion_style redbox

 

システム関連オプション

オプション 説明
daemon off

Motionが起動したら、すぐにデーモンモード(バックグラウンド実行)に移行し、端末を解放します。Motionをサービスとして実行する場合は、offに設定します。

log_file /tmp/motion.log

Motionのメッセージログファイルをフルパスで指定します。
このオプションが定義されていない場合、stderr と syslog が使用されます。

デフォルト値のパス /var/log/motion/motion.log はラズパイ初期インストールで存在しません。変更が必要。(または/var/log/motionディレクトリを作成)

target_dir /tmp

Motionが動体検知した時に保存する、画像および動画ファイル出力先ディレクトリをフル パスで指定します。ラズパイのmicro SDカードへの書き込みはSDカードの寿命を縮めることになるので避けましょう。/tmp等のRAMDISK、またはNFS等の指定を推奨。容量にも注意。

 

ビデオ関連オプション

オプション 説明
videodevice /dev/video0

使用するビデオデバイスを指定します。
複数カメラを接続している場合はvideo1, video2など使いたいカメラを指定。

norm 1

テレビ放送方式を指定します。日本の規格は1 (NTSC)です。テレビチューナーを扱う時に指定。USBカメラではどれを指定してもログにエラーが出ます。(意味ないと思いつつ 1 を指定)
 0 (PAL), 1 (NTSC), 2 (SECAM), 3 (PAL NC no colour)

v4l2_palette 8

使用するカメラが対応している動画形式を指定します。USBカメラでは「MJPG, YUYV」あたりはサポートしていると思います。選択によってかなりの性能影響があります
 8 : MJPG ★こちらがおすすめ 15fpsくらい出る
 15 : YUYV 5fpsくらい
ちなみに、カメラが対応していない動画形式を指定した場合、自動的にカメラが使える動画形式から選択されます。

width 1920

カメラの幅を指定します。
使用するカメラのスペックにより指定値の範囲は変わります。

height 1080

カメラの高さを指定します。
使用するカメラのスペックにより指定値の範囲は変わります。

framerate 30

動体検知時に出力する動画ファイルのフレームレートを指定します。スペックが足りない場合は指定値よりも低いフレームレートになります。(30は出ません…)

リアルタイムに視聴する動画ストリームのフレームレートではないので注意

 

ストリーム動画(ブラウザ表示)に関連するオプション

オプション 説明
stream_localhost off

動画ストリームへのアクセスをローカルホストに制限します。これをonに設定すると、モーションが実行されている同じマシンでのみストリームにアクセスできます。デフォルトon。

⇒ローカルホスト以外からもストリーム動画を見たいので off に設定します。

stream_maxrate 30

ストリーム動画のフレームレートを指定します。デフォルト1。

⇒1fpsでは紙芝居レベル。滑らかな動画にするため 30fps に設定します。

stream_quality 50

ストリーム動画品質を指定します。デフォルト50。

MJPG-Streamerと異なり、値を10などにするとかなり画質が悪化します。画像悪化する割にフレームレートもそこまで上がらないので、デフォルト50 のままでよいと思います。

 

動体検知に関連するオプション

オプション 説明
threshold 1500

動体検知と判定する画素数変化の閾値を指定します。カメラ画像の解像度に依存。幅、高さを変更した場合はthresholdも変更させる必要があるので注意。
実際にカメラを設置した場所でthreshold値の変化を見ながら値を設定しましょう。誤検知が多い場合は数値を大きくして調整しましょう。

locate_motion_mode on

動体検知した場所を表示するかどうかを指定します。
 on : 表示する
 off : 表示しない

locate_motion_style redbox

動体検知した場所をどのように表示するか指定します。
 box : 白枠で表示
 redbox : 赤枠で表示
 cross : 白×で表示
 redcross : 赤×で表示

動体検知(Mask)に関連するオプション

オプション 説明
mask_file マスキング pgm ファイルをフルパスで指定します。動きを検出したくない領域 (風に揺れる木や敷地外の通り過ぎる車など)がある場合に使用しましょう。
 検出したい領域を白、無視したい領域を黒 にした画像を用意します。マスキングする領域はカメラで撮影した画像と同じサイズ (高さと幅のピクセル数) にしましょう。

Mask関連はMotionを使う上で誤検知防止に重要なオプションなので詳細に説明します。監視カメラで撮影するスポットを以下の図で説明します。

motion mask

雲、鳥、ビルの映りこみ、草木の揺れ等、動体検知したくない場所があると思います。これらをマスク(Mask)ファイルにて除外しましょう。まずは監視カメラの撮影サイズ(height, width)と同じ画像サイズを用意します。以下のようにマスク(Mask)画像を作成します。

  • 黒塗りつぶし部分: 動体検知してほしく場所
  • 白塗りつぶし部分: 動体検知してほしい場所
motion mask check
マスク(Mask)ファイルの作成イメージ図

上記はイメージ図なので、実際には下記のような白・黒の2色の画像ファイルになります。このファイルをmask_fileオプションにて指定すれば、黒塗りつぶし部分に変化があっても動体検知から無視されるようになります。

motion mask

PGMファイルとは?

PGM(Portable Gray Map)ファイルはグレースケール(白黒)の画像形式です。PGM画像ファイルの各ピクセルに含まれるのは、1または2バイト(8ビットまたは16ビット)の情報のみです。現在、あまり使われていないと思います。

PGM形式ファイルなんて聞いたことないわ
そんなファイル作れねーよ!ムキー!

読者
ポン吉

PGMはPhotoshopなどで出力できます。
白・黒のJPEGファイル作ってからPGM形式に変換しましょう。

画像変換ツールはフリーソフトなどもいろいろあります。また、ネットで「JPEG PGM 変換」で検索するとオンラインのブラウザで変換できるものも出てきますのでご参考まで。(Photoshopなどお持ちでない方でもPGMファイル作れます)

Motionのストリーム動画確認

監視カメラmjpg-streamer motion

起動後、同一ネットワーク内のマシンからブラウザでストリーム動画を見てみましょう。ブラウザから下記URLでMotionにアクセスしてみましょう。

http://raspberrypi.local:8081    ※ホスト名は環境に合わせて変更して下さい

mjpg-streamer

動体検知後の処理として「AI画像分析で人物検出処理」を加えると監視システムとして完全体になると思います。興味のある方は下記リンク先の記事も参考にしてみてください。

  

Motionのトラブル事例と対処方法

監視カメラトラブルシュート

初心者の方が陥りやすいトラブル事例について対処方法を紹介したいと思います。

Motionトラブル事例

  • Motionの設定ファイルを更新したのに内容が反映されない
  • 再起動したらカメラの画像が映らなくなる

Motionの設定ファイルを更新したのに内容が反映されない

Motionですが、すでに起動されている状態でMotionを多重実行してもエラーにならないのでハマりやすいポイントです。既に起動済みのMotionが存在している可能性があります。

psコマンドを使ってMotionのプロセスが起動済みでないかチェックしてみましょう。

ps -ef | grep motion | grep -v grep

バックグラウンドにプロセスが残っている場合は下記のように表示されます

ponkic+ 4550 3603 99 20:02 pts/1 00:03:57 motion

この場合は、下記コマンドを実行しmotionプロセスを終了させましょう。

▼motionのプロセスを終了させる方法

pkill motion

ポン吉

設定変更したのに変わらない!といった怪しい動きを感じた際は
motionのプロセスが残留していないかチェックしましょう

 

再起動したらカメラの画像が映らなくなる

ラズパイ専用カメラモジュールやUSBカメラを複数接続している場合、カメラデバイスが変更されてしまう場合があります。

カメラが1つであれば問題ありませんが、/dev/video0, /dev/video1などのデバイス名を確認して正しいカメラデバイスになっているか確認しましょう。

 

Motion+ラズパイで動作実績のあるカメラを紹介

うちのスマートホームで使っているカメラ4種類。更に複数購入してあちこち監視させています。ラズパイでカメラを使う場合、下記4台のカメラを選べば後悔はしないと思います。どのカメラ買おうかお悩みの方がいましたら参考にしてみてください。

ラズパイ自体も品薄で購入が難しい状況が続いています。ラズパイの在庫と価格をリアルタイム確認できるページを作りました。ラズパイを購入しようとしている方は是非参考にしてみてください。

カメラの選び方や詳細スペックについては下記サイトにまとめていますので、あわせて参照してみてください。

まとめ

 

まとめ

  • お手軽に動体検知を使った監視カメラを作りたい場合は「Motion」がイチオシ
  • 大量にあるパラメタの調整を試行錯誤して環境に合わせた設定値を煮詰めよう
  • 誤検知にも限界あり… Motionの動体検知後に人物検出AI処理につなげよう
ポン吉

お手軽に動体検知したいならMotionで決まり!

動体検知の誤検知を減らすには

AIによる画像分析機能を組み合わせないと、どうしてもMotionだけでは誤検知を完全には防げません。別記事で紹介しているようにAIによる人物特定などの機能とつなげて、更に高精度な動体検知に仕上げていきましょう。

ラズパイで重いAI処理を実行させたい方は、下記記事も参考にしてみてください。

-camera