RPA 不使用 OCR 组件识别并验真发票方法及二维码识别
场景说明
目前增值税发票识别可以使用 OCR 中的“增值税发票”识别组件,但是 OCR 识别组件需要消耗识别次数,国税网发票验真需要的内容并不包含购买方和销售方的信息,其实不需要使用 OCR 组件,那我们怎么去做呢?
适用类型
标准类型的增值税普通发票,左上角含二维码的发票,样例:
解决方案
可以使用 python 代码识别图片,提取二维码中的信息(并非电子发票如此,拍照的发票也可以,为了确保发图片可以使用先用手机扫描二维码,看看是否可以扫描出内容,只要手机可以扫描出内容的,代码基本上可以实现)以上述图片识别结果为:01,10,011001900211,99475448,3.88,20191125,66756774740221988285,149C,
识别代码如下,需要安装 pyzbar、Pillow 库(如已安装请忽略),
在线安装方法:pip install pyzbar Pillow
如何离线安装请移步 如何调用 Python 第三方库 :
import pyzbar.pyzbar as pyzbar
from PIL import Image
def rec_code(imgpath):
qr_codes = ''
result = False
try:
imgpath = imgpath
img = Image.open(imgpath).convert('L')
barcodes = pyzbar.decode(img)
for barcode in barcodes:
barcodeData = barcode.data.decode('utf-8')
qr_codes += barcodeData
if qr_codes != '':
print(qr_codes)
result = True
else:
print('识别失败')
result = False
except Exception as e:
qr_codes = e.filename + ' => ' + e.strerror
finally:
return result, qr_codes
函数主要变量说明:
imgpath: 需要识别的图片的路径
result: 识别结果真假判断,如果正确识别变量内容为 True
qr_codes: 识别结果
调用:
rec_code(imgpath)
返回值:
result, qr_codes
该返回值为元组类型,元组中的第一个元素主要用于容错,是否识别到内容。
识别内容处理
最后我们只需将识别出来的内容进行处理即可,该函数的返回值为元组类型,识别结果在返回值小标为 1 的元素中,上述代码识别结果:
01,10,011001900211,99475448,3.88,20191125,66756774740221988285,149C,
该结果为字符串,只需要使用 split 组件 / 方法使用逗号 "," 进行分割处理即可,split() 分割结果,假设该结果赋值给变量 result
[‘01’, ‘10’, ‘011001900211’, ‘99475448’, ‘3.88’, ‘20191125’, ‘66756774740221988285’, ‘149C’, '']
那么发票相关信息为:
发票代码: result[2]
发票号码:result[3]
开具金额 (不含税):result[4]
开票日期:result[5]
校验码:result[6]
校验码后六位:result[6][14:]
RPA 实现
工程文件:
040dc293e17b4392956e87620896db0a_recqrcode.zip
如此在发票验真场景就不需要使用 OCR 组件啦 😎但仅限于发票含有二维码且二维码识别信息为验真所需字段的类型哟,但可以发散一下,所有用到二维码识别的场景都可以使用该代码进行处理
这个可以有 👍
赞一个
https://rpa.i-search.com.cn/store/detail/pe1fb633126834b3a885cdd25aae34362
最近上了一个发票机器人, 你说的问题可以用机器人解决啦哈哈哈
👍
其实发票查验。无非是查验购方信息,避免开错票。或者是发票的税额、明细等,跟入库等业务信息核对,用于审计。还有一种就是电子票查重,防止重复报销。目前,你这种情况可以用于电子票查重,票据建档(发票池)。要想验真还需要获取信息后再到国税票据池查
赞
这个太棒了
👍