客户需求,识别一些证件内容,包括身份证、户口本、营业执照、银行卡以及房产证,前四个比较容易实现,不管是艺赛旗的 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 识别的更多相关文章

  1. Atitit  ocr识别原理 与概论 attilax总结

    Atitit  ocr识别原理 与概论 attilax总结 1.1. Ocr的过程与流程1 1.2. OCR不同技术细分略有不同,但大概原理是一样的. 即主要技术过程是:二值化(又叫归一化)----- ...

  2. 基于Python实现对PDF文件的OCR识别

    http://www.jb51.net/article/89955.htm https://pythontips.com/2016/02/25/ocr-on-pdf-files-using-pytho ...

  3. OCR识别-python版(一)

    需求:识别图片中的文字信息环境:windows系统 开发语言:python 使用工具类:1.pyocr 2.PIL 3.tesseract-ocr 步骤: 1.pyocr 网络通直接使用命令:pip ...

  4. 采用OCR识别自动识别财务报表

    一.         财务报表有什么作用 财务报表又叫会计报表,包含:资产负债表.损益表.现金流量表三表.财务报表对企业经营状况有重要的参考意义: n  全面系统地揭示企业一定时期的财务状况.经营成果 ...

  5. AI时代的OCR识别技术浅析

    人工智能这个词可谓是耳熟能详,近几年人工智能热潮再次席卷而来,引起轰动的要数google的AlphaGo,相继打败了围棋界的韩国选手李世石以及世界冠军柯洁,见证了人工智能发展的里程碑式的变革,人工智能 ...

  6. Python&selenium&tesseract自动化测试随机码、验证码(Captcha)的OCR识别解决方案参考

    在自动化测试或者安全渗透测试中,Captcha验证码的问题经常困扰我们,还好现在OCR和AI逐渐发展起来,在这块解决上越来越支撑到位. 我推荐的几种方式,一种是对于简单的验证码,用开源的一些OCR图片 ...

  7. 例子:照片的OCR识别

    来自ng的ml-003中 18_XVIII._Application_Example-_Photo_OCR 这是ng2013年在coursera上最后的一课了.这一系列的几个视频还是相比前面有些难懂, ...

  8. OCR识别-python3.5版

    刚接触,啥子都不会,按着教程走 需求:识别图片中的文字信息环境:windows系统 开发语言:python3.5 使用工具类:1.pyocr 2.PIL 3.tesseract-ocr 步骤: 1.p ...

  9. 图片文字OCR识别-tesseract-ocr

    帮助文件:https://github.com/tesseract-ocr/tesseract/blob/master/doc/tesseract.1.asc 下载地址:https://github. ...

随机推荐

  1. FS-Cache 调研

    最近需要使用到 FSCache,今天调研一下FS-Cache,主要记录一些索引,方便以后查阅: RedHat 文档:https://access.redhat.com/documentation/en ...

  2. pycharm报错:Process finished with exit code -1073741819 (0xC0000005)解决办法

    这个是几个月前的问题了,有小伙伴在CSDN问我咋解决的,那我今天在这边把这个问题解决办法分享下吧,免得大家把很多时间都浪费在安装排坑上面,有些坑虽然解决了还真不知道啥原因. 我的pycharm一直用的 ...

  3. sql语句复习(基础-提升-技巧-经典数据开发案例-sql server配置)

    1 基础 1.说明:创建数据库 CREATE DATABASE database-name charset=utf8 2.说明:删除数据库 drop database dbname 3.说明:备份sq ...

  4. fiddler 常用命令及快捷键

    1.搜索: ?  baidu.com 2.bpu 发起请求时中断 设置断点 bpu baidu.com 取消断点:bpu 3.bpafter  收到响应后中断 设置断点:bpafter baidu.c ...

  5. 记一起Java大对象引起的FullGC事件及GC知识梳理

    背景 最近发生了一起 Java 大对象引起的 FullGC 事件.记录一下. 有一位商家刷单,每单内有 50+ 商品.然后进行订单导出.订单导出每次会从订单详情服务取100条订单数据.由于 100 条 ...

  6. BeanUtils.populate()空字符串转换日期的解决办法

    我们在使用beanutils.populate()封装参数时,如果封装的字符串是空,在转换成date时会出现以上异常,此时可以在工具类中添加静态代码块即可解决:注意导入beanutils 包 impo ...

  7. vue-cli3构建ts项目

    1.构建项目 vue create xxx 上面的第一条,也就是 aaa 这一个选项在你第一次创建项目的时候是并不会出现的,只有你第一次创建完成项目后回提示你保存为默认配置模板,下次新建项目的时候就可 ...

  8. UIPageControl页面控制的控件

    #import "ViewController.h" #import "LazyScrollView.h" @interface ViewController ...

  9. CSAPP 2-1 - 信息的存储

    目录 0 基础概念及摘要 1 信息存储 1.1 十六进制表示法 1.2 字数据大小 1.3 寻址和字节顺序 0 基础概念及摘要 (1) 基础概念: 现代计算机存储和处理的信息以二进制信号表示 -- 0 ...

  10. 使用docker-compose部署springboot项目

    由于是单机测试,没有测试多主机的跨网络分布式请求. 项目是前后分离的,所以使用nginx作为前端服务器,后端是springboot则直接基于java8环境的容器上跑,cache用的redis,mysq ...