def demo(opt): result_root = opt.output_root if opt.output_root != '' else '.' mkdir_if_missing(result_root) logger.info('Starting tracking...') #dataloader = datasets.LoadVideo(opt.input_video, opt.img_size) dataloader = datasets.LoadImages(opt.input_video) result_filename = os.path.join(result_root, 'results.txt') frame_rate = 0.5 #dataloader.frame_rate frame_dir = None if opt.output_format == 'text' else osp.join( result_root, 'frame') try: eval_seq(opt, dataloader, 'mot', result_filename, save_dir=frame_dir, show_image=False, frame_rate=frame_rate) except Exception as e: logger.info(e) if opt.output_format == 'video': output_video_path = osp.join(result_root, 'result.mp4') cmd_str = 'ffmpeg -f image2 -i {}/%05d.jpg -b 5000k -c:v mpeg4 {}'.format( osp.join(result_root, 'frame'), output_video_path) os.system(cmd_str)
def run_demo(opt): """ :param opt: :return: """ result_root = opt.output_root if opt.output_root != '' else '.' mkdir_if_missing(result_root) # clear existing frame results frame_res_dir = result_root + '/frames' if os.path.isdir(frame_res_dir): shutil.rmtree(frame_res_dir) os.makedirs(frame_res_dir) else: os.makedirs(frame_res_dir) if opt.input_mode == 'video': logger.info('Starting tracking...') data_loader = datasets.LoadVideo(opt.input_video, opt.img_size) elif opt.input_mode == 'image_dir': logger.info('Starting detection...') data_loader = datasets.LoadImages(opt.input_img, opt.img_size) elif opt.input_mode == 'img_path_list_txt': if not os.path.isfile(opt.input_img): print('[Err]: invalid image file path list.') return with open(opt.input_img, 'r', encoding='utf-8') as r_h: logger.info('Starting detection...') paths = [x.strip() for x in r_h.readlines()] print('Total {:d} image files.'.format(len(paths))) data_loader = datasets.LoadImages(path=paths, img_size=opt.img_size) result_file_name = os.path.join(result_root, 'results.txt') frame_rate = data_loader.frame_rate frame_dir = None if opt.output_format == 'text' else osp.join( result_root, 'frame') opt.device = device try: # 视频推断的入口函数 if opt.id_weight > 0: eval_seq(opt=opt, data_loader=data_loader, data_type='mot', result_f_name=result_file_name, save_dir=frame_dir, show_image=False, frame_rate=frame_rate, mode='track') else: # eval_seq(opt=opt, # data_loader=data_loader, # data_type='mot', # result_f_name=result_file_name, # save_dir=frame_dir, # show_image=False, # frame_rate=frame_rate, # mode='detect') # only for tmp detection evaluation... output_dir = '/users/duanyou/c5/results_new/results_all/mcmot_hrnet18_deconv_ep3' eval_seq_and_output_dets(opt=opt, data_loader=data_loader, data_type='mot', result_f_name=result_file_name, out_dir=output_dir, save_dir=frame_dir, show_image=False) except Exception as e: logger.info(e) if opt.output_format == 'video': output_video_path = osp.join(result_root, 'result.mp4') cmd_str = 'ffmpeg -f image2 -i {}/%05d.jpg -b 5000k -c:v mpeg4 {}' \ .format(osp.join(result_root, 'frame'), output_video_path) os.system(cmd_str)
def run_demo(opt): """ :param opt: :return: """ result_root = opt.output_root if opt.output_root != '' else '.' mkdir_if_missing(result_root) # clear existing frame results frame_res_dir = result_root + '/frame' if os.path.isdir(frame_res_dir): shutil.rmtree(frame_res_dir) os.makedirs(frame_res_dir) else: os.makedirs(frame_res_dir) if opt.input_mode == 'video': if opt.id_weight > 0: logger.info('Starting tracking...') else: logger.info('Starting detection...') if not os.path.isfile(opt.input_video): print('[Err]: invalid input video file.') return data_loader = datasets.LoadVideo(opt.input_video, opt.img_size) # load video as input f_name = os.path.split(opt.input_video)[-1][:-4] elif opt.input_mode == 'image_dir': logger.info('Starting detection...') data_loader = datasets.LoadImages(opt.input_img, opt.img_size) # load images as input f_name = os.path.split(opt.input_video)[-1] opt.id_weight = 0 # only do detection in this mode elif opt.input_mode == 'img_path_list_txt': logger.info('Starting detection...') if not os.path.isfile(opt.input_img): print('[Err]: invalid image file path list.') return opt.id_weight = 0 # only do detection in this mode with open(opt.input_img, 'r', encoding='utf-8') as r_h: logger.info('Starting detection...') paths = [x.strip() for x in r_h.readlines()] print('Total {:d} image files.'.format(len(paths))) data_loader = datasets.LoadImages(path=paths, img_size=opt.img_size) result_file_name = os.path.join(result_root, 'results.txt') frame_rate = data_loader.frame_rate frame_dir = None if opt.output_format == 'text' else osp.join( result_root, 'frame') # Set device # opt.device = device # set device opt.device = str(FindFreeGPU()) print('Using gpu: {:s}'.format(opt.device)) device = select_device( device='cpu' if not torch.cuda.is_available() else opt.device) opt.device = device try: if opt.input_mode == 'video': if opt.id_weight > 0: eval_seq(opt=opt, data_loader=data_loader, data_type='mot', result_f_name=result_file_name, save_dir=frame_dir, show_image=False, frame_rate=frame_rate, mode='track') else: # input video, do detection eval_seq(opt=opt, data_loader=data_loader, data_type='mot', result_f_name=result_file_name, save_dir=frame_dir, show_image=False, frame_rate=frame_rate, mode='detect') else: # only for tmp detection evaluation... output_dir = '/users/duanyou/c5/results_new/results_all/tmp' eval_imgs_output_dets(opt=opt, data_loader=data_loader, data_type='mot', result_f_name=result_file_name, out_dir=output_dir, save_dir=frame_dir, show_image=False) except Exception as e: logger.info(e) if opt.output_format == 'video': output_video_path = 'result.mp4' if opt.input_mode == 'video': if opt.id_weight > 0: output_video_path = osp.join(result_root, f_name + '_track.mp4') else: output_video_path = osp.join(result_root, f_name + '_det.mp4') elif opt.input_mode == 'image_dir': output_video_path = osp.join(result_root, f_name + '_det.mp4') cmd_str = 'ffmpeg -f image2 -i {}/%05d.jpg -b 5000k -c:v mpeg4 {}' \ .format(osp.join(result_root, 'frame'), output_video_path) print(cmd_str) os.system(cmd_str)
def main(opt, data_root='/data/MOT16/train', det_root=None, seqs=('MOT16-05', ), exp_name='demo', save_images=False, save_videos=False, show_image=True): """ """ logger.setLevel(logging.INFO) result_root = os.path.join(data_root, '..', 'results', exp_name) mkdir_if_missing(result_root) data_type = 'mot' # run tracking accs = [] n_frame = 0 timer_avgs, timer_calls = [], [] for seq in seqs: output_dir = os.path.join(data_root, '..', 'outputs', exp_name, seq) if save_images or save_videos else None logger.info('start seq: {}'.format(seq)) dataloader = datasets.LoadImages(osp.join(data_root, seq, 'img1'), opt.img_size) result_filename = os.path.join(result_root, '{}.txt'.format(seq)) meta_info = open(os.path.join(data_root, seq, 'seqinfo.ini')).read() frame_rate = int(meta_info[meta_info.find('frameRate') + 10:meta_info.find('\nseqLength')]) nf, ta, tc = eval_seq(opt, dataloader, data_type, result_filename, save_dir=output_dir, show_image=show_image, frame_rate=frame_rate) n_frame += nf timer_avgs.append(ta) timer_calls.append(tc) # eval logger.info('Evaluate seq: {}'.format(seq)) evaluator = Evaluator(data_root, seq, data_type) accs.append(evaluator.eval_file(result_filename)) if save_videos: output_video_path = osp.join(output_dir, '{}.mp4'.format(seq)) cmd_str = 'ffmpeg -f image2 -i {}/%05d.jpg -c:v copy {}'.format( output_dir, output_video_path) os.system(cmd_str) timer_avgs = np.asarray(timer_avgs) timer_calls = np.asarray(timer_calls) all_time = np.dot(timer_avgs, timer_calls) avg_time = all_time / np.sum(timer_calls) logger.info('Time elapsed: {:.2f} seconds, FPS: {:.2f}'.format( all_time, 1.0 / avg_time)) # get summary metrics = mm.metrics.motchallenge_metrics mh = mm.metrics.create() summary = Evaluator.get_summary(accs, seqs, metrics) strsummary = mm.io.render_summary(summary, formatters=mh.formatters, namemap=mm.io.motchallenge_metric_names) print(strsummary) Evaluator.save_summary( summary, os.path.join(result_root, 'summary_{}.xlsx'.format(exp_name)))