motionのオプションについて

Raspberry Pi 3 Model B
OS: Raspbian Stretch lite March 2018
Logicool HD Webcam C270

motionには大変多くのオプションが用意されているのでちょっと戸惑う。調べたものを備忘録として記載し折に触れて参照するものである。なお設定確認のために頻回の起動と停止を繰り返すと、突如motionが機嫌を損ね正常に動作しないことがあった。また設定ファイルのコメントにデフォルト値が記載されていたが、実際と異なることが屡々あった。そういう事もあろうとおもう。

図1. motionが機嫌を損ねた様子
オプション内容
daemonデーモンとして起動するかどうかをonかoffで指定。デフォルトではoff。
setup_modemotionをセットアップモードで起動。ライブストーリムの動画は変化があったピクセルが黒白や青で表示されてるようになり、何も知らぬ人が見れば故障したと思う。ライブストリームを見ながらノイズレベルの調整をしたり斑点状ノイズの除去の様子を確認しながら、動体を検知したと認める閾値を自ら定める場合に使うようである。
v4l2_paletteカラーフォーマットと言われるものを指定。デフォルトは17でこれはYUV420を示している。ウェブカメラがサポートしていないフォーマットを指定していてもmotionが勝手に対応フォーマットを探して選択してくれるのでまことにゆき届いているとおもう。なおログを確認してみるとC270はYUYVかMJPGをサポートしている事がわかるので8か15を選択すればよいようである。
input1つ以上の入力を持つキャプチャカードの数を記載するようである。USBカメラを接続しているなら-1を選択する。デフォルトも-1。
power_line_frequency電源周波数に併せて指定する設定であるが通常はデフォルトのままでよいようである。電源周波数に繊細なウェブカメラで画像が安定しない場合に試すのが良さそうである。
rotate画像の回転角度を0、90、180、270度から選択。デフォルトは0。0度以外を選択すると回転させる手数がかかるためかCPUの負荷がいくらか大きくなるようである。此れ以外の角度を指定すると「rotate_init: Config option “rotate” not a multiple of 90:」という風にエラーメッセージが記録され0度を指定したものとして扱われた。
width画像の横幅をpixelで指定。デフォルトは352と設定ファイルのコメントには書いてあるけれども設定値は320であった。8の倍数でなければ「vid_v4lx_start: config image width (~) is not modulo 8」という具合にエラーが記録される上、motionが起動しなかった。C270は720pをサポートしているので1280を指定したがheightを240のままにしていたところ、形が歪に過ぎるのか「v4l2_do_set_pix_format: Adjusting resolution from 1280×240 to 544×288.」という具合に解像度が勝手に調節されるようである。
height画像の縦幅をpixelで指定。デフォルトは288と設定ファイルのコメントには書いてあるけれども設定値は240であった。やはり8の倍数でなければならない。720pをサポートするC270だから720を指定すると大変大きく画面に写し出すことができた。
framerate動体を検知した時に画像をキャプチャするフレームレートの最大値を指定するようである。取りうる値は2~100で、100を指定すると実質的に上限を撤廃することと同様という。設定ファイルのコメントではデフォルト100との記載であったが設定値は2であった。数値を大きくすればCPUの負荷も上がるということである。C270ではwidth x heightが1280×720の場合は高々5fps程度であったけれども640×360にすると14fps前後まで改善したので、解像度も影響するような情勢である。
auto_brightness輝度を自動で設定するか否かを決める。選択肢はonかoffである。C270ではonにするとログに「v4l2_set_control: setting control “Brightness” to 253 (ret -1 Input/output error)」といった具合のメッセージがひっきりなしにあらわれるから懸命に輝度をセットしようとしているフシがあるけれども恐らく効果がないようである。
brightness輝度を0~255で指定。デフォルトは0で、これはmotion側で輝度をセットしないということである。なおC270では0以外の数値をセットしても「v4l2_set_control: setting control “brightness” to 2 (ret -1 Input/output error)」のようなメッセージがログに記録されるばかりで写し出される映像の様子に特段の変化は無いようであった。contrast(コントラスト)やsaturation(彩度)、hue(色相)の設定についても同様であった。
threshold閾値である。この数値を超えると動体を検知したとみなす。変化があったピクセルの数を閾値として指定する。デフォルトは1500。ノイズの処理が関係しているようなので単純に現フレームと一つ前のフレームを比較して変化があったピクセル数がカウントされるというわけではないようである。
pre_capture動体検知が始まる前の画像をどれだけバッファしておくか指定する。取扱説明書を見ると0~100秒で指定するように見えるけれども、作成された動画をコマ送りにして確認してみるとどうもフレーム数ではないかという疑いがある。デフォルトは0。0は一つもバッファしないのと同じことである。あまり大きな数値を指定するとフレームがスキップされたり動画の滑らかさが失われるため0~5程度に収めておくのがよいとあるけれども0~5秒という意味合いであれば指定する値はframerateの数値だけ乗ずるのがよさそうである。
post_capture動体の検知が完了してから何フレーム余分にキャプチャするか指定する。デフォルトは0。1~5秒程度になるようフレーム数を設定するのがおすすめであるという。
event_gapこの設定は要すれば動体検知が収まってからevent_gap秒以内にまた動体を検知したらそれは一つの動画にまとめられるというようなことであると思う。event_gap秒を超えれば別イベントとして捉えられ記録動画も新たに別ファイルとして生成されるような風情であった。デフォルトは60。
max_movie_time動画の最大記録秒数を指定。デフォルトは0でこれは上限を設けないことを意味する。無闇に1などを設定すると1秒の細切れ動画が山ほどできあがるので本当に不毛であった。
output_pictures動体を検知した際、画像をどういう具合に出力するか指定。on、off、first、bestから選択できる。onは動体を検知した際の画像を全部出力する。offはまったく画像を出力しない。firstは動体を検知した一番最初のフレームのみ保存する。bestは動体検知イベント中でもっともピクセル数に変化が見られた場面を出力する。デフォルトではonだから放って置くとどんどんストレージを占拠してゆくおそれがある。
output_debug_pictures変化が見られたピクセルがどこであったのかを黒白青赤で示す画像を出力する。上は通常の出力画像、下がこの設定で出力される画像。元の画像がわかっているとデバッグ画像もなんとなく意味を持って見えてくるようになるので妙なものである。

