def run_object_detection(config): # Set variables camera_width = 320 camera_height = 240 window_name = "Object Detection Demo" input_width = config.IMAGE_SIZE[1] input_height = config.IMAGE_SIZE[0] vc = cv2.VideoCapture(0) vc.set(cv2.cv.CV_CAP_PROP_FRAME_WIDTH, camera_width) vc.set(cv2.cv.CV_CAP_PROP_FRAME_HEIGHT, camera_height) vc.set(cv2.cv.CV_CAP_PROP_FPS, 15) pool = Pool(processes=1) result = False fps = 1.0 q_save = Queue() q_show = Queue() grabbed, camera_img = vc.read() q_show.put(camera_img.copy()) input_img = camera_img.copy() # ----------- Beginning of Main Loop --------------- while True: m1 = MyTime("1 loop of while(1) of main()") pool_result = pool.apply_async(run_inference, (input_img, )) is_first = True while True: sleep(0.01) grabbed, camera_img = vc.read() if is_first: input_img = camera_img.copy() is_first = False q_save.put(camera_img.copy()) if not q_show.empty(): window_img = q_show.get() if result: window_img = add_rectangle(config.CLASSES, window_img, result, (input_height, input_width)) window_img = add_fps(window_img, fps) # ---------- END of if result != False ----------------- cv2.imshow(window_name, window_img) key = cv2.waitKey(2) # Wait for 2ms if key == 27: # ESC to quit return if pool_result.ready(): break # -------------- END of wait loop ---------------------- q_show = clear_queue(q_show) q_save, q_show = swap_queue(q_save, q_show) result, fps = pool_result.get() m1.show()
def show_object_detection(img, result, fps, window_height, window_width, config): window_img = resize(img, size=[window_height, window_width]) input_width = config.IMAGE_SIZE[1] input_height = config.IMAGE_SIZE[0] window_img = add_rectangle(config.CLASSES, window_img, result, (input_height, input_width)) img = add_fps(window_img, fps) window_name = "Object Detection Demo" cv2.imshow(window_name, window_img)