こんにちは。ポン吉です。
今回はMotionの使い方を紹介します。下記、スマートホームでの監視カメラの作り方の子記事になります。こちらの記事もあわせて参照してみてください。
ラズパイでカメラを使う場合のソフトウェアは「Motion」「MJPG-Streamer」の2つが主流です。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のセットアップ
難易度:★☆☆☆☆
注意
最新Raspberry Pi OS bullseye での構築例を紹介します。
ラズパイ初期セットアップの詳細は、上記記事を参照してください。
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のメッセージログファイルをフルパスで指定します。 デフォルト値のパス /var/log/motion/motion.log はラズパイ初期インストールで存在しません。変更が必要。(または/var/log/motionディレクトリを作成) |
target_dir /tmp |
Motionが動体検知した時に保存する、画像および動画ファイル出力先ディレクトリをフル パスで指定します。ラズパイのmicro SDカードへの書き込みはSDカードの寿命を縮めることになるので避けましょう。/tmp等のRAMDISK、またはNFS等の指定を推奨。容量にも注意。 |
ビデオ関連オプション
オプション | 説明 |
videodevice /dev/video0 |
使用するビデオデバイスを指定します。 |
norm 1 |
テレビ放送方式を指定します。日本の規格は1 (NTSC)です。テレビチューナーを扱う時に指定。USBカメラではどれを指定してもログにエラーが出ます。(意味ないと思いつつ 1 を指定) |
v4l2_palette 8 |
使用するカメラが対応している動画形式を指定します。USBカメラでは「MJPG, YUYV」あたりはサポートしていると思います。選択によってかなりの性能影響があります。 |
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も変更させる必要があるので注意。 |
locate_motion_mode on |
動体検知した場所を表示するかどうかを指定します。 |
locate_motion_style redbox |
動体検知した場所をどのように表示するか指定します。 |
動体検知(Mask)に関連するオプション
オプション | 説明 |
mask_file | マスキング pgm ファイルをフルパスで指定します。動きを検出したくない領域 (風に揺れる木や敷地外の通り過ぎる車など)がある場合に使用しましょう。 検出したい領域を白、無視したい領域を黒 にした画像を用意します。マスキングする領域はカメラで撮影した画像と同じサイズ (高さと幅のピクセル数) にしましょう。 |
Mask関連はMotionを使う上で誤検知防止に重要なオプションなので詳細に説明します。監視カメラで撮影するスポットを以下の図で説明します。
雲、鳥、ビルの映りこみ、草木の揺れ等、動体検知したくない場所があると思います。これらをマスク(Mask)ファイルにて除外しましょう。まずは監視カメラの撮影サイズ(height, width)と同じ画像サイズを用意します。以下のようにマスク(Mask)画像を作成します。
- 黒塗りつぶし部分: 動体検知してほしく場所
- 白塗りつぶし部分: 動体検知してほしい場所
上記はイメージ図なので、実際には下記のような白・黒の2色の画像ファイルになります。このファイルをmask_fileオプションにて指定すれば、黒塗りつぶし部分に変化があっても動体検知から無視されるようになります。
PGMファイルとは?
PGM(Portable Gray Map)ファイルはグレースケール(白黒)の画像形式です。PGM画像ファイルの各ピクセルに含まれるのは、1または2バイト(8ビットまたは16ビット)の情報のみです。現在、あまり使われていないと思います。
PGM形式ファイルなんて聞いたことないわ
そんなファイル作れねーよ!ムキー!
PGMはPhotoshopなどで出力できます。
白・黒のJPEGファイル作ってからPGM形式に変換しましょう。
画像変換ツールはフリーソフトなどもいろいろあります。また、ネットで「JPEG PGM 変換」で検索するとオンラインのブラウザで変換できるものも出てきますのでご参考まで。(Photoshopなどお持ちでない方でもPGMファイル作れます)
Motionのストリーム動画確認
起動後、同一ネットワーク内のマシンからブラウザでストリーム動画を見てみましょう。ブラウザから下記URLでMotionにアクセスしてみましょう。
http://raspberrypi.local:8081 ※ホスト名は環境に合わせて変更して下さい
動体検知後の処理として「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処理を実行させたい方は、下記記事も参考にしてみてください。