只需加一个if判断语句,在一定时间间隔后读取屏幕帧送入模型进行预测。
1)对于脚本(只打印box信息):
from darkflow.net.build import TFNet
import cv2
#cap = cv2.VideoCapture("rtsp://admin:cisco123@192.168.1.66//Streaming/Channels/2")
options = {"model": "cfg/yolo-voc-6c.cfg", "load": -1, "threshold": 0.1,"gpu": 1.0}
tfnet = TFNet(options)
cap = cv2.VideoCapture("rtsp://admin:cisco123@192.168.1.66//Streaming/Channels/2")
timeF = 10 #视频帧计数间隔频率
c=1
#cap.isOpened()
while(True):
ret, frame = cap.read()
if(c%timeF == 0): #每隔timeF帧进行存储操作
frame=cv2.resize(frame,(400,400),interpolation=cv2.INTER_CUBIC)
cv2.imshow('framettt',frame)
result = tfnet.return_predict_cam(frame)
print(result)
c=c+1
print(c)
choice = cv2.waitKey(1)
if choice == 27: break
cap.release()
cv2.destroyAllWindows()
2)对于全函数,在子模块help.py的camera函数中加一个循环:
def camera(self):
file = self.FLAGS.demo
SaveVideo = self.FLAGS.saveVideo
if file == 'camera':
file = 1####################0
else:
assert os.path.isfile(file), \
'file {} does not exist'.format(file)
# camera = cv2.VideoCapture(file)
# camera = cv2.VideoCapture('/Users/sisyphus/darkflow/sample_img_test/output.mp4')########file
camera = cv2.VideoCapture("rtsp://admin:cisco123@192.168.1.66//Streaming/Channels/2")##
# camera.set(3,800) #设置分辨率
# camera.set(4,800)
if file == 1:#############0
self.say('Press [ESC] to quit demo')
assert camera.isOpened(), \
'Cannot capture source'
if file == 1:#camera window###############0
#cv2.namedWindow('camera',0)###################0
_, frame = camera.read()#################none
# frame=cv2.resize(frame,(400,400),interpolation=cv2.INTER_CUBIC)
#cv2.imshow('frame',frame)###############none
#height, width, _ = frame.shape
#cv2.resizeWindow('', width, height)
# while True:
# _,frame = camera.read(0)
# height, width, _ = frame.shape
# cv2.imshow('frame',frame)
# cv2.resizeWindow('', width, height)
# if cv2.waitKey(1) & 0xFF == ord('q'):
# break
# cap.release()
# cv2.destroyAllWindows()
else:
_, frame = camera.read()
height, width, _ = frame.shape
if SaveVideo:
fourcc = cv2.VideoWriter_fourcc(*'XVID')
if file == 1:#camera window#############0
fps = 1 / self._get_fps(frame)
if fps < 1:
fps = 1
else:
fps = round(camera.get(cv2.CAP_PROP_FPS))
videoWriter = cv2.VideoWriter(
'video.avi', fourcc, fps, (width, height))
# buffers for demo in batch
buffer_inp = list()
buffer_pre = list()
elapsed = int()
start = timer()
self.say('Press [ESC] to quit demo')
# Loop through frames
timeF=25
while camera.isOpened():
elapsed += 1
# print(elapsed)
_, frame = camera.read()
# frame=cv2.resize(frame,(400,400),interpolation=cv2.INTER_CUBIC)
# if(elapsed%timeF==0):
# cv2.imwrite('/Users/sisyphus/py/image/'+str(elapsed)+'.jpg',frame)
if frame is None:
print ('\nEnd of Video')
break
if(elapsed%timeF == 0): #每隔timeF帧进行存储操作
preprocessed = self.framework.preprocess(frame)
buffer_inp.append(frame)
buffer_pre.append(preprocessed)
# Only process and imshow when queue is full
if elapsed % self.FLAGS.queue == 0:
feed_dict = {self.inp: buffer_pre}
net_out = self.sess.run(self.out, feed_dict)
# print(elapsed)
for img, single_out in zip(buffer_inp, net_out):
postprocessed = self.framework.postprocess_video(
single_out, img, elapsed, False)#######
if SaveVideo:
videoWriter.write(postprocessed)
if file == 1: #camera window###############0
cv2.imshow('', postprocessed)
# Clear Buffers
buffer_inp = list()
buffer_pre = list()
if elapsed % 5 == 0:
sys.stdout.write('\r')
sys.stdout.write('{0:3.3f} FPS'.format(
elapsed / (timer() - start)))
sys.stdout.flush()
if file == 1: #camera window####################0
choice = cv2.waitKey(1)
if choice == 27: break
sys.stdout.write('\n')
if SaveVideo:
videoWriter.release()
camera.release()
if file == 1: #camera window#################0
cv2.destroyAllWindows()
没有评论:
发表评论