當有移動物體經過時,攝像頭便自動抓拍並把拍到的圖像存儲在指定目錄,實現無人監控功能。
motion 是一套免費開源的移動圖像監測程序(詳見http://www.lavrsen.dk/foswiki/bin/view/Motion)
源代碼:https://github.com/xiaobo-linux/motion
解壓源碼,進入到目錄里面運行
./configure --prefix=/${PWD}/_install / ( 自定義安裝目錄,我是直接安裝源碼下)
然后運行
mkdir _install
make
make install
cd _install
cp etc/motion-dist.conf etc/motion.conf
編輯配置文件:
vi etc/motion.conf(里面的具體配置意義可以看它的注釋,或者見http://www.lavrsen.dk/foswiki/bin/view/Motion/ConfigFileOptions)
關鍵的幾點配置:
daemon off #關掉deamon模式
locate_motion_mode on #探測到圖像中有運動時,把運動區域用矩形框起來
videodevice /dev/video0 #加載USB攝像頭的設備(對應自己的攝像頭設備)
width 640 #圖像寬度
height 480 #圖像高度
target_dir /root/motion #設置拍攝圖片的存儲目錄
threshold 3000 #這個是改變探測靈敏度,越小越靈敏,這里設為3000像素值
8081端口登錄,需要輸入用戶和密碼進行用戶登錄驗證:
# Authentication for the stream. Syntax username:password
# Default: not defined (Disabled)
stream_authentication username:passwd
192.168.1.100:8080 (motion的配置頁面,里面有很多motion的配置選項)
192.168.1.100:8081 (motion的網絡監控地址)
如果使用外網的話,stream_loacalhost off
然后就可以運行motion了
./motion
在攝像頭前面移動,motion就會監測到物體移動,然后將捕捉到的圖像保存到指定的目錄下面
配置多個攝像頭的方法是:
把motion 可執行文件跟要控制的攝像頭的配置文件 motion.conf 放在一塊
motion + motion.conf 放在一起;
多個攝像頭的話, 把 motion + motion.conf 放在別的文件夾內執行,motion.conf只需配置video編號跟瀏覽器查看攝像頭的端口號
執行 ./moion 即可。
這樣編譯成的motion是沒有視頻編碼功能的,要想將監控程序保存成視頻文件,還要進行下面的更改。
重新配置motion之前還要先做好FFmpeg的編譯准備工作。
先去下載FFmpeg
https://github.com/dwbuiten/FFmpeg
解壓進入FFmpeg的目錄,運行:
./configure --enable-memalign-hack --disable-debug --prefix=/${PWD}/_install / (自定義安裝目錄,我是直接安裝源碼下)
(FFmpeg的編譯詳細參數參考http://www.cnblogs.com/ohmytime/archive/2013/05/12/ffmpeg-build-help.html)
在配置的時候會提示找不到yasm的錯誤(我的fedora 10是這樣的,具體錯誤原因記不住了。。。)
去下載一個編譯安裝就好了:https://github.com/yasm/yasm
(安裝方法:解壓進入yasm,運行./autogen.sh 然后make && make install即可)
再執行
make
make install
進入到 _install目錄下可以看到生成的庫文件以及可執行文件。可以測試一下_install/bin目錄下的ffplay 播放器
ffplay /home/test.mp4(視頻文件為自己指定的文件)
如果成功播放視頻則表示FFmpeg庫編譯成功。接下來的工作會用到這個_install目錄
進入到motion目錄執行:
make distclean
/configure --prefix=/${PWD}/_install / --with-ffmpeg=FFmpeg/_install/ (這個就是剛才編譯的庫文件的目錄)
make
在這一步會遇到一個錯:/FFmpeg-master/libavformat/matroskadec.c:1173: undefined reference to `BZ2_bzDecompressInit'
解決辦法是修改Makefile的第35行:
LIBS = -lm -lpthread -lSDL -lpthread -ljpeg -L/home/qin/FFmpeg-master/_install/lib -lavformat -lavcodec -lavutil -lm -lz -lsqlite3 -lbz2
(最后的紅色字體部分是新加上的)
重新make即可
make && make install
安裝成功后保證motion.conf配置文件正確的情況下運行motion:
./motion
motion還有很多功能,比如:
on_event_start /root/detected #當該事件產生時執行detected腳本,該腳本是簡單的可執行shell腳本,下同
on_event_end /root/end #當該事件產生時執行end腳本
gap 5 #設置,在探測到運動后,多長時間沒有運動的話就觸發運動結束指令on_event_end。
還可以設置報警等功能。
如果把這個移植到開發板上,然后弄上個usb的攝像頭,就可以實現實時視頻監控或者移動圖像的監控了.
選項 | Range/Values Default | 說明 |
---|---|---|
auto_brightness | Values: on,off Default: off |
讓motion自動調節視頻的的亮度,只適用於不帶有自動亮度調節的攝像機 |
brightness | Values: 0-255 Default: 0 (disabled) |
調整攝像機的亮度 |
saturation | Values: 0 - 255 Default: 0 (disabled) |
調整攝像機的顏色飽和度 |
hue | Values: 0 - 255 Default: 0 (disabled) |
調整攝像機的色調 |
contrast | Values: 0-255 Default: 0 (disabled) |
調整攝像機的對比度 |
daemon | Values: on,off Default: off |
以守護進程在后台運行。這個選項只能放在motion.conf,不能放在 thread config file |
emulate_motion | Values: on, off Default: off |
即使沒有運動物體也要保存圖像 |
ffmpeg_output_movies | Values: on, off Default: off | 是否保存視頻 |
ffmpeg_bps | Values: 0 - 9999999 Default: 400000 |
視頻比特率 |
ffmpeg_variable_bitrate | Values: 0, 2 - 31 Default: 0 (disabled) |
動態比特率,如果開啟這個功能ffmpeg_bps將被忽略,0為關閉,2為最好質量,31為最差質量 |
ffmpeg_duplicate_frames | Values: on, off Default: on |
為了達到每秒的幀數要求,會復制一下幀填充空白時間,關掉這個功能后每個幀都緊接下一個幀,看起來像快進 |
ffmpeg_output_debug_movies | Values: on, off Default: off |
調試模式,只看到變化的圖像 |
ffmpeg_video_codec | Values: mpeg4, msmpeg4, swf, flv, ffv1, mov, ogg, mp4, mkv, hevc Default: mpeg4 |
視頻格式 |
framerate | Values: 2 - 100 Default: 100 (no limit) |
幀速率,每秒多少幀 |
frequency | Values: 0 - 999999 Default: 0 (Not set) |
頻率協調 Hz,(不清楚作用) |
lightswitch | Values: 0 - 100 Default: 0 (disabled) |
忽略光照強度改變引起的變化 |
locate_motion_mode | Values: on, off, preview Default: off |
給運動物體用方框標出 |
locate_motion_style | Values: box, redbox, cross, redcross Default: box |
標記風格 |
max_movie_time | Values: 0 (infinite) - 2147483647 Default: 3600 |
最大視頻時間 |
minimum_frame_time | Values: 0 - 2147483647 Default: 0 |
最小幀間隔,設置為0表示采用攝像頭的幀率 |
minimum_motion_frames | Values: 1 - 1000s Default: 1 |
捕捉持續至少指定時間的運動幀 |
movie_filename | Values: Max 4095 characters Default: %v-%Y%m%d%H%M%S |
視頻的文件名 |
ffmpeg_timelapse | Values: 0-2147483647 Default: 0 (disabled) |
間隔時間,拍攝延時視頻 |
ffmpeg_timelapse_mode | Values: hourly, daily, weekly-sunday, weekly-monday, monthly, manual Default: daily |
延時拍攝模式 |
timelapse_filename | Values: Max 4095 characters Default: %v-%Y%m%d-timelapse |
延時拍攝的文件名 |
output_pictures | Values: on,off,first,best,center Default: on |
是否保存圖片和模式設置 |
output_debug_pictures | Values: on,off Default: off |
圖片調試模式,只輸出運動物體 |
picture_filename | Values: Max 4095 characters Default: %v-%Y%m%d%H%M%S-%q |
圖片文件名 |
picture_type | Values: jpeg,ppm Default: jpeg |
圖片類型 |
post_capture | Values: 0 - 2147483647 Default: 0 (disabled) |
運動在持續多少幀之后才被捕捉 |
pre_capture | Values: 0 - 100s Default: 0 (disabled) |
輸出圖像包括捕捉到運動的前幾秒 |
quality | Values: 1 - 100 Default: 75 |
jpg圖像的質量 |
quiet | Values: on, off Default: off |
安靜模式,檢測到運動不輸出嗶 |
rotate | Values: 0, 90, 180, 270 Default: 0 (not rotated) |
旋轉圖像角度 |
stream_auth_method | Values: 0,1,2 Default: 0 |
網頁監控身份認證方法:0-無,1-基本,2-MD5 |
stream_authentication | Values: username:password Default: Not defined |
網頁監控用戶名和密碼 |
stream_limit | Values: 0 - 2147483647 Default: 0 (unlimited) |
限制幀的數量 |
stream_localhost | Values: on, off Default: on |
是否只能本地訪問網絡攝像頭 |
stream_maxrate | Values: 1 - 100 Default: 1 |
限制網絡攝像頭幀速率 |
stream_port | Values: 0 - 65535 Default: 0 (disabled) |
網絡攝像頭端口 |
stream_quality | Values: 1 - 100 Default: 50 |
網絡攝像頭傳輸質量 |
switchfilter | Values: on, off Default: off |
過濾器開關,過濾器用來區分真正的運動和噪聲 |
target_dir | Values: Max 4095 characters Default: Not defined = current working directory |
視頻和圖片的保存路徑 |
videodevice | Values: Max 4095 characters Default: /dev/video0 |
攝像頭設備名 |
height | Values: Device Dependent Default: 288 |
圖像高度,范圍跟攝像機相關 |
width | Values: Device Dependent Default: 352 |
圖像寬度,范圍跟攝像機相關 |
process_id_file | Values: Max 4095 characters Default: Not defined |
保存PID的文件,推薦/var/run/motion.pid |
database_busy_timeout | Values: 0 .. positive integer Default: 0 |
數據庫等待超時時間,毫秒 |