Add feature for image demo. ()

* Add the switch of whether to display the result.

* Add the inference test of the images folder

* Add video demo.

* Add progress bar in image and video demo.

* Add dir inference support.

* Add url download support.

* Add output path prompt at the end.

* Modify the logic of saving results.

* Update mmengine limit.
pull/167/head
JiayuXu 2022-10-12 21:05:34 +08:00 committed by Haian Huang(深度眸)
parent 2c8d5ab406
commit 1ad4ff269c
4 changed files with 90 additions and 28 deletions

View File

@ -1,26 +1,34 @@
# Copyright (c) OpenMMLab. All rights reserved.
import logging
import os
import urllib
from argparse import ArgumentParser
import mmcv
import torch
from mmdet.apis import inference_detector, init_detector
from mmengine.logging import print_log
from mmengine.utils import ProgressBar, scandir
from mmyolo.registry import VISUALIZERS
from mmyolo.utils import register_all_modules
IMG_EXTENSIONS = ('.jpg', '.jpeg', '.png', '.ppm', '.bmp', '.pgm', '.tif',
'.tiff', '.webp')
def parse_args():
parser = ArgumentParser()
parser.add_argument('img', help='Image file')
parser.add_argument(
'img', help='Image path, include image file, dir and URL.')
parser.add_argument('config', help='Config file')
parser.add_argument('checkpoint', help='Checkpoint file')
parser.add_argument('--out-file', default=None, help='Path to output file')
parser.add_argument(
'--out-dir', default='./output', help='Path to output file')
parser.add_argument(
'--device', default='cuda:0', help='Device used for inference')
parser.add_argument(
'--palette',
default='coco',
choices=['coco', 'voc', 'citys', 'random'],
help='Color palette used for visualization')
'--show', action='store_true', help='Show the detection results')
parser.add_argument(
'--score-thr', type=float, default=0.3, help='bbox score threshold')
args = parser.parse_args()
@ -31,7 +39,6 @@ def main(args):
# register all modules in mmdet into the registries
register_all_modules()
# TODO: Support inference of image directory.
# build the model from a config file and a checkpoint file
model = init_detector(args.config, args.checkpoint, device=args.device)
@ -39,21 +46,52 @@ def main(args):
visualizer = VISUALIZERS.build(model.cfg.visualizer)
visualizer.dataset_meta = model.dataset_meta
# test a single image
result = inference_detector(model, args.img)
is_dir = os.path.isdir(args.img)
is_url = args.img.startswith(('http:/', 'https:/'))
is_file = os.path.splitext(args.img)[-1] in (IMG_EXTENSIONS)
# show the results
img = mmcv.imread(args.img)
img = mmcv.imconvert(img, 'bgr', 'rgb')
visualizer.add_datasample(
'result',
img,
data_sample=result,
draw_gt=False,
show=True,
wait_time=0,
out_file=args.out_file,
pred_score_thr=args.score_thr)
files = []
if is_dir:
# when input source is dir
for file in scandir(args.img, IMG_EXTENSIONS, recursive=True):
files.append(os.path.join(args.img, file))
elif is_url:
# when input source is url
filename = os.path.basename(
urllib.parse.unquote(args.img).split('?')[0])
torch.hub.download_url_to_file(args.img, filename)
files = [os.path.join(os.getcwd(), filename)]
elif is_file:
# when input source is single image
files = [args.img]
else:
print_log(
'Cannot find image file.', logger='current', level=logging.WARNING)
# start detector inference
progress_bar = ProgressBar(len(files))
for file in files:
result = inference_detector(model, file)
img = mmcv.imread(file)
img = mmcv.imconvert(img, 'bgr', 'rgb')
if is_dir:
filename = os.path.relpath(file, args.img).replace('/', '_')
else:
filename = os.path.basename(file)
out_file = None if args.show else os.path.join(args.out_dir, filename)
visualizer.add_datasample(
filename,
img,
data_sample=result,
draw_gt=False,
show=args.show,
wait_time=0,
out_file=out_file,
pred_score_thr=args.score_thr)
progress_bar.update()
if not args.show:
print_log(
f'\nResults have been saved at {os.path.abspath(args.out_dir)}')
if __name__ == '__main__':

