def main(): args = build_argparser().parse_args() cap = open_images_capture(args.input, args.loop) target_bgr = open_images_capture(args.target_bgr, loop=True) if args.target_bgr else None if args.adapter == 'openvino': plugin_config = get_user_config(args.device, args.num_streams, args.num_threads) model_adapter = OpenvinoAdapter( create_core(), args.model, device=args.device, plugin_config=plugin_config, max_num_requests=args.num_infer_requests, model_parameters={'input_layouts': args.layout}) elif args.adapter == 'ovms': model_adapter = OVMSAdapter(args.model) labels = ['__background__', 'person' ] if args.labels is None else load_labels(args.labels) assert len(labels), 'The file with class labels is empty' configuration = { 'confidence_threshold': args.prob_threshold, 'resize_type': args.resize_type } model, need_bgr_input = get_model(model_adapter, configuration, args) input_bgr = open_images_capture(args.background, False).read() if need_bgr_input else None person_id = -1 for i, label in enumerate(labels): if label == 'person': person_id = i break assert person_id >= 0, 'Person class did not find in labels list.' model.log_layers_info() pipeline = AsyncPipeline(model) next_frame_id = 0 next_frame_id_to_show = 0 metrics = PerformanceMetrics() render_metrics = PerformanceMetrics() presenter = None output_transform = None video_writer = cv2.VideoWriter() while True: if pipeline.is_ready(): # Get new image/frame start_time = perf_counter() frame = cap.read() bgr = target_bgr.read() if target_bgr is not None else None if frame is None: if next_frame_id == 0: raise ValueError("Can't read an image from the input") break if next_frame_id == 0: output_transform = OutputTransform(frame.shape[:2], args.output_resolution) if args.output_resolution: output_resolution = output_transform.new_resolution else: output_resolution = (frame.shape[1], frame.shape[0]) presenter = monitors.Presenter( args.utilization_monitors, 55, (round(output_resolution[0] / 4), round(output_resolution[1] / 8))) if args.output and not video_writer.open( args.output, cv2.VideoWriter_fourcc(*'MJPG'), cap.fps(), tuple(output_resolution)): raise RuntimeError("Can't open video writer") # Submit for inference data = { 'src': frame, 'bgr': input_bgr } if input_bgr is not None else frame pipeline.submit_data(data, next_frame_id, { 'frame': frame, 'start_time': start_time }) next_frame_id += 1 else: # Wait for empty request pipeline.await_any() if pipeline.callback_exceptions: raise pipeline.callback_exceptions[0] # Process all completed requests results = pipeline.get_result(next_frame_id_to_show) if results: objects, frame_meta = results if args.raw_output_message: print_raw_results(objects, next_frame_id_to_show) frame = frame_meta['frame'] start_time = frame_meta['start_time'] rendering_start_time = perf_counter() frame = render_results(frame, objects, output_resolution, bgr, person_id, args.blur_bgr, args.show_with_original_frame) render_metrics.update(rendering_start_time) presenter.drawGraphs(frame) metrics.update(start_time, frame) if video_writer.isOpened() and ( args.output_limit <= 0 or next_frame_id_to_show <= args.output_limit - 1): video_writer.write(frame) next_frame_id_to_show += 1 if not args.no_show: cv2.imshow('Background subtraction results', frame) key = cv2.waitKey(1) if key == 27 or key == 'q' or key == 'Q': break presenter.handleKey(key) pipeline.await_all() if pipeline.callback_exceptions: raise pipeline.callback_exceptions[0] # Process completed requests for next_frame_id_to_show in range(next_frame_id_to_show, next_frame_id): results = pipeline.get_result(next_frame_id_to_show) objects, frame_meta = results if args.raw_output_message: print_raw_results(objects, next_frame_id_to_show, model.labels) frame = frame_meta['frame'] start_time = frame_meta['start_time'] rendering_start_time = perf_counter() frame = render_results(frame, objects, output_resolution, bgr, person_id, args.blur_bgr, args.show_with_original_frame) render_metrics.update(rendering_start_time) presenter.drawGraphs(frame) metrics.update(start_time, frame) if video_writer.isOpened() and ( args.output_limit <= 0 or next_frame_id_to_show <= args.output_limit - 1): video_writer.write(frame) if not args.no_show: cv2.imshow('Background subtraction results', frame) cv2.waitKey(1) metrics.log_total() log_latency_per_stage(cap.reader_metrics.get_latency(), pipeline.preprocess_metrics.get_latency(), pipeline.inference_metrics.get_latency(), pipeline.postprocess_metrics.get_latency(), render_metrics.get_latency()) for rep in presenter.reportMeans(): log.info(rep)
def main(): args = build_argparser().parse_args() cap = open_images_capture(args.input, args.loop) if args.adapter == 'openvino': plugin_config = get_user_config(args.device, args.num_streams, args.num_threads) model_adapter = OpenvinoAdapter( create_core(), args.model, device=args.device, plugin_config=plugin_config, max_num_requests=args.num_infer_requests, model_parameters={'input_layouts': args.layout}) elif args.adapter == 'ovms': model_adapter = OVMSAdapter(args.model) model = MonoDepthModel(model_adapter) model.log_layers_info() pipeline = AsyncPipeline(model) next_frame_id = 0 next_frame_id_to_show = 0 metrics = PerformanceMetrics() presenter = None output_transform = None video_writer = cv2.VideoWriter() while True: if pipeline.is_ready(): # Get new image/frame start_time = perf_counter() frame = cap.read() if frame is None: if next_frame_id == 0: raise ValueError("Can't read an image from the input") break if next_frame_id == 0: output_transform = OutputTransform(frame.shape[:2], args.output_resolution) if args.output_resolution: output_resolution = output_transform.new_resolution else: output_resolution = (frame.shape[1], frame.shape[0]) presenter = monitors.Presenter( args.utilization_monitors, 55, (round(output_resolution[0] / 4), round(output_resolution[1] / 8))) if args.output and not video_writer.open( args.output, cv2.VideoWriter_fourcc(*'MJPG'), cap.fps(), output_resolution): raise RuntimeError("Can't open video writer") # Submit for inference pipeline.submit_data(frame, next_frame_id, {'start_time': start_time}) next_frame_id += 1 else: # Wait for empty request pipeline.await_any() if pipeline.callback_exceptions: raise pipeline.callback_exceptions[0] # Process all completed requests results = pipeline.get_result(next_frame_id_to_show) if results: depth_map, frame_meta = results depth_map = apply_color_map(depth_map, output_transform) start_time = frame_meta['start_time'] presenter.drawGraphs(depth_map) metrics.update(start_time, depth_map) if video_writer.isOpened() and ( args.output_limit <= 0 or next_frame_id_to_show <= args.output_limit - 1): video_writer.write(depth_map) next_frame_id_to_show += 1 if not args.no_show: cv2.imshow(DEMO_NAME, depth_map) key = cv2.waitKey(1) if key == 27 or key == 'q' or key == 'Q': break presenter.handleKey(key) pipeline.await_all() if pipeline.callback_exceptions: raise pipeline.callback_exceptions[0] # Process completed requests for next_frame_id_to_show in range(next_frame_id_to_show, next_frame_id): results = pipeline.get_result(next_frame_id_to_show) depth_map, frame_meta = results depth_map = apply_color_map(depth_map, output_transform) start_time = frame_meta['start_time'] presenter.drawGraphs(depth_map) metrics.update(start_time, depth_map) if video_writer.isOpened() and ( args.output_limit <= 0 or next_frame_id_to_show <= args.output_limit - 1): video_writer.write(depth_map) if not args.no_show: cv2.imshow(DEMO_NAME, depth_map) key = cv2.waitKey(1) if key == 27 or key == 'q' or key == 'Q': break presenter.handleKey(key) metrics.log_total() for rep in presenter.reportMeans(): log.info(rep)
def main(): args = build_argparser().parse_args() cap = open_images_capture(args.input, args.loop) next_frame_id = 1 next_frame_id_to_show = 0 metrics = PerformanceMetrics() render_metrics = PerformanceMetrics() video_writer = cv2.VideoWriter() plugin_config = get_user_config(args.device, args.num_streams, args.num_threads) model_adapter = OpenvinoAdapter(create_core(), args.model, device=args.device, plugin_config=plugin_config, max_num_requests=args.num_infer_requests) start_time = perf_counter() frame = cap.read() if frame is None: raise RuntimeError("Can't read an image from the input") config = { 'target_size': args.tsize, 'aspect_ratio': frame.shape[1] / frame.shape[0], 'confidence_threshold': args.prob_threshold, 'padding_mode': 'center' if args.architecture_type == 'higherhrnet' else None, # the 'higherhrnet' and 'ae' specific 'delta': 0.5 if 'higherhrnet' else None, # the 'higherhrnet' and 'ae' specific } model = ImageModel.create_model(ARCHITECTURES[args.architecture_type], model_adapter, config) model.log_layers_info() hpe_pipeline = AsyncPipeline(model) hpe_pipeline.submit_data(frame, 0, { 'frame': frame, 'start_time': start_time }) output_transform = OutputTransform(frame.shape[:2], args.output_resolution) if args.output_resolution: output_resolution = output_transform.new_resolution else: output_resolution = (frame.shape[1], frame.shape[0]) presenter = monitors.Presenter( args.utilization_monitors, 55, (round(output_resolution[0] / 4), round(output_resolution[1] / 8))) if args.output and not video_writer.open(args.output, cv2.VideoWriter_fourcc(*'MJPG'), cap.fps(), output_resolution): raise RuntimeError("Can't open video writer") while True: if hpe_pipeline.callback_exceptions: raise hpe_pipeline.callback_exceptions[0] # Process all completed requests results = hpe_pipeline.get_result(next_frame_id_to_show) if results: (poses, scores), frame_meta = results frame = frame_meta['frame'] start_time = frame_meta['start_time'] if len(poses) and args.raw_output_message: print_raw_results(poses, scores, next_frame_id_to_show) presenter.drawGraphs(frame) rendering_start_time = perf_counter() frame = draw_poses(frame, poses, args.prob_threshold, output_transform) render_metrics.update(rendering_start_time) metrics.update(start_time, frame) if video_writer.isOpened() and ( args.output_limit <= 0 or next_frame_id_to_show <= args.output_limit - 1): video_writer.write(frame) next_frame_id_to_show += 1 if not args.no_show: cv2.imshow('Pose estimation results', frame) key = cv2.waitKey(1) ESC_KEY = 27 # Quit. if key in {ord('q'), ord('Q'), ESC_KEY}: break presenter.handleKey(key) continue if hpe_pipeline.is_ready(): # Get new image/frame start_time = perf_counter() frame = cap.read() if frame is None: break # Submit for inference hpe_pipeline.submit_data(frame, next_frame_id, { 'frame': frame, 'start_time': start_time }) next_frame_id += 1 else: # Wait for empty request hpe_pipeline.await_any() hpe_pipeline.await_all() # Process completed requests for next_frame_id_to_show in range(next_frame_id_to_show, next_frame_id): results = hpe_pipeline.get_result(next_frame_id_to_show) while results is None: results = hpe_pipeline.get_result(next_frame_id_to_show) (poses, scores), frame_meta = results frame = frame_meta['frame'] start_time = frame_meta['start_time'] if len(poses) and args.raw_output_message: print_raw_results(poses, scores, next_frame_id_to_show) presenter.drawGraphs(frame) rendering_start_time = perf_counter() frame = draw_poses(frame, poses, args.prob_threshold, output_transform) render_metrics.update(rendering_start_time) metrics.update(start_time, frame) if video_writer.isOpened() and ( args.output_limit <= 0 or next_frame_id_to_show <= args.output_limit - 1): video_writer.write(frame) if not args.no_show: cv2.imshow('Pose estimation results', frame) key = cv2.waitKey(1) ESC_KEY = 27 # Quit. if key in {ord('q'), ord('Q'), ESC_KEY}: break presenter.handleKey(key) metrics.log_total() log_latency_per_stage(cap.reader_metrics.get_latency(), hpe_pipeline.preprocess_metrics.get_latency(), hpe_pipeline.inference_metrics.get_latency(), hpe_pipeline.postprocess_metrics.get_latency(), render_metrics.get_latency()) for rep in presenter.reportMeans(): log.info(rep)