Skip to content

利用motion命令实现监控摄像及运动检测

六月 24, 2017

此为在linux(实际上是raspberry Pi了)下利用motion命令和摄像头实现监控摄像的简单方法,在此记录备用。至于为什么要实现监控摄像……也许你想要用来放在家里防盗,想要用来看孩子,或者想要拍摄你家阳台上的鸟窝,或者你仅仅是单纯的手里有个年久失修的摄像头没地方可用,这都没关系。因为——

We do what we must because we can.
GLaDOS

废话少说,当然要实现监控,首先要确保你的摄像头能在linux下面用,按照Y某的经验,只要你的摄像头有够年头(?)基本驱动多半会被kernel收录,都可以用。如果你是花了钱买的Raspberry Pi专用的那个摄像头,或者你在用你笔记本自带的摄像头的话自然更没问题。Y某手里的是一个很老的(连型号铭文都被磨掉了的)罗技USB型号,即插即用很方便,利用

lsusb

命令来看下的话,似乎是7年前的一个入门级型号。
Screenshot from 2017-06-23 15-32-05
想确认摄像头工作是不是正常的话最简单的办法就是试一下实时视频……如果你在用Debian(Raspberry Pi的默认系统)的话可以打开Cheese看看能不能看到图像。
如果摄像头本身驱动没有问题,那么离成功已经近了一半,因为安装motion(在debian下)也很简单……估计其他发行版也是一样的。在debianoid(Ubuntu/Linuxmint)下面只需要

apt-get install motion

就可以。至于怎样用? man motion (逃

安装完成后,默认motion命令的设置文件会在/etc/motion/motion.conf而默认的pid文件(大概)会放在/var/run/motion/,由于这两个地方都是系统路径,所以你需要用

sudo motion

才可以获得权限正常执行。默认打开motion之后,如果视野内的图像相对之前的图像有一定比例的变动,那么motion命令就会认为摄像头拍摄到了运动物体而开始录像,直到运动物体从视野中消失为止。


然而Y某人自己并不是很喜欢用root权限执行程序,个人一般会直接把设置文件和缓存目录都设置到home下面……

首先在家目录下面建立一个隐藏文件夹用来存放设置文件,之后把默认的设置文件拷贝进去:

mkdir ~/.motion/
cp /etc/motionmotion.conf ~/.motion/

之后只要编辑下这个motion.conf就可以改变初始设置了,设置文件大概应该是这个样子的:
Screenshot from 2017-06-23 15-52-20
典型的关键字段+值的普通设置文件,因为每个关键字段都有注释解释,所以其实没有太多必要说明,需要注意的仅仅是几个小地方:
# Start in daemon (background) mode and release terminal (default: off)
daemon on

是否以后台模式运行(如果要做“监控”的话自然应该以后台运行

# File to store the process ID, also called pid file. (default: not defined)
process_id_file /share/pi/homes/yuki-chan/.motion/motion.pid

设置PID的存储目录-就放在刚刚建立的设置目录好了

# Use a file to save logs messages, if not defined stderr and syslog is used. (default: not defined)
logfile /share/pi/homes/yuki-chan/.motion/motion.log

日志文件,同样放在刚刚建立的设置目录

# Videodevice to be used for capturing (default /dev/video0)
# for FreeBSD default is /dev/bktr0
videodevice /dev/video0

默认的使用的视频设备,注意一般而言对于笔记本电脑video0会是内置摄像头

# Codec to used by ffmpeg for the video compression.
ffmpeg_video_codec mpeg4

默认视频编码……选择flv的话会存成flash(惊

# Image width (pixels). Valid range: Camera dependent, default: 352
width 640
# Image height (pixels). Valid range: Camera dependent, default: 288
height 480

默认视频长宽……请选择你摄像头支持的格式

# Maximum number of frames to be captured per second.
# Valid range: 2-100. Default: 100 (almost no limit).
framerate 2

帧率,一般现代的摄像头都可以设到24帧以上,当然为了省硬盘可以设的很小

# Target base directory for pictures and films
# Recommended to use absolute path. (Default: current working directory)
target_dir /share/pi/homes/yuki-chan/Pictures/motion-detect
输出视频与抓拍图像的目录,请确保你对那个目录有写权限……

设置完成之后,你就可以在终端下运行motion命令……然后自己跑到摄像头前去晃晃看看效果,如果你的设置都没问题的话,你的输出目录下面就应该已经输出了包含你丑恶嘴脸的一些抓拍图片和视频文件,祝玩得愉快(?

需要注意的是,默认的运动检测会把任何画面变动都当作开始录像(光线变化之类的),有必要的话,可以微调下报警的参数,比如
threshold 1500
发生变化的像素数,如果有超过这个像素数的图像发生了变化,系统就会开始录像,自然这个值要根据你的摄像头的分辨率而定,自然这个值越小越灵敏,个人建议设置到1%以上,否则容易有很多虚警。。
lightswitch 20
忽略光线变化范围的比率,motion会忽略在这个面积范围以内的光线变化(比如太阳光在某个角度突然射进屋里)
minimum_motion_frames 2
忽略运动的帧数,让motion只有在连续几帧以上发现运动的时候才会开始录像
更多面向高级用户的设置可以看这里


说到运动检测的效果……下面拍下的每天凌晨到办公室来打扫卫生的大叔(因为从来没见过,我一直以为会是个大婶),为避免肖像权问题所以只放了背影(?

alonzo

You are being watched

额外的小提示……如果你在Raspberry Pi上使用摄像头的话请注意电源问题,因为一般的USB摄像头貌似都很费电,所以记得用一个供电电流足够大的AC输入电源(或者电池,如果你也想要把你的设备伪装成某种看起来人畜无害的东西的话)。

Advertisements
No comments yet

发表评论

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / 更改 )

Twitter picture

You are commenting using your Twitter account. Log Out / 更改 )

Facebook photo

You are commenting using your Facebook account. Log Out / 更改 )

Google+ photo

You are commenting using your Google+ account. Log Out / 更改 )

Connecting to %s

%d 博主赞过: