diff --git a/darknet_video.py b/darknet_video.py index cc20b266606..e1a621602bb 100644 --- a/darknet_video.py +++ b/darknet_video.py @@ -61,6 +61,7 @@ def set_saved_video(input_video, output_video, size): def video_capture(frame_queue, darknet_image_queue): + darknet_image_id = 0 while cap.isOpened(): ret, frame = cap.read() if not ret: @@ -69,9 +70,12 @@ def video_capture(frame_queue, darknet_image_queue): frame_resized = cv2.resize(frame_rgb, (width, height), interpolation=cv2.INTER_LINEAR) frame_queue.put(frame_resized) - img_for_detect = darknet.make_image(width, height, 3) - darknet.copy_image_from_bytes(img_for_detect, frame_resized.tobytes()) - darknet_image_queue.put(img_for_detect) + darknet_image = darknet_images[darknet_image_id] + darknet.copy_image_from_bytes(darknet_image, frame_resized.tobytes()) + darknet_image_queue.put(darknet_image) + if darknet_image_id==maxsize-1: + darknet_image_id = 0 + darknet_image_id+=1 cap.release() @@ -112,9 +116,10 @@ def drawing(frame_queue, detections_queue, fps_queue): if __name__ == '__main__': frame_queue = Queue() - darknet_image_queue = Queue(maxsize=1) - detections_queue = Queue(maxsize=1) - fps_queue = Queue(maxsize=1) + maxsize = 250 + darknet_image_queue = Queue(maxsize = maxsize-2) + detections_queue = Queue(maxsize = maxsize-2) + fps_queue = Queue(maxsize = maxsize-2) args = parser() check_arguments_errors(args) @@ -128,6 +133,11 @@ def drawing(frame_queue, detections_queue, fps_queue): height = darknet.network_height(network) input_path = str2int(args.input) cap = cv2.VideoCapture(input_path) + darknet_images = [] + for i in range(maxsize): + darknet_image = darknet.make_image(width, height, 3) + darknet_images.append(darknet_image) + Thread(target=video_capture, args=(frame_queue, darknet_image_queue)).start() Thread(target=inference, args=(darknet_image_queue, detections_queue, fps_queue)).start() Thread(target=drawing, args=(frame_queue, detections_queue, fps_queue)).start()