(opt, data_root='/data/MOT16/train', det_root=None, seqs=('MOT16-05',), exp_name='demo',
save_images=False, save_videos=False, show_image=True)
| 119 | |
| 120 | |
| 121 | def main(opt, data_root='/data/MOT16/train', det_root=None, seqs=('MOT16-05',), exp_name='demo', |
| 122 | save_images=False, save_videos=False, show_image=True): |
| 123 | logger.setLevel(logging.INFO) |
| 124 | result_root = os.path.join(data_root, '..', 'results', exp_name) |
| 125 | mkdir_if_missing(result_root) |
| 126 | data_type = 'mot' |
| 127 | |
| 128 | # Read config |
| 129 | cfg_dict = parse_model_cfg(opt.cfg) |
| 130 | opt.img_size = [int(cfg_dict[0]['width']), int(cfg_dict[0]['height'])] |
| 131 | |
| 132 | # run tracking |
| 133 | accs = [] |
| 134 | n_frame = 0 |
| 135 | timer_avgs, timer_calls = [], [] |
| 136 | for seq in seqs: |
| 137 | output_dir = os.path.join(data_root, '..','outputs', exp_name, seq) if save_images or save_videos else None |
| 138 | |
| 139 | logger.info('start seq: {}'.format(seq)) |
| 140 | dataloader = datasets.LoadImages(osp.join(data_root, seq, 'img1'), opt.img_size) |
| 141 | result_filename = os.path.join(result_root, '{}.txt'.format(seq)) |
| 142 | meta_info = open(os.path.join(data_root, seq, 'seqinfo.ini')).read() |
| 143 | frame_rate = int(meta_info[meta_info.find('frameRate')+10:meta_info.find('\nseqLength')]) |
| 144 | nf, ta, tc = eval_seq(opt, dataloader, data_type, result_filename, |
| 145 | save_dir=output_dir, show_image=show_image, frame_rate=frame_rate) |
| 146 | n_frame += nf |
| 147 | timer_avgs.append(ta) |
| 148 | timer_calls.append(tc) |
| 149 | |
| 150 | # eval |
| 151 | logger.info('Evaluate seq: {}'.format(seq)) |
| 152 | evaluator = Evaluator(data_root, seq, data_type) |
| 153 | accs.append(evaluator.eval_file(result_filename)) |
| 154 | if save_videos: |
| 155 | output_video_path = osp.join(output_dir, '{}.mp4'.format(seq)) |
| 156 | cmd_str = 'ffmpeg -f image2 -i {}/%05d.jpg -c:v copy {}'.format(output_dir, output_video_path) |
| 157 | os.system(cmd_str) |
| 158 | timer_avgs = np.asarray(timer_avgs) |
| 159 | timer_calls = np.asarray(timer_calls) |
| 160 | all_time = np.dot(timer_avgs, timer_calls) |
| 161 | avg_time = all_time / np.sum(timer_calls) |
| 162 | logger.info('Time elapsed: {:.2f} seconds, FPS: {:.2f}'.format(all_time, 1.0 / avg_time)) |
| 163 | |
| 164 | # get summary |
| 165 | metrics = mm.metrics.motchallenge_metrics |
| 166 | mh = mm.metrics.create() |
| 167 | summary = Evaluator.get_summary(accs, seqs, metrics) |
| 168 | strsummary = mm.io.render_summary( |
| 169 | summary, |
| 170 | formatters=mh.formatters, |
| 171 | namemap=mm.io.motchallenge_metric_names |
| 172 | ) |
| 173 | print(strsummary) |
| 174 | Evaluator.save_summary(summary, os.path.join(result_root, 'summary_{}.xlsx'.format(exp_name))) |
| 175 | |
| 176 | |
| 177 |
no test coverage detected