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. ...
随机推荐
- 使用admin的步骤、必知必会13条、单表的双下划线、外键的操作、多对多的操作:
MVC M: model 模型 与数据库交互 V: view 视图 HTML C:controller 控制器 流程 和 业务逻辑 MTV M:model ORM T:template 模板 HTML ...
- 小程序-picker组件选择数量
<!-- detail.wxml --> <view class="picker"> <picker range="{{range}}&qu ...
- 图解SynchronousQueue原理-公平模式
SynchronousQueue原理详解-公平模式 一.介绍 SynchronousQueue是一个双栈双队列算法,无空间的队列或栈,任何一个对SynchronousQueue写需要等到一个对Sync ...
- linux中服务(service)管理
一.介绍 服务(service) 本质就是进程,但是是运行在后台的,通常都会监听某个端口,等待其它程序的请求,比如(mysql , sshd 防火墙等),因此我们又称为守护进程,是Linux 中非常重 ...
- SimpleDateFormat类简单学习
一.简介 SimpleDateFormat是一个格式化和解析日期的具体类,其可以将时间转化为指定格式的日期字符串,也可以将具有格式的日期字符串转换为时间. formatting (date → tex ...
- python链式调用REST API把参数放到URL中
需求格式:GET /users/:user/repos 程序: class Chain(object): def __init__(self,path=''): self._path=path def ...
- Winform中在使用VS+svn进行协同开发时添加引用时的相对路径和绝对路径的问题
场景 使用Visual Studio 开发Winform程序,使用SVN进行项目版本管理. 在添加引用时,会出现在A电脑中添加了绝对路径的引用,在B电脑中就会出现找不到 并且将此引用标识为?的状态. ...
- ASP.Net 连接多个数据库之间的切换
本次两个的两个数据是SQL Server 和ORCAL 首先在Web.congfig中 <connectionStrings> </connectionStrings>里面添加 ...
- 利用Azure虚拟机安装Dynamics 365 Customer Engagement之八:安装报表扩展及最新更新
我是微软Dynamics 365 & Power Platform方面的工程师罗勇,也是2015年7月到2018年6月连续三年Dynamics CRM/Business Solutions方面 ...
- 剑指offer 27:二叉搜索树与双向链表
题目描述 输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表.要求不能创建任何新的结点,只能调整树中结点指针的指向. 解题思路 采用中序遍历遍历二叉树,利用二叉排序树的特性,顺次连接节点,形成 ...