View File

@ -99,10 +99,24 @@ The downloading will take several seconds or more, depending on your network env
Option (a). If you install MMYOLO from source, just run the following command.
```shell
python demo/image_demo.py demo/demo.jpg yolov5_s-v61_syncbn_fast_8xb16-300e_coco.py yolov5_s-v61_syncbn_fast_8xb16-300e_coco_20220918_084700-86e02187.pth --device cpu --out-file result.jpg
python demo/image_demo.py demo/demo.jpg \
yolov5_s-v61_syncbn_fast_8xb16-300e_coco.py \
yolov5_s-v61_syncbn_fast_8xb16-300e_coco_20220918_084700-86e02187.pth
# Optional parameters
# --out-dir ./output *The detection results are output to the specified directory. When args have action --show, the script do not save results. Default: ./output
# --device cuda:0 *The computing resources used, including cuda and cpu. Default: cuda:0
# --show *Display the results on the screen. Default: False
# --score-thr 0.3 *Confidence threshold. Default: 0.3
```
You will see a new image `result.jpg` on your current folder, where bounding boxes are plotted.
You will see a new image on your `output` folder, where bounding boxes are plotted.
Supported input types:
- Single image, include `jpg`, `jpeg`, `png`, `ppm`, `bmp`, `pgm`, `tif`, `tiff`, `webp`.
- Folder, all image files in the folder will be traversed and the corresponding results will be output.
- URL, will automatically download from the URL and the corresponding results will be output.
Option (b). If you install MMYOLO with MIM, open your python interpreter and copy&paste the following codes.

View File

@ -100,12 +100,22 @@ mim download mmyolo --config yolov5_s-v61_syncbn_fast_8xb16-300e_coco --dest .
```shell
python demo/image_demo.py demo/demo.jpg \
yolov5_s-v61_syncbn_fast_8xb16-300e_coco.py \
yolov5_s-v61_syncbn_fast_8xb16-300e_coco_20220918_084700-86e02187.pth \
--device cpu \
--out-file result.jpg
yolov5_s-v61_syncbn_fast_8xb16-300e_coco_20220918_084700-86e02187.pth
# 可选参数
# --out-dir ./output *检测结果输出到指定目录下,默认为./output, 当--show参数存在时不保存检测结果
# --device cuda:0 *使用的计算资源包括cuda, cpu等默认为cuda:0
# --show *使用该参数表示在屏幕上显示检测结果默认为False
# --score-thr 0.3 *置信度阈值默认为0.3
```
你会在当前文件夹中看到一个新的图像 `result.jpg`,图像中包含有网络预测的检测框。
运行结束后,在 `output` 文件夹中可以看到检测结果图像,图像中包含有网络预测的检测框。
支持输入类型包括
- 单张图片, 支持 `jpg`, `jpeg`, `png`, `ppm`, `bmp`, `pgm`, `tif`, `tiff`, `webp`
- 文件目录,会遍历文件目录下所有图片文件,并输出对应结果。
- 网址,会自动从对应网址下载图片,并输出结果。
方案 2. 如果你通过 MIM 安装的 MMYOLO 那么可以打开你的 Python 解析器,复制并粘贴以下代码:

View File

@ -11,7 +11,7 @@ mmcv_maximum_version = '2.1.0'
mmcv_version = digit_version(mmcv.__version__)
mmengine_minimum_version = '0.1.0'
mmengine_maximum_version = '0.2.0'
mmengine_maximum_version = '0.2.1'
mmengine_version = digit_version(mmengine.__version__)
mmdet_minimum_version = '3.0.0rc1'