使用表格文字识别技术,对个人、商品、公示内容等纸质信息登记表进行识别,快速实现表格内容的电子化,用于登记信息的结构化整理和统计,大幅度降低信息电子化工作的人力录入成本,提升信息管理的便捷性
一.平台接入
此步骤比较简单,不多阐述。可参照之前文档:
https://ai.baidu.com/forum/topic/show/943162
二.分析接口文档
1.打开API文档页面,分析接口要求
https://ai.baidu.com/docs#/OCR-API/87932804
(1)接口描述
对图片中的表格文字内容进行提取和识别,结构化输出表头、表尾及每个单元格的文字内容。支持识别常规表格及含合并单元格表格,并可选择以JSON或Excel形式进行返回。
(2)请求说明
需要用到的信息有:
请求URL:https://aip.baidubce.com/rest/2.0/solution/v1/form_ocr/request
Header格式:Content-Type:application/x-www-form-urlencoded
Body中放置请求参数,参数详情如下:
本接口为异步接口,分为两个API:提交请求接口、获取结果接口。这里有一个关键参数:is_sync,取值为“false”,需通过获取结果接口获取识别结果;取值为“true”,同步返回识别结果,无需调用获取结果接口。当然,能一次搞定的绝不用两次,只需设置该参数为“true”即可。
(3)返回参数
返回示例
{"result": {"result_data":"http://bj.bcebos.com/v1/ai-edgecloud/4F00EC7AED4E4827BD517CB105E56DEB?authorization=bce-auth-v1%2Ff86a2044998643b5abc89b59158bad6d%2F2019-08-10T07%3A28%3A13Z%2F172800%2F%2F374c64232876bcbe78a54105e438a97376f530788e5386e04f67d0cba4935f3d", "ret_msg":"\xe5\xb7\xb2\xe5\xae\x8c\xe6\x88\x90", "percent":100, "ret_code":3}, "log_id":1565422091617865}
2.获取access_token
# encoding:utf-8 import base64 import urllib import urllib2 request_url = " https://aip.baidubce.com/rest/2.0/solution/v1/form_ocr/request " # 二进制方式打开视频文件 f = open('[本地文件]', 'rb') img = base64.b64encode(f.read()) params = {"data": data } params = urllib.urlencode(params) access_token = '[调用鉴权接口获取的token]' request_url = request_url + "?access_token=" + access_token request = urllib2.Request(url=request_url, data=params) request.add_header('Content-Type', 'application/x-www-form-urlencoded') response = urllib2.urlopen(request) content = response.read() if content: print content
三.识别结果
1.
识别结果:
2.
识别结果:
3.
识别结果:
4.
识别结果:
结论:
识别结果方面:采用不同形式的复杂表格进行测试,识别结果比较准确,能够大大减少信息录入工作。
处理速度方面:每张图片处理时间在3-5s,可以接受。
四.源码共享
# -*- coding: utf-8 -*- #!/usr/bin/env python import urllib import urllib.parse import urllib.request import base64 import json import time #client_id 为官网获取的AK, client_secret 为官网获取的SK client_id = '*******************' client_secret = '*********************' #获取token def get_token(): host = 'https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id=' + client_id + '&client_secret=' + client_secret request = urllib.request.Request(host) request.add_header('Content-Type', 'application/json; charset=UTF-8') response = urllib.request.urlopen(request) token_content = response.read() if token_content: token_info = json.loads(token_content.decode("utf-8")) token_key = token_info['access_token'] return token_key # 读取图片 def get_file_content(filePath): with open(filePath, 'rb') as fp: return fp.read() #获取表格信息 def get_license_plate(path): request_url = "https://aip.baidubce.com/rest/2.0/solution/v1/form_ocr/request" f = get_file_content(path) access_token=get_token() print (access_token) img = base64.b64encode(f) # params = {"image": img,"is_sync": 'true',"request_type": 'json'} params = {"image": img,"is_sync": 'true',"request_type": 'excel'} params = urllib.parse.urlencode(params).encode('utf-8') request_url = request_url + "?access_token=" + access_token tic = time.clock() request = urllib.request.Request(url=request_url, data=params) request.add_header('Content-Type', 'application/x-www-form-urlencoded') response = urllib.request.urlopen(request) content = response.read() toc = time.clock() print('处理时长: '+'%.2f' %(toc - tic) +' s') if content: print (content) license_plates = json.loads(content.decode("utf-8")) excel_url = license_plates['result']['result_data'] excel = urllib.request.urlopen(excel_url) with open("sbg.xls", "wb") as code: code.write(excel.read()) return content else: return '' image_path='F:\paddle\sbg\s6.jpg' get_license_plate(image_path)
五.意见建议
1.整体识别效果还是不错的,识别结果的精确度还有待提高,细节处理还可以更完善。比如复杂表格识别文字串行,个别文字丢失或错误等。
2.对表格中有手写体文字的识别效果不好,建议增加对手写输入的识别。
作者:wangwei8638