如何展示mmdet的检测结果:
mmdetection/tools/bbox_show.py
import numpy as np
import mmcv
import cv2
import json
from pycocotools.coco import COCO
from mmcv import color_val
from mmdet.apis import show_result
from argparse import ArgumentParser
import osclass_names = ['category_1', 'category_2', 'category_3']def det_bbox_show(args=None):""" 这个是用来展示检测结果的 """with open(args.json_file, 'r') as f:jsondata = json.load(f)results = {}for result in jsondata:result['bbox'][2] = result['bbox'][0] + result['bbox'][2]result['bbox'][3] = result['bbox'][1] + result['bbox'][3]result['bbox'].append(result['score'])if result['image_id'] in results.keys():results[result['image_id']][result['category_id']-1] = np.concatenate((results[result['image_id']][result['category_id']-1], np.array(result['bbox'], dtype=np.float32).reshape(-1,5)))else:results[result['image_id']] = []for i in range(len(class_names)):if result['category_id']-1 == i:results[result['image_id']].append(np.array(result['bbox'], dtype=np.float32).reshape(-1,5))else:results[result['image_id']].append(np.zeros(shape=(0,5),dtype=np.float32))for k, v in results.items():show_result(args.img_prex + '/' + k + '.jpg', v, class_names, score_thr=0.7, show=False, out_file=args.outfile + '/{}.jpg'.format(k))def gt_bbox_show(args):"""这个是用来展示Ground Truth bbox的"""coco = COCO(args.json_file)img2ann = coco.imgToAnnsimgids = coco.getImgIds()for imgid in imgids:filename = args.img_prex + '/{}.jpg'.format(imgid)img = mmcv.imread(filename)bbox_color = color_val('red')text_color = color_val('red')anns = img2ann[imgid]for ann in anns:bbox_int = np.array(ann['bbox']).astype(np.int32)left_top = (bbox_int[0], bbox_int[1])right_bottom = (bbox_int[0] + bbox_int[2], bbox_int[1] + bbox_int[3])label = ann['category_id'] - 1cv2.rectangle(img, left_top, right_bottom, bbox_color, thickness=1)label_text = class_names[label]cv2.putText(img, label_text, (bbox_int[0], bbox_int[1] - 2), cv2.FONT_HERSHEY_COMPLEX, 0.5, text_color)mmcv.imwrite(img, args.outfile + '/{}.jpg'.format(imgid))def main():parser = ArgumentParser(description='COCO bbox show Tool')parser.add_argument('--gt-bbox-show',action='store_true',help='show gt bbox')parser.add_argument('--json_file',type=str,help='json file(results or ann file)')parser.add_argument('--img_prex',type=str,help='img dataset prex')parser.add_argument('--outfile',type=str,help='outfile')args = parser.parse_args()if not os.path.exists(args.outfile):os.makedirs(args.outfile)if args.gt_bbox_show:gt_bbox_show(args)else:det_bbox_show(args)if __name__ == '__main__':import timetim = time.time()main()print("total time = {}".format(time.time() - tim))
这段程序前提是图片名称和图片id要保持一致,像coco这种图片名前面补好多0的就不能用了,需要debug一下。