|
|
|
"""Image Demo. |
|
|
|
This script adopts a new infenence class, currently supports image path, |
|
np.array and folder input formats, and will support video and webcam |
|
in the future. |
|
|
|
Example: |
|
Save visualizations and predictions results:: |
|
|
|
python demo/image_demo.py demo/demo.jpg rtmdet-s |
|
|
|
python demo/image_demo.py demo/demo.jpg \ |
|
configs/rtmdet/rtmdet_s_8xb32-300e_coco.py \ |
|
--weights rtmdet_s_8xb32-300e_coco_20220905_161602-387a891e.pth |
|
|
|
Visualize prediction results:: |
|
|
|
python demo/image_demo.py demo/demo.jpg rtmdet-ins-s --show |
|
|
|
python demo/image_demo.py demo/demo.jpg rtmdet-ins_s_8xb32-300e_coco \ |
|
--show |
|
""" |
|
|
|
from argparse import ArgumentParser |
|
|
|
from mmengine.logging import print_log |
|
|
|
from mmdet.apis import DetInferencer |
|
|
|
|
|
def parse_args(): |
|
parser = ArgumentParser() |
|
parser.add_argument( |
|
'inputs', type=str, help='Input image file or folder path.') |
|
parser.add_argument( |
|
'model', |
|
type=str, |
|
help='Config or checkpoint .pth file or the model name ' |
|
'and alias defined in metafile. The model configuration ' |
|
'file will try to read from .pth if the parameter is ' |
|
'a .pth weights file.') |
|
parser.add_argument('--weights', default=None, help='Checkpoint file') |
|
parser.add_argument( |
|
'--out-dir', |
|
type=str, |
|
default='outputs', |
|
help='Output directory of images or prediction results.') |
|
parser.add_argument( |
|
'--device', default='cuda:0', help='Device used for inference') |
|
parser.add_argument( |
|
'--pred-score-thr', |
|
type=float, |
|
default=0.3, |
|
help='bbox score threshold') |
|
parser.add_argument( |
|
'--batch-size', type=int, default=1, help='Inference batch size.') |
|
parser.add_argument( |
|
'--show', |
|
action='store_true', |
|
help='Display the image in a popup window.') |
|
parser.add_argument( |
|
'--no-save-vis', |
|
action='store_true', |
|
help='Do not save detection vis results') |
|
parser.add_argument( |
|
'--no-save-pred', |
|
action='store_true', |
|
help='Do not save detection json results') |
|
parser.add_argument( |
|
'--print-result', |
|
action='store_true', |
|
help='Whether to print the results.') |
|
parser.add_argument( |
|
'--palette', |
|
default='none', |
|
choices=['coco', 'voc', 'citys', 'random', 'none'], |
|
help='Color palette used for visualization') |
|
|
|
call_args = vars(parser.parse_args()) |
|
|
|
if call_args['no_save_vis'] and call_args['no_save_pred']: |
|
call_args['out_dir'] = '' |
|
|
|
if call_args['model'].endswith('.pth'): |
|
print_log('The model is a weight file, automatically ' |
|
'assign the model to --weights') |
|
call_args['weights'] = call_args['model'] |
|
call_args['model'] = None |
|
|
|
init_kws = ['model', 'weights', 'device', 'palette'] |
|
init_args = {} |
|
for init_kw in init_kws: |
|
init_args[init_kw] = call_args.pop(init_kw) |
|
|
|
return init_args, call_args |
|
|
|
|
|
def main(): |
|
init_args, call_args = parse_args() |
|
|
|
|
|
|
|
inferencer = DetInferencer(**init_args) |
|
inferencer(**call_args) |
|
|
|
if call_args['out_dir'] != '' and not (call_args['no_save_vis'] |
|
and call_args['no_save_pred']): |
|
print_log(f'results have been saved at {call_args["out_dir"]}') |
|
|
|
|
|
if __name__ == '__main__': |
|
main() |
|
|