【转载】项目实战—CreditCard数字识别(十一)

之前在进阶篇我们已经讨论过OpenCV的模板匹配,本次我们可以将其用于Credit Card数字识别,当然这是最简单的也是最直接的方法,后面我们也会介绍到OCR识别,但本次我们暂不涉及。

准备工作

argparse用法

使用argparse模块创建一个ArgumentParser解析对象,可以理解成一个容器,将包含将命令行解析为Python数据类型所需的所有信息。parse_args()是将之前add_argument()定义的参数进行赋值,并返回相关的namespace:

view plaincopy to clipboardprint?
import argparse  
   
parser = argparse.ArgumentParser()  
# # 括号少了会报错AttributeError: 'str' object has no attribute 'prefix_chars'  
parser.add_argument("-i", "--image", required=True, help="path to input image")  
# -i可以理解为标签,--image既可以是标签又是属性  
parser.add_argument("-t", "--template", required=True, help="path to template OCR-A image")  
args = vars(parser.parse_args()) # print(args["image"])  
# args为字典{'image': 'images/credit_card_01.png', 'template': 'images/ocr_a_reference.png'}  
args = parser.parse_args()  # print(args.image)  
# Namespace(image='images/credit_card_01.png', template='images/ocr_a_reference.png')  
# -t 和 --train两种情况,在bat文件和pycharm配置种注意区分前面的两个--还是一个-

pycharm下可以通过argparse模块完成参数设置,即生成全局变量。
【转载】项目实战—CreditCard数字识别(十一)

zip 与 zip*用法

zip() 函数用于将可迭代的对象作为参数,将对象中对应的元素打包成一个个元组,然后返回由这些元组组成的列表。

如果各个迭代器的元素个数不一致,则返回列表长度与最短的对象相同,利用 * 号操作符,可以将元组解压为列表。(个人理解,将两组元素,分别各成元元组组合成一个列表)

zip 方法在 Python 2 和 Python 3 中的不同:在 Python 3.x 中为了减少内存,zip()返回的是一个对象。如需展示列表,需手动 list() 转换。

sorted用法

基础用法:

传进去一个可迭代的数据,返回一个新的列表,按照从小到大排序,注意,是新的列表!

view plaincopy to clipboardprint?
a = [1, 4, 6, 8, 9, 3, 5]  
b = "aghdb"  
sorted(a)  # print(a)不变,返回sorted(g)变; [1, 3, 4, 5, 6, 8, 9]  
sorted(b)  # 返回['a', 'b', 'd', 'g', 'h']  
sorted(a, reverse=True)  # 逆序排序; [9, 8, 6, 5, 4, 3, 1] 

高级用法:

列表里面的每一个元素都为二维元组,key参数传入了一个lambda函数表达式,其x就代表列表里的每一个元素,然后分别利用索引返回元素内的第一个和第二个元素,这就代表了sorted()函数根据哪一个元素进行排列。reverse参数起逆排的作用,默认为False,从小到大顺序。

view plaincopy to clipboardprint?
c = [("a", 1), ("e", 2), ("c", 4)]  
print(sorted(c, key=lambda x: x[0]))  
print(sorted(c, key=lambda x: x[1]))  
print(sorted(c, key=lambda x: x[0], reverse=True))  

items()用法

D.items():
Python 字典 items() 方法,以列表形式返回可遍历的(键, 值) 元组数组,(并非直接的列表,若要返回列表值还需调用list函数)。

view plaincopy to clipboardprint?
D = {'Google': 'www.google.com', 'Runoob': 'www.runoob.com', 'taobao': 'www.taobao.com'}  
print(D.items())  
print(list(D.items()))  
# 遍历字典列表  
for key, value in D.items():  
    print(key, value)  
# dict_items([('Google', 'www.google.com'), ('Runoob', 'www.runoob.com'), ('taobao', 'www.taobao.com')])  
# [('Google', 'www.google.com'), ('Runoob', 'www.runoob.com'), ('taobao', 'www.taobao.com')]  
# Google www.google.com   Runoob www.runoob.com  taobao www.taobao.com

join()用法

join()方法——用于将序列中的元素以指定的字符连接生成一个新的字符串
join()方法语法:str.join(sequence),sequence为要连接的元素序列。

view plaincopy to clipboardprint?
str = "-"  
seq = ("a", "b", "c") # 字符串序列  
# c = [1, 2, 3] 数字不行,变成# c = ["1", "2", "3"]  
print(str.join(seq))  # 输出结果为a-b-c  
# print("-".join(seq))  直接这样写也行  
# print(“”.join(seq))  输出结果为abc

extend()用法

extend() 函数用于在列表末尾一次性追加另一个序列中的多个值(用新列表扩展原来的列表)。
extend()方法语法:list.extend(seq)

view plaincopy to clipboardprint?
a = [1, "a", "ad", "fd"]  
b = ["d", "d", "d"]  
   
a.extend(b)  # 注意这个函数没有返回值,直接在a上面变化。  
print(a)  
   
a1 = []  
a1.extend(a)  
print(a1)  

format用法

一种格式化字符串的函数 str.format()
format 函数可以接受不限个参数,位置可以不按顺序。

view plaincopy to clipboardprint?
print("hello:{}{}".format("111", "222"))  
# hello:111222  
print("hello:{1}{0}".format("111", "222"))  
# hello:222111可以改变顺序  
print("hello:{name},{age}".format(name="111", age="222"))  
# hello:111,222可以设置参数  
print("{:.2f}".format(3.123222))  # 3.12

接下来为OpenCV的准备工作,我们将其与实战部分放在一起。
查看文章汇总页https://blog.csdn.net/weixin_44237705/article/details/107864965
更多openvino技术信息可以入群交流~
申请备注:CSDN
【转载】项目实战—CreditCard数字识别(十一)

上一篇:阿里排查Java问题工具清单!


下一篇:某宝详情接口