• linux下的开源移动图像监测程序--motion编译与配置


    前几天在网上偶然看到一篇博客,是利用linux下的开源的motion搭建嵌入式视频动态监控系统,感觉很好很强大于,是就想自己编译移植一下试试。

    所谓移动图像监测,简单来说就是利用摄像头定点监测某个区域,当有移动物体经过时,摄像头便自动抓拍(要监测多大物体、按拍照速率都是可调的),并把拍到的图像存储在指定目录,实现无人监控功能。

    motion 是一套免费开源的移动图像监测程序(详见http://www.lavrsen.dk/foswiki/bin/view/Motion

    先去下载源代码:https://github.com/sackmotion/motion

    以下操作都是在虚拟机fedora 10 里面操作的。

    解压源码,进入到目录里面运行  

    ./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像素值

    然后就可以运行motion了

    ./motion

    在摄像头前面移动,motion就会监测到物体移动,然后将捕捉到的图像保存到指定的目录下面

    我的测试效果图(移动的手被矩形框起来了)

    这样编译成的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 

    可以在电脑的浏览器上打开server的IP地址,也就是linux的ip地址,例如我的是

    192.168.1.100:8080 (这个地址是motion的配置页面,里面有很多motion的配置选项)

    192.168.1.100:8081 (这个是motion的网络监控地址)

    motion还有很多功能,比如:

    on_event_start /root/detected  #当该事件产生时执行detected脚本,该脚本是简单的可执行shell脚本,下同

    on_event_end /root/end  #当该事件产生时执行end脚本

    gap 5 #设置,在探测到运动后,多长时间没有运动的话就触发运动结束指令on_event_end。

    还可以设置报警等功能。

    如果把这个移植到开发板上,然后弄上个usb的摄像头,就可以实现实时视频监控或者移动图像的监控了,想象一下应该是一个不错的东西哈!

  • 相关阅读:
    集训第五周动态规划 G题 回文串
    集训第五周动态规划 F题 最大子矩阵和
    集训第五周动态规划 E题 LIS
    集训第五周动态规划 D题 LCS
    集训第五周动态规划 C题 编辑距离
    集训第五周 动态规划 B题LIS
    集训第五周 动态规划 最大子段和
    防线问题
    P2486 [SDOI2011]染色
    P2146 [NOI2015]软件包管理器
  • 原文地址:https://www.cnblogs.com/LxwEmbedded/p/4208683.html
Copyright © 2020-2023  润新知