ubuntu12.04を使った監視カメラシステムは動体検出された時に動画に変換してメールで送信できるようにした。VLC PlayerをインストールしてWebカメラが使えるかを確認した。
メディアを開く、キャプチャーデバイスダブのビデオデバイス名に/dev/video0が選択できればWebカメラは認識されています。再生をクリックするとカメラのストリーミング画像が表示されます。
1.動作検出をサポートした V4L キャプチャプログラムをインストールする。
rootのターミナルでapt-get install motion
ユーザーのターミナルでmotionを実行するとhomeフォルダに動体監視したデータを書き出します。rootのターミナルで実行すると/tmp/motionにデータを書き出しますが最後にまとめですべて設定します。
2.検出時に作成した動画ファイルをメールで送るためmuttとGmailを使ってメール送信できるようにします。
rootのターミナルでapt-get mutt
※パッケージの設定画面で了解を選んで、メール設定の一般形式では設定なしを選び了解します。
/path/toフォルダを作成してこの中にmutt.confを作成します。このファイルにGmailを使ってメール送信するための最低限の設定を書きます。内容は以下のとおりです。
set charset=”utf-8″
set send_charset=”us-ascii:iso-2022-jp”
set from = “webcam用アカウント@gmail.com”
set realname = “氏名”
set smtp_url = “smtp://webcam用アカウント@smtp.gmail.com:587/”
set smtp_pass = “webcam用アカウントのパスワード”
準備ができたら次のコマンドで動作を確認します。
$ echo “Hello world” | mutt -F /path/to/mutt.conf -s “件名” 宛先@gmail.com
同じフォルダにmotionから呼び出すシェル(movie_end.sh)を次のような内容で用意します。
#!/bin/sh
AVI_PATH=$1
AVI_DIR=`dirname $AVI_PATH`
MP4_NAME=”MOTION-`date +’%Y%m%d-%H%M%S’`.mp4″
MP4_PATH=$AVI_DIR/$MP4_NAME
EMAIL_TO=通知・送信先@gmail.com
EMAIL_SUB=”監視カメラ”
EMAIL_BODY=”動体を検知しました”
MUTT_CONF=/path/to/mutt.conf
# convert to mp4
ffmpeg -i $AVI_PATH -f mp4 -s 320×240 -vcodec mpeg4 -b 3000k -acodec aac -ab 128k $MP4_PATH > /dev/null 2>&1
if [ $? -eq 0 ]; then
# send email by mutt & gmail
echo $EMAIL_BODY | mutt -F $MUTT_CONF -s $EMAIL_SUB -a $MP4_PATH — $EMAIL_TO
if [ $? -eq 0 ]; then
# clean up old motion files (over 60 minnutes)
find $AVI_DIR -type f -mmin +60 | xargs rm -rf
fi
fi
motion自体から動画ファイルのパスを取得できるので、引数($1)として取得し、avi形式のファイルをmp4に変換後、muttでメール送信しています。
motionの設定 /etc/motion/motion.conf編集します。
①フレームレートの設定
1秒間に撮影するフレーム数を変更します。標準では2ですが、ここでは30fpsに変更します。
# Maximum number of frames to be captured per second.
# Valid range: 2-100. Default: 100 (almost no limit).
framerate 30
②イメージ・サイズ
width, heightでサイズを指定できます。
# Image width (pixels). Valid range: Camera dependent
width 320
# Image height (pixels). Valid range: Camera dependent
height 240
③動体検知しきい値
Motionは撮影した画像を比較し、変化したピクセル数を基準に動体検知します。この検知基準となるピクセル数、標準では1500ですが、300にして感度を上げます。
# Threshold for number of changed pixels in an image that
# triggers motion detection (default: 1500)
threshold 300
④ノーモーション検知しきい値
動体検知終了を判断する為にノーモーションの連続継続時間をgapとして設定します。
この値が大きいと、検知頻度は少くなりますが、生成される動画ファイルは大きくなります。逆に短いと生成される動画ファイルは小さくなりますが、検知頻度は多くなります。
標準では連続60秒ですが、今回はメールに動画ファイルを添付したいので10~30秒程度にします。
# Gap is the seconds of no motion detection that triggers the end of an event
# An event is defined as a series of motion images taken within a short timeframe.
# Recommended value is 60 seconds (Default). The value 0 is allowed and disables
# events causing all Motion to be written to one single mpeg file and no pre_capture.
gap 30
⑤コーデックの指定
ffmpeg_video_codecで動画ファイルのフォーマットを指定します。標準ではswfですが、今回はmpeg4(作成されるファイルはavi形式)に変更。
# Codec to used by ffmpeg for the video compression.
# Timelapse mpegs are always made in mpeg1 format independent from this option.
# Supported formats are: mpeg1 (ffmpeg-0.4.8 only), mpeg4 (default), and msmpeg4.
# mpeg1 – gives you files with extension .mpg
# mpeg4 or msmpeg4 – gives you files with extension .avi
# msmpeg4 is recommended for use with Windows Media Player because
# it requires no installation of codec on the Windows client.
# swf – gives you a flash film with extension .swf
# flv – gives you a flash video with extension .flv
# ffv1 – FF video codec 1 for Lossless Encoding ( experimental )
# mov – QuickTime ( testing )
ffmpeg_video_codec mpeg4
⑥録画終了イベント発生時のアクション実行(メール送信)
動体検知・録画終了した時点で呼び出す処理をvalue部分に設定します。この部分は後述。
# Command to be executed when a movie file (.mpg|.avi) is closed. (default: none)
# To give the filename as an argument to a command append it with %f
on_movie_end movie_end.sh とします。
⑦その他
#output_normal on
output_normal off画像ファイルを保存しない
#target_dir /tmp/motion
target_dir /var/www保存するディレクトリ
#webcam_quality 50
webcam_quality 100ライブ画像の画質
#webcam_localhost on
webcam_localhost offローカルホスト以外もライブ映像を配信
あとはターミナルからsodo motionまたはrootのターミナル上でmotionを実行する。