问题描述
我正在录制使用Python进行运动检测的视频。该录像中检测到的所有动作都将保存到一个mp4文件中。代码如下:
import cv2,time
import os
import numpy as np
from datetime import datetime
FILE_OUTPUT = "video_" + str(datetime.Now().strftime('%Y_%m_%d_%H_%M_%s'))
sdThresh = 10
cv2.namedWindow('frame')
cv2.namedWindow('dist')
i = 0
fourcc = cv2.VideoWriter_fourcc(*'mp4v')
output = cv2.VideoWriter(FILE_OUTPUT + ".mp4",fourcc,10.0,(640,480))
t0 = time.time()
def distMap(frame1,frame2):
# outputs pythagorean distance between two frames
frame1_32 = np.float32(frame1)
frame2_32 = np.float32(frame2)
diff32 = frame1_32 - frame2_32
norm32 = np.sqrt(diff32[:,:,0]**2 + diff32[:,1]**2 + diff32[:,2]**2)/np.sqrt(255**2 + 255**2 + 255**2)
dist = np.uint8(norm32*255)
return dist
camera = cv2.VideoCapture('rtsp://admin:@camera_ip')
check1,frame1 = camera.read()
check2,frame2 = camera.read()
while True:
# frame object
check3,frame3 = camera.read()
gerakan = False
if check3 == True:
# mirroring kamera biar gak kebalik
frame3 = cv2.flip(frame3,1)
rows,cols,_ = np.shape(frame3)
dist = distMap(frame1,frame3)
frame1 = frame2
frame2 = frame3
mod = cv2.GaussianBlur(dist,(9,9),0)
_,thresh = cv2.threshold(mod,100,255,0)
_,stDev = cv2.meanStdDev(mod)
cv2.imshow("Merekam",frame2)
else:
break
if stDev > sdThresh:
image = cv2.resize(frame2,480))
output.write(image)
gerakan = True
t1 = time.time() # current time
duration = t1 - t0 # diff
if duration > 60:
break
elif cv2.waitKey(25) and 0xFF == ord('q'):
break
camera.release()
output.release()
cv2.destroyAllWindows()
如果您注意 if stdDev> if stdThresh: 这是用于将检测到的每个动作保存到单个文件中的代码。
和如果持续时间> 60 显示该代码仅可使用60秒。 60秒后,代码将退出。
解决方法
创建一个shell脚本来运行等待并循环的python