玩转Dragonboard 410c开发板USB摄像头——移动侦测
2016-10-26 17:01
375 查看
移动侦测是常见的智能化视频监控手段之一,其通过判断和识别移动物体然后进行拍照记录可以有效的降低处理器的计算处理量,只需要在有移动事件触发的时候才进行监控和录像,进而避免监控录制和拍摄大量的无用的照片信息。今天本篇blog就带大家用python语言来简单实现通过USB摄像头采集图像进行移动侦测,侦测到有移动物体后立即拍照保存。
![](http://img.blog.csdn.net/20161026165447150?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
首先还是搭建环境,这里在USB图像采集blog中已经进行了说明,只需要将我们的USB摄像头、鼠标和键盘链接到dragonbaord 410c开发板上即可,如果你使用的是有线的USB鼠标和键盘,USB鼠标和摄像头可以共用一个。
搭建好环境后,我们就可以来进行移动侦测程序的编写了,同样,这里我们直接上干货,具体的代码如下:
#!/usr/bin/env python
import cv2, sys
import numpy as np
# Constants
DEVICE_NUMBER = 0
FONT_FACES = [
cv2.FONT_HERSHEY_SIMPLEX,
cv2.FONT_HERSHEY_PLAIN,
cv2.FONT_HERSHEY_DUPLEX,
cv2.FONT_HERSHEY_COMPLEX,
cv2.FONT_HERSHEY_TRIPLEX,
cv2.FONT_HERSHEY_COMPLEX_SMALL,
cv2.FONT_HERSHEY_SCRIPT_SIMPLEX,
cv2.FONT_HERSHEY_SCRIPT_COMPLEX
]
#这次代码是在前面的代码的基础上改进的,因此这里保存了我们前面的代码
MOTION_THRESHOLD = 0.3
#初始化web摄像头
vc = cv2.VideoCapture(DEVICE_NUMBER)
# Check if the webcam init was successful
if vc.isOpened(): # try to get the first frame
retval, frame = vc.read()
previous_frame = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
else:
sys.exit(1)
#如果摄像头初始化成功,可以成功读取摄像头数据则进入到循环模式,循环处理摄像头图像帧
while retval:
# Define the frame which the webcam will show
frame_show = frame
# Convert frame to grayscale to make phase comparison
frame = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
# Convert frames into floating point
f_frame = np.float32(frame)
f_previous_frame = np.float32(previous_frame)
# 构建背景模型
(dx,dy) = cv2.phaseCorrelate(f_frame,f_previous_frame)
# Determine motion from the phase correlation
if abs(dx) > MOTION_THRESHOLD and abs(dy) > MOTION_THRESHOLD:
#写入文本信息
font_typeface = FONT_FACES[5]
font_scale = 2
font_color = (0,0,255)
font_weight = 5
x = 0
y = 50
cv2.putText(frame_show, "Motion!", (x,y), font_typeface, font_scale, font_color, font_weight)
#显示视频
cv2.imshow("DB410c Workshop #5: Motion Detection", frame_show)
# Retain previous frame for comparison
previous_frame = frame
# 刷新进入下一帧处理
retval, frame = vc.read()
# Exit program after waiting for a pressed key
#设置停止退出按键
if cv2.waitKey(1) == 27:
break
以上就是实现整个移动侦测的Python代码,非常简单的流程就可以实现对摄像头采集到的图像数据进行移动侦测,如果大家有兴趣还可以在上面进行稍微的修改,就可以将该功能改为对移动物体的识别和追踪,这里后续blog中将进一步向大家介绍。
代码写好后,保存为monition.py,然后运行python monition.py 就可以看到如下效果的监测,当你的摄像头移动的时候系统会在视频上显示motion!表示移动。
首先还是搭建环境,这里在USB图像采集blog中已经进行了说明,只需要将我们的USB摄像头、鼠标和键盘链接到dragonbaord 410c开发板上即可,如果你使用的是有线的USB鼠标和键盘,USB鼠标和摄像头可以共用一个。
搭建好环境后,我们就可以来进行移动侦测程序的编写了,同样,这里我们直接上干货,具体的代码如下:
#!/usr/bin/env python
import cv2, sys
import numpy as np
# Constants
DEVICE_NUMBER = 0
FONT_FACES = [
cv2.FONT_HERSHEY_SIMPLEX,
cv2.FONT_HERSHEY_PLAIN,
cv2.FONT_HERSHEY_DUPLEX,
cv2.FONT_HERSHEY_COMPLEX,
cv2.FONT_HERSHEY_TRIPLEX,
cv2.FONT_HERSHEY_COMPLEX_SMALL,
cv2.FONT_HERSHEY_SCRIPT_SIMPLEX,
cv2.FONT_HERSHEY_SCRIPT_COMPLEX
]
#这次代码是在前面的代码的基础上改进的,因此这里保存了我们前面的代码
MOTION_THRESHOLD = 0.3
#初始化web摄像头
vc = cv2.VideoCapture(DEVICE_NUMBER)
# Check if the webcam init was successful
if vc.isOpened(): # try to get the first frame
retval, frame = vc.read()
previous_frame = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
else:
sys.exit(1)
#如果摄像头初始化成功,可以成功读取摄像头数据则进入到循环模式,循环处理摄像头图像帧
while retval:
# Define the frame which the webcam will show
frame_show = frame
# Convert frame to grayscale to make phase comparison
frame = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
# Convert frames into floating point
f_frame = np.float32(frame)
f_previous_frame = np.float32(previous_frame)
# 构建背景模型
(dx,dy) = cv2.phaseCorrelate(f_frame,f_previous_frame)
# Determine motion from the phase correlation
if abs(dx) > MOTION_THRESHOLD and abs(dy) > MOTION_THRESHOLD:
#写入文本信息
font_typeface = FONT_FACES[5]
font_scale = 2
font_color = (0,0,255)
font_weight = 5
x = 0
y = 50
cv2.putText(frame_show, "Motion!", (x,y), font_typeface, font_scale, font_color, font_weight)
#显示视频
cv2.imshow("DB410c Workshop #5: Motion Detection", frame_show)
# Retain previous frame for comparison
previous_frame = frame
# 刷新进入下一帧处理
retval, frame = vc.read()
# Exit program after waiting for a pressed key
#设置停止退出按键
if cv2.waitKey(1) == 27:
break
以上就是实现整个移动侦测的Python代码,非常简单的流程就可以实现对摄像头采集到的图像数据进行移动侦测,如果大家有兴趣还可以在上面进行稍微的修改,就可以将该功能改为对移动物体的识别和追踪,这里后续blog中将进一步向大家介绍。
代码写好后,保存为monition.py,然后运行python monition.py 就可以看到如下效果的监测,当你的摄像头移动的时候系统会在视频上显示motion!表示移动。
相关文章推荐
- Dragonboard-410c - USB免驱摄像头的简单读取与保存
- 玩转Dragonboard 410c USB摄像头——获取USB摄像头图像
- 给Dragonboard 410c开发板接上触摸屏显示器
- 玩转Dragonboard 410c USB摄像头——实时视频采集
- 基于Dragon Board 410c开发板实现输入驱动-按键和轨迹球驱动
- 玩转Dragonboard 410c USB摄像头-人脸识别
- Qualcomm——DragonBoard 410C开发板评测
- 基于开发板DragonBoard 410c的应用开发和部署
- 玩转Dragonboard 410c USB摄像头——图像采集及web发布
- 基于DragonBoard 410c 开发板的智能物料仓库调控系统之zigbee模块简介
- 关于DragonBoard 410c的串口转usb连接
- Qualcomm DragonBoard 410c开发板试用活动开箱照片
- 玩转Dragonboard 410c USB摄像头——人脸识别2
- 利用dragonboard 410c开发版快速搭建你的智能安全监控摄像头
- MT9M031/OV7251 usb 3.0 & mipi bridge - AISTARVISION dragonboard 410c
- 浅谈DragonBoard 410c的Miracast无线同屏技术
- 成功在Tiny 4412 开发板上 移植 ffmpeg,搞定了手册上USB摄像头不能摄像录制功能!!!
- Dragonboard 410c fastboot刷入android
- 初识DragonBoard 410c
- 基于dragonboard 410c的智能魔镜设计(8)——UI的python脚本实现