使用motion实现摄像头自动拍照上传

之前写过一篇文章介绍openwrt路由器使用mjpeg-streamer实现摄像头监控,虽然实现上比较简单,效果也不错,但是有个缺点——你得一直看着那个页面,无法做到出现异常情况自动报警的功能。本文介绍另一个软件,能够实现当摄像头中的视频内容有变化时,自动拍照保存。有了这个功能,后面的自动上传/发送邮件/短信之类的也就成为可能。另外在此再次说明:这东西只适合喜欢折腾,知道怎么找资料,并且对Linux较熟悉的人使用。

一、准备条件
基本的硬件条件如前篇博文,在此不表。这次用到的软件叫motion,同样在0909版固件里有。

二、配置motion
之前的mjpeg-streamer没什么要配置的,参数直接写在命令行里就行;这次motion恰恰相反,配置文件大小有几十K。motion配置文件的位置一般是在/etc/motion.conf。
因为选项比较多,下面只写出一些比较重要的选项的值,其他可以用默认值,或者参考motion官网上的documents,那里面写得很详尽,每个参数的解释都有。motion.conf里自带的注释也很完整。

daemon on
process_id_file /var/run/motion.pid
setup_mode off
#如摄像头不支持MJPEG,就只能设成其他的,如6 (YUYV):
v4l2_palette 2
#640 x 480 已满足基本需要,太大则占用路由器CPU/带宽:
width 640
height 480
#单做自动监控拍照,帧率没必要太高,否则输出的文件很多:
framerate 2
auto_brightness off
contrast 0
#这个重要,是多少个像素发生改变的时候,保存当前照片。
#640 x 480 的图片,3000已经非常灵敏了:
threshold 3000
#下面这个是指定照片保存的文件夹:
target_dir /root/camimg
quiet on
#下面这句是说一旦有照片被拍下来,则执行/root/upload.sh命令,
#其中%f参数会自动转化为当前图片文件的路径,传给upload.sh:
on_picture_save /root/upload.sh %f

三、制作自动上传脚本
下面就要制作上文提到的/root/upload.sh文件了。文件内容如下:

#!/bin/ash
curl -T $1 -u name:password ftp://12.34.56.78/uploads/

很简单,ash是openwrt的shell,这行不用改;第二行是利用curl工具,将图片文件上传到你的FTP里,然后就想干什么干什么啦!
注意:还需要用下面的命令使其可执行:

chmod a+x /root/upload.sh

四、启动motion
说了这么多,该启动motion,测试实际效果了。运行如下命令启动:

motion -c /etc/motion.conf

视实际情况,也可能你的是”motion -c /etc/config/motion”。 总之-c参数指向你的配置文件。
启动好以后,就可以测试了,试试在摄像头前挥挥手臂,然后检查一下你的路由器相应目录里,以及FTP里有没有新生成的jpg文件吧!

如有问题和建议,欢迎留言探讨!
注意:本博客文章皆为原创,转载请注明出处链接,谢谢合作!

本文为悠然居(https://wordpress.youran.me/)的原创文章,转载请注明出处!

6 thoughts on “使用motion实现摄像头自动拍照上传”

  1. 你好,我也有个HG255d 刷的也是0909 固件,但是 motion 不知道去哪里下载,想想你请教 我的Q 是 1017938096 谢谢

    Sogou Explorer Sogou Explorer Windows 7 Windows 7
  2. 請問我在樹梅派處理完的影像可以利用motion 上傳至區網嗎? 如果可以請問該怎麼傳上去

    Google Chrome 78.0.3904.97 Google Chrome 78.0.3904.97 Windows 10 x64 Edition Windows 10 x64 Edition
    1. 快7年前的文章了呵呵,现在不知道motion有没有变化。上传就是用ftp,参考文章里“三、制作自动上传脚本”这部分,写个脚本。

      Google Chrome 78.0.3904.97 Google Chrome 78.0.3904.97 Windows 10 x64 Edition Windows 10 x64 Edition

Leave a Reply

Your email address will not be published. Required fields are marked *