软硬件环境
视频看这里
此处是youtube
的播放链接,需要科学上网。喜欢我的视频,请记得订阅我的频道,打开旁边的小铃铛,点赞并分享,感谢您的支持。
前言
argparse
模块是python
自带的命令行参数解析包,可以用来方便地读取命令行参数。当你的代码需要频繁地修改参数的时候,使用argparse
可以将参数和代码分离开来,让你的代码更简洁,适用范围更广。argparse
模块还会自动生成帮助和使用手册,并在用户给程序传入无效参数时给出错误信息。
代码示例
这里以 YOLOv5目标检测 中的detect.py
为例,来看看argparse
的基本用法
if __name__ == '__main__':
parser = argparse.ArgumentParser()
parser.add_argument('--weights', nargs='+', type=str, default='yolov5s.pt', help='model.pt path(s)')
parser.add_argument('--source', type=str, default='inference/images', help='source') # file/folder, 0 for webcam
parser.add_argument('--output', type=str, default='inference/output', help='output folder') # output folder
parser.add_argument('--img-size', type=int, default=640, help='inference size (pixels)')
parser.add_argument('--conf-thres', type=float, default=0.4, help='object confidence threshold')
parser.add_argument('--iou-thres', type=float, default=0.5, help='IOU threshold for NMS')
parser.add_argument('--device', default='', help='cuda device, i.e. 0 or 0,1,2,3 or cpu')
parser.add_argument('--view-img', action='store_true', help='display results')
parser.add_argument('--save-txt', action='store_true', help='save results to *.txt')
parser.add_argument('--classes', nargs='+', type=int, help='filter by class: --class 0, or --class 0 2 3')
parser.add_argument('--agnostic-nms', action='store_true', help='class-agnostic NMS')
parser.add_argument('--augment', action='store_true', help='augmented inference')
parser.add_argument('--update', action='store_true', help='update all models')
opt = parser.parse_args()
print(opt)
with torch.no_grad():
if opt.update: # update all models (to fix SourceChangeWarning)
for opt.weights in ['yolov5s.pt', 'yolov5m.pt', 'yolov5l.pt', 'yolov5x.pt']:
detect()
strip_optimizer(opt.weights)
else:
detect()
对上述代码稍微解释一下。第一步是创建一个ArgumentParser
对象,这个对象包含将命令行解析成python
数据类型所需的全部信息。
parser = argparse.ArgumentParser()
接下来,可以通过add_argument()
方法来给parser
对象添加程序参数信息了。
add_argument
方法声明
ArgumentParser.add_argument(name or flags...[, action][, nargs][, const][, default][, type][, choices][, required][, help][, metavar][, dest])
它定义单个的命令行参数应当如何解析。每个形参的含义如下
- name or flags – 一个命名或者一个选项字符串的列表,例如
weight
或-w
,--weight
- action – 当参数在命令行中出现时使用的动作基本类型。
store_true
和store_false
是store_const
分别用作存储True
和False
值的特殊用例,它们的默认值分别为False
和True
- nargs – 命令行参数应当消耗的数目,可选值为:
?
为0或1个参数;*
为0或所有参数;+
所有,并且至少一个参数 - const – 被一些
action
和nargs
选择所需求的常数 - default – 当参数未在命令行中出现时使用的默认值
- type – 命令行参数应当被转换成的类型
- choices – 参数值只能从几个选项里面选择
- required – 此命令行选项是否可省略,如果为
True
,不设置的话,会报错 - help – 一个此选项作用的简单描述
- metavar – 在使用方法消息中使用的参数值示例
- dest – 设置参数在代码中的变量名
最后一步,parser
通过parse_args()
方法解析参数,将参数字符串转换为对象并将其设为命名空间的属性,返回带有成员的命名空间
opt = parser.parse_args()
得到了opt
后,就可以通过opt.weights
访问weights
文件路径,opt.img-size
访问图片的大小。
如果不知道脚本如何使用,可以使用python detect.py -h
或python detect.py --help
来查看detect.py
脚本支持的参数以及对应的帮助信息
(yolov5v3) xugaoxiang@1070Ti:~/Works/github/yolov5_v3/yolov5-3.0$ python detect.py -h
usage: detect.py [-h] [--weights WEIGHTS [WEIGHTS ...]] [--source SOURCE]
[--output OUTPUT] [--img-size IMG_SIZE]
[--conf-thres CONF_THRES] [--iou-thres IOU_THRES]
[--device DEVICE] [--view-img] [--save-txt]
[--classes CLASSES [CLASSES ...]] [--agnostic-nms]
[--augment] [--update]
optional arguments:
-h, --help show this help message and exit
--weights WEIGHTS [WEIGHTS ...]
model.pt path(s)
--source SOURCE source
--output OUTPUT output folder
--img-size IMG_SIZE inference size (pixels)
--conf-thres CONF_THRES
object confidence threshold
--iou-thres IOU_THRES
IOU threshold for NMS
--device DEVICE cuda device, i.e. 0 or 0,1,2,3 or cpu
--view-img display results
--save-txt save results to *.txt
--classes CLASSES [CLASSES ...]
filter by class: --class 0, or --class 0 2 3
--agnostic-nms class-agnostic NMS
--augment augmented inference
--update update all models
(yolov5v3) xugaoxiang@1070Ti:~/Works/github/yolov5_v3/yolov5-3.0$
Python实用模块专题
更多有用的python
模块,请移步
https://xugaoxiang.com/category/python/modules/