RPA中房产证的 OCR 识别
客户需求,识别一些证件内容,包括身份证、户口本、营业执照、银行卡以及房产证,前四个比较容易实现,不管是艺赛旗的 RPA 还是百度的 OCR 都有接口,直接调用即可,但是都没有房产证的 OCR 识别,只能自己使用其他 OCR 接口来进行相关操作了。
房产证如下图所示:

如果使用通用文字识别所有的文字都可以识别出来,但是顺序是乱的,所以我选择了使用通用文字识别(高精度含位置版),这样的话,我不仅可以识别到文字,还能知道文字所在的位置,然后根据文字位置进行区域划分,划分后的效果如下:
代码如下:
import base64
import copy
import re
import requests
class OCR(object):
# client_id 为官网获取的AK, client_secret 为官网获取的SK
client_id = ""
client_secret = ""
def get_token(self):
"""获取 access_token"""
host = 'https://aip.baidubce.com/oauth/2.0/token'
# 请求头
headers = {'Content-Type': 'application/json; charset=UTF-8'}
# 请求参数
params = {
"grant_type": "client_credentials",
"client_id": self.client_id,
"client_secret": self.client_secret
}
# get 请求
response = requests.get(host, headers=headers, params=params)
# 获取 json 内容
content = response.json()
# 获取 access_token
access_token = content["access_token"]
return access_token
def encode_img(self, img_path):
"""对图片进行编码"""
with open(img_path, "rb") as f:
img_content = f.read()
# 对图片进行 base64 编码
img_content = base64.b64encode(img_content)
return img_content
def img_to_str(self, img_path):
"""对图片文字进行识别"""
access_token = self.get_token()
# 请求 URL
URL = "https://aip.baidubce.com/rest/2.0/ocr/v1/accurate?access_token=" + access_token
# post 请求头
headers = {"Content-Type": "application/x-www-form-urlencoded"}
# post 参数
data = {
"image": self.encode_img(img_path),
"recognize_granularity": "big"
}
# post 请求
response = requests.post(URL, headers=headers, data=data)
return response.json()
if __name__ == '__main__':
ocr = OCR()
img = "./imgs/fcz_01.jpg"
str_json = ocr.img_to_str(img)
my_str_list = str_json["words_result"]
my_title = ["证明权利或事项", "权利人(申请人)", "义务人", "坐落", "不动产单元号", "其他", "附记"]
column_line = 999999999
my_word_list = []
for data in my_str_list:
my_list = []
words = data["words"]
width = data["location"]["width"]
top = data["location"]["top"]
left = data["location"]["left"]
height = data["location"]["height"]
my_list.append(words)
my_list.append(width)
my_list.append(top)
my_list.append(left)
my_list.append(height)
my_word_list.append(my_list)
if "不动产证明" in words:
top_01 = top
height_01 = height
if "证明权利或事项" in words:
top_02 = top
if words in my_title:
column_line = left + width if left + width < column_line else column_line
row_line = (top_01 + top_02 + height) / 2
head_list = []
left_list = []
right_list = []
for data in my_word_list:
if data[0] in my_title:
continue
if data[2] < row_line:
head_list.append(data)
elif data[3] < column_line:
for i in my_title:
data[0] = re.sub(i, "", data[0])
right_list.append(data)
else:
right_list.append(data)
# head 处理
head_dict = {}
left = 0
for data in head_list:
head_dict[data[3]] = data[0]
# 排序
head_dict = sorted(head_dict.items(), key=lambda x: x[0])
head_str = ""
for data in head_dict:
head_str += data[1]
print(head_str)
# right 处理
right_dict = {}
other_list = copy.deepcopy(right_list)
for i in range(len(my_title) - 2):
right_dict[my_title[i]] = right_list[i][0]
other_list.remove(right_list[i])
right_dict[my_title[-1]] = right_list[-1][0]
other_list.remove(right_list[-1])
# 其他处理
other_str = ""
for data in other_list:
if ":" in data[0]:
other_str += ";"
other_str += data[0]
right_dict[my_title[-2]] = other_str[1:]
print(right_dict)
运行效果如下:
冀(2019)**市不动产证明第00***19号
{'证明权利或事项': '抵押权', '权利人(申请人)': '中国**************分行', '义务人': '***', '坐落': '路南区*************号', '不动产单元号': '130202*************0118', '附记': '业务编号:20190**20', '其他': '产权证书号:冀(2019)**市不动产权第00****2号;抵押物类型:土地和房屋;抵押方式:一般抵押;担保债权数额:60.00万元;债权起止时间:2019年10月24日起2049年10月24日止'}
RPA中房产证的 OCR 识别的更多相关文章
- Atitit ocr识别原理 与概论 attilax总结
Atitit ocr识别原理 与概论 attilax总结 1.1. Ocr的过程与流程1 1.2. OCR不同技术细分略有不同,但大概原理是一样的. 即主要技术过程是:二值化(又叫归一化)----- ...
- 基于Python实现对PDF文件的OCR识别
http://www.jb51.net/article/89955.htm https://pythontips.com/2016/02/25/ocr-on-pdf-files-using-pytho ...
- OCR识别-python版(一)
需求:识别图片中的文字信息环境:windows系统 开发语言:python 使用工具类:1.pyocr 2.PIL 3.tesseract-ocr 步骤: 1.pyocr 网络通直接使用命令:pip ...
- 采用OCR识别自动识别财务报表
一. 财务报表有什么作用 财务报表又叫会计报表,包含:资产负债表.损益表.现金流量表三表.财务报表对企业经营状况有重要的参考意义: n 全面系统地揭示企业一定时期的财务状况.经营成果 ...
- AI时代的OCR识别技术浅析
人工智能这个词可谓是耳熟能详,近几年人工智能热潮再次席卷而来,引起轰动的要数google的AlphaGo,相继打败了围棋界的韩国选手李世石以及世界冠军柯洁,见证了人工智能发展的里程碑式的变革,人工智能 ...
- Python&selenium&tesseract自动化测试随机码、验证码(Captcha)的OCR识别解决方案参考
在自动化测试或者安全渗透测试中,Captcha验证码的问题经常困扰我们,还好现在OCR和AI逐渐发展起来,在这块解决上越来越支撑到位. 我推荐的几种方式,一种是对于简单的验证码,用开源的一些OCR图片 ...
- 例子:照片的OCR识别
来自ng的ml-003中 18_XVIII._Application_Example-_Photo_OCR 这是ng2013年在coursera上最后的一课了.这一系列的几个视频还是相比前面有些难懂, ...
- OCR识别-python3.5版
刚接触,啥子都不会,按着教程走 需求:识别图片中的文字信息环境:windows系统 开发语言:python3.5 使用工具类:1.pyocr 2.PIL 3.tesseract-ocr 步骤: 1.p ...
- 图片文字OCR识别-tesseract-ocr
帮助文件:https://github.com/tesseract-ocr/tesseract/blob/master/doc/tesseract.1.asc 下载地址:https://github. ...
随机推荐
- Python语法速查: 16. 时间日期处理
返回目录 (1)datetime模块 datetime模块可以处理时间和日期,其中包含以下类:date类.time对象.datetime对象.timedelt对象.tzinfo对象. ● date类 ...
- [PHP] php使用event扩展的io复用测试
先要安装event扩展,这样才可以使用libevent的事件机制 pecl install event 测试代码 //连接重用 //创建资源流的上下文 $context=stream_context_ ...
- 如何将pyqt5的qt-designer设计出来的 .ui 和 .qrc 文件转化成 .py 文件
一.pyrcc5的使用 1.1 作用 将 .qrc 资源文件转换成py文件,并在主程序中通过 import 引入 1.2 资源文件编写说明 创建一个icon.qrc,代码如下: <RCC> ...
- Java之继承性
为什么要有继承 多个类中存在相同属性和行为时,将这些内容抽取到单独一个类中,那么多个类无需再定义这些属性和行为,只要继承那一个类即可.其中,多个类可以称为子类,单独那一个类称为父类.超类或者基类. 继 ...
- Flutter竟然发布了1.5版本!!!!
2018年2月,Flutter推出了第一个Beta版本,在2018年12月5日,Flutter1.0版本发布,当时用了用觉得这个东西非常好用,对于当时被RN搞的头皮发麻的我来说简直是看到了曙光.而在昨 ...
- ES6-Symbol的用法 ,symbol在对象中的应用,改变值
ES6-Symbol的用法,,symbol在对象中的应用,改变值 let a = new String; let b = new Number; let c = new Boolean; let d ...
- 利用Dynamics 365 Customer Engagement的标准导入功能导入附件。
我是微软Dynamics 365 & Power Platform方面的工程师罗勇,也是2015年7月到2018年6月连续三年Dynamics CRM/Business Solutions方面 ...
- 微信小程序之文件系统初探
微信小程序之文件系统初探 1.文件下载 //下载文件 go_download: function() { var content = this; var baseUrl = "http:// ...
- easyui textbox setValue以及setText的使用技巧
1.先赋值Value,后赋值Text $('#Name').textbox('setValue', "11");$('#Name').textbox('setText', &quo ...
- How To Determine The Cause Of Lots Of Redo Generation Using LogMiner (Doc ID 300395.1)
How To Determine The Cause Of Lots Of Redo Generation Using LogMiner (Doc ID 300395.1) APPLIES TO: O ...