2018年4月27日星期五

darkflow网络摄像头卡顿的解决方法

只需加一个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()


没有评论:

发表评论

Failed to find TIFF library

ImportError: Failed to find TIFF library. Make sure that libtiff is installed and its location is listed in PATH|LD_LIBRARY_PATH|.. 解决方法: ...