移动侦测是常见的智能化视频监控手法之一,其经过判别和辨认移动物体然后进行摄影记载能够有用的下降处理器的核算处理量,只需要在有移动事情触发的时分才进行监控和录像,从而防止监控录制和摄影很多的无用的相片信息。今日本篇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(DEV%&&&&&%E_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!表明移动。