| |
| import os |
| import os.path as osp |
| from argparse import ArgumentParser |
|
|
| import cv2 |
| import mmcv |
| import mmcv_custom |
| import mmseg_custom |
| from mmcv.runner import load_checkpoint |
| from mmseg.apis import inference_segmentor, init_segmentor, show_result_pyplot |
| from mmseg.core import get_classes |
| from mmseg.core.evaluation import get_palette |
|
|
|
|
| def test_single_image(model, img_name, out_dir, color_palette, opacity): |
| |
| assumed_imgformat = ('.png', '.jpg', '.jpeg', '.tiff', '.bmp', '.gif') |
| if (not img_name.lower().endswith(assumed_imgformat)): |
| print(f'Skip {img_name} because it is not an image file.') |
| return |
|
|
| result = inference_segmentor(model, img_name) |
|
|
| |
| if hasattr(model, 'module'): |
| model = model.module |
| img = model.show_result(img_name, result, |
| palette=color_palette, |
| show=False, opacity=opacity) |
|
|
| |
| mmcv.mkdir_or_exist(out_dir) |
| out_path = osp.join(out_dir, osp.basename(img_name)) |
| cv2.imwrite(out_path, img) |
| print(f'Result is save at {out_path}') |
|
|
|
|
| def main(): |
| parser = ArgumentParser() |
| parser.add_argument( |
| 'img', help='Image file or a directory contains images') |
| parser.add_argument('config', help='Config file') |
| parser.add_argument('checkpoint', help='Checkpoint file') |
| parser.add_argument('--out', type=str, default='demo', help='out dir') |
| parser.add_argument( |
| '--device', default='cuda:0', help='Device used for inference') |
| parser.add_argument( |
| '--palette', |
| default='ade20k', |
| choices=['ade20k', 'cityscapes', 'cocostuff'], |
| help='Color palette used for segmentation map') |
| parser.add_argument( |
| '--opacity', |
| type=float, |
| default=0.5, |
| help='Opacity of painted segmentation map. In (0, 1] range.') |
| args = parser.parse_args() |
|
|
| |
| model = init_segmentor(args.config, checkpoint=None, device=args.device) |
| checkpoint = load_checkpoint(model, args.checkpoint, map_location='cpu') |
| if 'CLASSES' in checkpoint.get('meta', {}): |
| model.CLASSES = checkpoint['meta']['CLASSES'] |
| else: |
| model.CLASSES = get_classes(args.palette) |
|
|
| |
| if osp.isdir(args.img): |
| for img in sorted(os.listdir(args.img)): |
| test_single_image(model, osp.join(args.img, img), |
| args.out, get_palette(args.palette), args.opacity) |
| else: |
| test_single_image(model, args.img, args.out, |
| get_palette(args.palette), args.opacity) |
|
|
|
|
| if __name__ == '__main__': |
| main() |
|
|