增值税发票内容的识别技术在当今社会识别越来越普遍,我们今天就来看看这项技术是怎么实现的?欢迎光临
解决思路:1.发票矫正 2.文字检测 3.文字识别 4.版面分析
这是一张增值税发票
定位发票边框的四个点
文字识别,版面分析
结果:
{
"发票代码": "3200153160",
"发票代码": "00352801",
"日期": "2014年04月21日",
"金额": "19417.48",
"税额": "582.52",
"税价合计": "20000.00",
"校验码": "",
}
原图地址:http://n1.itc.cn/img8/wb/recom/2016/04/27/146175098939471750.JPEG
下面我们用Python3来做一下:
调用地址:https://ocrapi-invoice.taobao.com/ocrservice/invoice
请求方式:POST
返回类型:JSON
请求参数(body):
{
//图像数据:base64编码,要求base64编码后大小不超过4M,最短边至少15px,最长边最大4096px,支持jpg/png/bmp格式,和url参数只能同时存在一个
"img": "",
//图像url地址:图片完整URL,URL长度不超过1024字节,URL对应的图片base64编码后大小不超过4M,最短边至少15px,最长边最大4096px,支持jpg/png/bmp格式,和img参数只能同时存在一个
"url": ""
}
请求代码Python3版:
import urllib.request
import urllib.parse
import json
import time
import base64
with open('1.jpg', 'rb') as f: # 以二进制读取本地图片
data = f.read()
encodestr = str(base64.b64encode(data),'utf-8')
#请求头
headers = {
'Authorization': 'APPCODE 你自己的AppCode',
'Content-Type': 'application/json; charset=UTF-8'
}
def posturl(url,data={}):
try:
params=json.dumps(dict).encode(encoding='UTF8')
req = urllib.request.Request(url, params, headers)
r = urllib.request.urlopen(req)
html =r.read()
r.close();
return html.decode("utf8")
except urllib.error.HTTPError as e:
print(e.code)
print(e.read().decode("utf8"))
time.sleep(1)
if __name__=="__main__":
url_request="https://ocrapi-invoice.taobao.com/ocrservice/invoice"
dict = {'img': encodestr}
html = posturl(url_request, data=dict)
print(html)
正常返回示例:
{
"发票代码": "032001500XXX",
"发票号码": "25272XXX",
"开票日期": "2017年XX月XX日",
"校验码": "15922733756000XXXXXX",
"发票金额": "XXX.00",
"发票税额": "XXX.43",
"不含税金额": "XXX.57",
"受票方名称": "XXX",
"受票方税号": "XXXX",
"受票方地址、电话": "XXX",
"受票方开户行、账号": "XXX",
"销售方名称": "XXX",
"销售方税号": "913201043023368XXX",
"销售方地址、电话": "XXX",
"销售方开户行、账号": "XXX"
}
失败返回示例:
{
"error_code": 400,
"error_msg": "img和url参数不能同时存在"
}
错误代码定义:
错误码 | 错误信息 | 描述 |
---|---|---|
400 | 参数错误 | 具体错误请参考返回的error_msg |
401 | 您无该功能的权限,请开通后使用 | 您无该功能的权限,请开通后使用 |
403 | 购买的容量已用完或者签名错误 | 购买的容量已用完或者签名错误 |
500 | 服务器错误,请稍后重试 | 服务器错误,请稍后重试 |
当然也可以不用写代码,比如阿里云自己开发,调用API接口实现,文字识别,大大减轻工作量,开箱即用,非常简单。
示例: