image_demo.py 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136
  1. # Copyright (c) OpenMMLab. All rights reserved.
  2. """Image Demo.
  3. This script adopts a new infenence class, currently supports image path,
  4. np.array and folder input formats, and will support video and webcam
  5. in the future.
  6. Example:
  7. Save visualizations and predictions results::
  8. python demo/image_demo.py demo/demo.jpg rtmdet-s
  9. python demo/image_demo.py demo/demo.jpg \
  10. configs/rtmdet/rtmdet_s_8xb32-300e_coco.py \
  11. --weights rtmdet_s_8xb32-300e_coco_20220905_161602-387a891e.pth
  12. python demo/image_demo.py demo/demo.jpg \
  13. glip_atss_swin-t_a_fpn_dyhead_pretrain_obj365 --texts bench
  14. python demo/image_demo.py demo/demo.jpg \
  15. glip_atss_swin-t_a_fpn_dyhead_pretrain_obj365 --texts 'bench . car .'
  16. python demo/image_demo.py demo/demo.jpg \
  17. glip_atss_swin-t_a_fpn_dyhead_pretrain_obj365
  18. --texts 'bench . car .' -c
  19. python demo/image_demo.py demo/demo.jpg \
  20. glip_atss_swin-t_a_fpn_dyhead_pretrain_obj365 \
  21. --texts 'There are a lot of cars here.'
  22. Visualize prediction results::
  23. python demo/image_demo.py demo/demo.jpg rtmdet-ins-s --show
  24. python demo/image_demo.py demo/demo.jpg rtmdet-ins_s_8xb32-300e_coco \
  25. --show
  26. """
  27. from argparse import ArgumentParser
  28. from mmengine.logging import print_log
  29. from mmdet.apis import DetInferencer
  30. def parse_args():
  31. parser = ArgumentParser()
  32. parser.add_argument(
  33. 'inputs', type=str, help='Input image file or folder path.')
  34. parser.add_argument(
  35. 'model',
  36. type=str,
  37. help='Config or checkpoint .pth file or the model name '
  38. 'and alias defined in metafile. The model configuration '
  39. 'file will try to read from .pth if the parameter is '
  40. 'a .pth weights file.')
  41. parser.add_argument('--weights', default=None, help='Checkpoint file')
  42. parser.add_argument(
  43. '--out-dir',
  44. type=str,
  45. default='outputs',
  46. help='Output directory of images or prediction results.')
  47. parser.add_argument('--texts', help='text prompt')
  48. parser.add_argument(
  49. '--device', default='cuda:0', help='Device used for inference')
  50. parser.add_argument(
  51. '--pred-score-thr',
  52. type=float,
  53. default=0.3,
  54. help='bbox score threshold')
  55. parser.add_argument(
  56. '--batch-size', type=int, default=1, help='Inference batch size.')
  57. parser.add_argument(
  58. '--show',
  59. action='store_true',
  60. help='Display the image in a popup window.')
  61. parser.add_argument(
  62. '--no-save-vis',
  63. action='store_true',
  64. help='Do not save detection vis results')
  65. parser.add_argument(
  66. '--no-save-pred',
  67. action='store_true',
  68. help='Do not save detection json results')
  69. parser.add_argument(
  70. '--print-result',
  71. action='store_true',
  72. help='Whether to print the results.')
  73. parser.add_argument(
  74. '--palette',
  75. default='none',
  76. choices=['coco', 'voc', 'citys', 'random', 'none'],
  77. help='Color palette used for visualization')
  78. # only for GLIP
  79. parser.add_argument(
  80. '--custom-entities',
  81. '-c',
  82. action='store_true',
  83. help='Whether to customize entity names? '
  84. 'If so, the input text should be '
  85. '"cls_name1 . cls_name2 . cls_name3 ." format')
  86. call_args = vars(parser.parse_args())
  87. if call_args['no_save_vis'] and call_args['no_save_pred']:
  88. call_args['out_dir'] = ''
  89. if call_args['model'].endswith('.pth'):
  90. print_log('The model is a weight file, automatically '
  91. 'assign the model to --weights')
  92. call_args['weights'] = call_args['model']
  93. call_args['model'] = None
  94. init_kws = ['model', 'weights', 'device', 'palette']
  95. init_args = {}
  96. for init_kw in init_kws:
  97. init_args[init_kw] = call_args.pop(init_kw)
  98. return init_args, call_args
  99. def main():
  100. init_args, call_args = parse_args()
  101. # TODO: Video and Webcam are currently not supported and
  102. # may consume too much memory if your input folder has a lot of images.
  103. # We will be optimized later.
  104. inferencer = DetInferencer(**init_args)
  105. inferencer(**call_args)
  106. if call_args['out_dir'] != '' and not (call_args['no_save_vis']
  107. and call_args['no_save_pred']):
  108. print_log(f'results have been saved at {call_args["out_dir"]}')
  109. if __name__ == '__main__':
  110. main()