RPA 不使用 OCR 组件识别并验真发票方法及二维码识别

场景说明

目前增值税发票识别可以使用 OCR 中的“增值税发票”识别组件,但是 OCR 识别组件需要消耗识别次数,国税网发票验真需要的内容并不包含购买方和销售方的信息,其实不需要使用 OCR 组件,那我们怎么去做呢?

适用类型

标准类型的增值税普通发票,左上角含二维码的发票,样例:
RPA 不使用 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 实现

RPA 不使用 OCR 组件识别并验真发票方法及二维码识别
工程文件:
040dc293e17b4392956e87620896db0a_recqrcode.zip
如此在发票验真场景就不需要使用 OCR 组件啦 😎但仅限于发票含有二维码且二维码识别信息为验真所需字段的类型哟,但可以发散一下,所有用到二维码识别的场景都可以使用该代码进行处理