同学,你是不是和我一样遇到过下列情况
- 好想摸鱼啊,但是不想被老板发现
摸鱼的时候如果能有个人帮忙照看周围环境,发现异常就报警该多好,不然被发现了太尴尬= = - 弄了个监控,天天看静止画面玩?
监控全天24小时工作,回看的时候大部分都是静止画面,太无趣了。有些监控可以设置移动侦测,平时不工作,只在检测到有物体移动的时候才录制视频,但是好像没什么可玩性? - 好不容易把监控映射到公网,看直播太卡了
把摄像机的画面映射到了公网,这样就可以远程查看。无奈视频流占用流量太大,小水管禁不住,画面比PPT还卡。
所以,我就开始造轮子了
代码已开源 -> https://github.com/def-fun/rtm2/
欢迎提(脑)意(洞)见
要搞一个实时移动侦测,在我看来,主要需要这些:
1. 画面拾取
即一个摄像头。
摄像头可以用笔记本自带的,也可以用树莓派+扩展,或者插个免驱的USB摄像头,不想花钱买硬件的话,用有动作的视频文件作为输入也行🙃。
我很认真准备的插图.jpg
2. 移动判定
一个能够判断画面变化的程序。简单来说,就是在相机固定的情况下,比较画面与画面之间的区别,如果发现区别,就表明有东西移动了。
然而实际中,因为噪音、光线变化等原因,每个画面之间总是有细微的差别,所以不能简单的把画面保存为jpg等图片、再比较文件的大小、hash值等方法判断是否发生变化。
这时候openCV就派上用场了。采集帧,高斯模糊,二值化,轮廓检测,判断面积是否超过阈值,用python写只有几十行代码。这样的程序有很多,Ctrl+C/V很快就能看到效果。比如,
OpenCV3-Python简单移动目标跟踪
Motion Detection using OpenCV in Python
3. 存储与展示
拍摄的画面存储为jpg图片或者视频,并且以适当的方式展示。
如果只在本机运行,使用openCV自带的cv2.imshow()
就能看到实时画面。但是如果要远程观看,则必须借助network了。
比如imageZMQ,优点是分布式、实时,但是要用ZMQ协议,无法在浏览器上展示。
to be continue.
网友评论