quality画質の設定。デフォルトは75。1~100の間から指定する。100はほとんど圧縮がかからないので画質はよいけれどもファイルサイズが大きく、数値が小さくなると圧縮が強くなってゆき画質も劣化してゆく。なお設定を1にした時の映像はこういう有様であった。目を細めて遠くから見るとちょっと画質が上がったように錯覚するので妙なものである。
picture_type出力する画像のフォーマットを指定。jpegとppmから選択する。デフォルトはjpeg。ppm(portable pixmap format)はファイルサイズが大きいのでストレージの膨らみ具合には気を使う必要がある模様である。
ffmpeg_output_movies動体を検知した際に動画を作成するか否かをonかoffで指定。デフォルトではoffとの記載であったが設定ファイルはonであった。
ffmpeg_bps動画のビットレートを指定する。0から9999999の間で指定し、デフォルトは400000。ffmpeg_variable_bitrateが有効になっている場合はこの設定は無視されるという。
ffmpeg_variable_bitrate可変ビットレートで動画をエンコードするよう設定する。0~100で指定し、デフォルトは0。0は可変ビットレートでのエンコードを無効にする。数値が大きいほど画質は高くなってゆく。
locate_motion_mode検知した動体は此の箇所であるぞと表明する枠を表示する設定。on、off、previewから選択し、デフォルトではoff。previewでは画像にのみ枠を表示し、動画には表示しない。枠が表示されると途端に近未来的な風情がして好きである。
locate_motion_style検知した動体は此れであるぞと示す枠のスタイルを設定。box、redbox、cross、redcrossから選択し、デフォルトではbox。boxは白枠、redboxは赤枠、crossは白十字、redcrossは赤十字である。locate_motion_modeが有効でないと意味をなさない。crossを選択するとこういう具合である。
text_right画面の右下に表示する文字列を設定。変換指定子の一覧を参考にしつつ装飾してゆくとよさそうである。デフォルトでは%Y-%m-%d\n%T-%qである。それぞれ年-月-日、改行、時刻-フレーム番号、を示している。文字列を表示させない為にはtext_rightとだけ記述すればよかった。日本語を含むとSegmentation faultが発生してMotionが起動しない。
text_left画面の左下に表示する文字列を設定。text_rightとおおむね同じことであるが設定していないと文字列は表示されない点が異なる。やはり日本語を含むといけない。使用できない変換指定子があったのでこれはmotionのバージョンによる問題であるかもしれない。
text_changes変化のあったピクセル数を画面の右上に表示する。
text_doubleテキストのサイズを通常の二倍に拡大するならonにする。デフォルトではoff。もともとが大変細かい文字なので大きく表示されるのはまことにありがたい。
target_dir画像と動画を保存するディレクトリを指定。指定しないとカレントディレクトリになる。デフォルトでは/var/lib/motionが記載されていた。
picture_filename画像ファイルの名前を指定。デフォルトではイベント番号-年月日時刻-フレーム番号となる。
movie_filename動画フィアルの名前を指定。デフォルトではイベント番号-年月日時刻となる。
stream_portライブストリームの待受ポート番号。デフォルトでは8081が指定されていた。
stream_qualityライブストリームの画質。デフォルトは50。1~100の間から選択し、数値が大きくなるほど画質はよくなる。
stream_motion動きのないうちはフレームレートを1にし、動体を検知したらフレームレートを増すようにする設定。フレームレートはstream_maxrateで指定した値まで増す。ネットワーク帯域の無駄遣いが許されない環境では帯域の節約に貢献するとおもう。
stream_localhostライブストリームへのアクセスをローカルホストからのみに制限する。デフォルトではon。誰もが見られるようにするならoffを指定する。
stream_auth_methodライブストリームへのアクセスに認証を必要とする設定。0は無効、1はBasic認証、2はDigest認証。デフォルトでは無効。特段の理由がなければ認証を要するように誂えるのがよさそうである。
stream_authentication認証に使うユーザ名とパスワードを指定。ユーザ名:パスワード といった形式で記載する。
stream_preview_scaleMotionのウェブ設定画面に表示するライブストリーム映像の大きさを指定する。単位は取扱説明書に記載されていないけれどもHTMLソースにあるimgタグのwidth属性を見ると%単位であったのでそういうことであろう。デフォルトでは25なので1/4サイズで表示される。
webcontrol_portブラウザからMotionの設定を可能にするならポート番号を記載してwebcontrol_authenticationもセットする。デフォルトは0で無効ということであるがすでに8080とセットされていた。
webcontrol_localhostMotion設定画面へのアクセスをlocalhostのみに制限するならon。デフォルトでonになっていた。制限を外すならoffにする。
webcontrol_authenticationウェブ設定画面へのアクセスに認証を要するようにする設定。ユーザ名:パスワード のフォーマットで記載する。stream_auth_methodのときと違いメソッドはBasic認証のみであるようである。ウェブ設定画面を有効にするのであればホントにホントにホントにホントに設定すべきであるという富士サファリパークみたような風情で取扱説明書に記載がある。

if you are enabling the webcontrol feature of Motion, you really really really … should enable security authentications. No. Seriously. You really should.

ここまでの設定を組み合わせて概ね満足行く形の動体検知がこなされるようになった。

図2. 満足いく動体検知の設定

「motionのオプションについて」への2件のフィードバック

  1. 素晴らしい。このページ滅茶苦茶助かってます。
    うちはふっるいLogicool Webcam C300を使っていますが、auto_brightnessで一応輝度が変化してくれるようです。夜に一人眠るおっさんを明るく映したところで何の意味もないですが、ペットとか飼っている人は役に立つのではないかと。

    返信
  2. 記事に対するコメントじゃないですが・・・

    [C270]と[C270n]って何か違うのかな
    C270nだと解像度やその辺の設定を変えても
    motionで反応してくれない・・・・
    /dev には出てくる・・・・・

    motionの新しいやつ入れないとダメかな・・・

    CENTOS6 2.6.32-754.35.1.el6.x86_64
    Motion 3.2.12

    ラズパイ余ってるから私もこれにmotion入れてテストしてみようかな(このサイトみて

    返信

コメントする

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください