明天是Python改变生活系列的第一篇文章,也是与大家相关的问题案例
回顾
熟悉我的男朋友可能都知道,小吴经常给你寄书。 一年来快递单号网站源码,通过自购+出版社赞助的方式赠送图书1000本,这还不包括联合获奖图书。
如果自己购买的话还需要联系快哥寄书。
发货后,快递员会给我截图反馈,但我在想要追踪号码时遇到了问题。
我每次寄一本书,只能得到n张截图(包括快件信息)。
为了及时反馈您的发货信息,我需要尽快提取快递单号。
思考解决方案
每次的截图大概有十几到几十张,要自动识别确实太麻烦了。
何不先看看每张截图长啥样,然后再想想批处理的方法。
主要原因是批量获取图片中的快递单号。 我想到了两个解决方案:
使用python调用ocr识别截图中快递单号的文字
您认为哪一种更简单、更准确?
明天就讲一下第一种方法的过程以及踩坑的经历。
迭代图像
首先,第一步获取文件夹中的所有截图,然后依次进行条形码识别。
具体操作请参考注释
import os
def get_jpg():
jpgs = []
path = os.getcwd()
for i in os.listdir(path): #获取文件列表
if i.split(".")[-1] == "jpg": #筛选jpg文件(截图)
oldname=os.path.join(path,i) #旧文件名
i = i.replace('微信图片_','')
newname=os.path.join(path,i) #新文件名
os.rename(oldname,newname) #改名
jpgs.append(i)
return jpgs
复制代码
里面的代码不仅是对图片的遍历和过滤,还涉及到重命名操作。
这是因为我以前用opencv的时候,只要打开的路径是英文丰富的快递单号网站源码,还是会报错,所以我干脆把截图名称中的英文清除了。
执行建立的get_jpg()函数得到
这是演示中的四个屏幕截图,下面将对其进行识别。
识别条码
Python的第三方模块pyzbar可以轻松处理二维码的识别。 如果这次我们用它来识别一维条形码的话,用法是大致相同的。 不过需要配合cv2使用,主要是用cv2.imread()读取图像文件。
注意:对于cv2模块,安装时需要输入pip3installopencv-python,但导出时使用importcv2。
识别条形码的具体语句如下:
import pyzbar.pyzbar as pyzbar
import cv2
def get_barcode(img):
image = cv2.imread(img)
barcodes = pyzbar.decode(image)
barcode = barcodes[0]
barcode_data = barcode.data.decode("utf-8")
return barcode_data
复制代码
其内置的get_barcode()函数可以实现条码识别并返回结果数据。
我们可以使用for循环遍历上面得到的所有图片,然后依次使用get_barcode()函数来识别条形码。
data_m =[]
for i in jpgs:
data = get_barcode(i)
data_m.append(data)
data_m
复制代码
可以发现,四张截图中的条码都被成功识别,并获得了对应的快递单号。
概括
回顾明天的问题案例,我首先通过思考想出了两个解决方案。 第一种的优点是条码识别比OCR准确,而且只获取快递单号。 后续在反馈捐赠书籍的朋友时,我还需要自动将姓名与追踪号码进行匹配,这还不够偷懒。 后续我会向大家介绍第二种方法的流程以及优缺点。
如果你想看到更多Python改变你生活的真实问题案例,请在本文右下角点赞。
如果你也有仍然想用python解决的问题,请在评论区告诉我