如何基于Dragonboard 410c开发板进行USB摄像头实现移动侦测?
扫描二维码
随时随地手机看文章
移动侦测是常见的智能化视频监控手段之一,其通过判断和识别移动物体然后进行拍照记录可以有效的降低处理器的计算处理量,只需要在有移动事件触发的时候才进行监控和录像,进而避免监控录制和拍摄大量的无用的照片信息。今天本篇blog就带大家用Python语言来简单实现通过USB摄像头采集图像进行移动侦测,侦测到有移动物体后立即拍照保存。
首先还是搭建环境,这里在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!表示移动。