前言
由于小编经常会寄快递去一些地方!每次联系快递小哥上去取件,后面都会发一个快递截图的单号给我,这就大大的增加了我得工作量,快递小哥应该平常也会用的上吧?
今天就给大家写一个程序能轻松的识别这个快递单号,自动提取号码!也希望能帮助到大家!有时候发现会代码对目前来说多了很多的便利!
每次寄完东西,我都只能得到n个截图(内含快递信息)。
为了及时反馈大家物流信息,我需要尽快将快递单号提取出来。
思考解决办法
每次大概都有十几到几十张截图,手动去识别真的太麻烦。不如先看看每张截图大概是什么样子,再去想想批量处理的办法吧。
主要是为了批量获取图片中的快递单号,我想到了两个解决办法:
-
用python识别条形码来直接获得准确快递单号
-
用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模块,安装时需要输入pip3 install opencv-python,但在导入的时候采用import cv2。
识别条形码的具体语句如下所示:
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更准确,但是其只获取了快递单号。后续在给获得赠书的同学反馈时,我还需要手动将名字和单号对应,不够偷懒。后续将给大家介绍第二种方法的流程和优缺点。
如何获取源码:
①3000多本Python电子书有 ②Python开发环境安装教程有 ③Python400集自学视频有 ④软件开发常用词汇有 ⑤Python学习路线图有 ⑥项目源码案例分享有 如果你用得到的话可以直接拿走,在我的QQ技术交流群里群号:754370353(纯技术交流和资源共享,广告勿入)以自助拿走 点击这里 领取