计算机视觉 - argparse库使用

Posted Follwer

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了计算机视觉 - argparse库使用相关的知识,希望对你有一定的参考价值。

前言

在构建神经网络过程中,常常需要修改神经网络的超参数,比如说训练样本的批次大小、学习率等。为了方便参数修改,可以通过命令行来传递这些超参数,通过argparse也可以定义文件路径,读取文件夹列表下的所有文件。

argparse

argparse是python用于解析命令行参数和选项的标准模块,用于代替已经过时的optparse模块。argparse模块的作用是用于解析命令行参数。

大白话说就是可以通过argparse配置程序中运行的相应参数。并可以在终端使用命令行的形式给程序命令行添加对应的参数来运行程序。

给程序配置argparse通常分为四个步骤:

  1. 导入模块 import argparse
  2. 创建解析对象 parser = argparse.ArgumentParser()
  3. 向该对象添加命令行参数 parser.add_argument()
  4. 调用parser.parse_args()进行解析

1.设置默认参数函数

import argparse

parser = argparse.ArgumentParser()
parser.add_argument("echo")
args = parser.parse_args()
print(args.echo)
(base) my macbook % python script.py haha
haha
(base) my macbook % python script.py -h 
usage: script.py [-h] echo

positional arguments:
  echo

optional arguments:
  -h, --help  show this help message and exit

输入 -h 参数,命令行会提示 positional arguments 是 echo 是必填

2.设置可选参数函数

  • “-”:指定短的参数,如-h
  • “–”指定长的参数,如-help
    这两种方式可以同存,也可以只存在一个。
import argparse

parser = argparse.ArgumentParser()
parser.add_argument("-v","--verbose",help="添加输出 verbose",action="store_true")
args = parser.parse_args()
if args.verbose:
    print("输入参数成功")

其中action=“store_true”,表示可以不用为参数,-v,指定特定值。

3.类型 type

import argparse

parser = argparse.ArgumentParser()
parser.add_argument("-x",type=int,help="输入数字")
args = parser.parse_args()
y=args.x
answer=y**3+y+1
print(answer)

默认情况下type为str

(base) my macbook % python script.py -x 2
11

4.可选值 choices=[]

这里设定取值范围为0、1、2。

import argparse
parser=argparse.ArgumentParser()
parser.add_argument("-square",type=int,help="display number")
parser.add_argument("-v","--verbosity",type=int,choices=[0,1,2],help="increase output verbosity")
args=parser.parse_args()
answer=args.square**2
if args.verbosity==2:
    print("the square of {} equals {}".format(args.square,answer))
elif args.verbosity==1:
    print("{}^2=={}".format(args.square,answer))
else:
    print(answer)
(base) my macbook % python script.py -square 4 -v 0
16
(base) my macbook % python script.py -square 4 -v 1
4^2==16
(base) my macbook % python script.py -square 4 -v 2
the square of 4 equals 16
(base) my macbook % python script.py -square 4 -v 3
usage: script.py [-h] [-square SQUARE] [-v {0,1,2}]
script.py: error: argument -v/--verbosity: invalid choice: 3 (choose from 0, 1, 2)

5.互斥参数

group=parser.add_mutually_exclusive_group()
group.add_argument("-v","--verbose",action="store_true")
group.add_argument("-q","--quiet",action="store_true")

第一行定义一个互斥组,第二、三行在互斥组中添加-v和-q两个参数。

import argparse
parser=argparse.ArgumentParser(description="my argparse script")
group=parser.add_mutually_exclusive_group()
group.add_argument("-v","--verbose",action="store_true")
group.add_argument("-q","--quiet",action="store_true")
parser.add_argument("-x",type=int,help="the base")
parser.add_argument("-y",type=int,help="the exponent")
args=parser.parse_args()
answer=args.x**args.y

if args.quiet:
    print(answer)
elif args.verbose:
    print("{} to the power {} equals {}".format(args.x,args.y,answer))
else:
    print("{}^{}=={}".format(args.x,args.y,answer))
(base) my macbook % python script.py -h        
usage: script.py [-h] [-v | -q] [-x X] [-y Y]

my argparse script

optional arguments:
  -h, --help     show this help message and exit
  -v, --verbose
  -q, --quiet
  -x X           the base
  -y Y           the exponent
(base) my macbook %  python script.py -x 4 -y 2 -v
4 to the power 2 equals 16
(base) my macbook %  python script.py -x 4 -y 2 -q
16
(base) my macbook %  python script.py -x 4 -y 2
4^2==16
(base) my macbook %  python script.py -x 4 -y 2 -v -q
usage: script.py [-h] [-v | -q] [-x X] [-y Y]
script.py: error: argument -q/--quiet: not allowed with argument -v/--verbose

-q 和 -v 不出现,或仅出现一个都可以,同时出现就会报错

6.参数默认值

parser.add_argument("-x",type=int,help="the base",default=6)

default设定参数默认值

import argparse
parser=argparse.ArgumentParser(description="my argparse script")

parser.add_argument("-x",type=int,help="the base",default=6)
parser.add_argument("-y",type=int,help="the exponent",default=2)
args=parser.parse_args()
answer=args.x**args.y
print(answer)
(base) my macbook % python script.py 
36

argparse库在计算机视觉中的应用

import cv2
from __future__ import print_function
import argparse

parser = argparse.ArgumentParser()
parser.add_argument("-i", "--image",
                help = "Path to the image",default='1.jpg')
args = vars(parser.parse_args())

image1 = cv2.imread(args["image"])
print("width: {}pixels".format(image1.shape[1]))
print("hight: {}pixels".format(image1.shape[0]))
print("channels: {}".format(image1.shape[2]))

cv2.imshow("image", image1)
cv2.waitKey(0)
cv2.destroyAllWindows()
(base) my macbook % python script.py
width: 450pixels
hight: 288pixels
channels: 3

这用到了vars(),是为了能够像字典一样访问 ap.parse_args()的值,即现在 args[“image”]=parser.parse_args()

以上是关于计算机视觉 - argparse库使用的主要内容,如果未能解决你的问题,请参考以下文章

处理 argparse 冲突

开源计算机视觉库 OpenCV 被曝两个严重的任意代码执行漏洞(详情)

python库 argparse的add_argument基础用法

optparse 到 argparse 的简单包装器?

计算机视觉-自定义对象检测器

python常用代码片段总结