欢迎访问我的网站,希望内容对您有用,感兴趣的可以加入免费知识星球。

Python实用模块(二十六)argparse

实用模块 迷途小书童 3年前 (2020-11-11) 5944次浏览 1个评论

软硬件环境

  • windows 10 64bits
  • anaconda with python 3.7
  • argparse

视频看这里

此处是 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_truestore_falsestore_const分别用作存储TrueFalse值的特殊用例,它们的默认值分别为FalseTrue
  • nargs – 命令行参数应当消耗的数目,可选值为:?为0或1个参数;*为0或所有参数;+所有,并且至少一个参数
  • const – 被一些actionnargs选择所需求的常数
  • 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 -hpython 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/

参考资料

喜欢 (2)

您必须 登录 才能发表评论!

(1)个小伙伴在吐槽