暑假都在弄这个,一开始以为是要弄一个通用的对表格进行分块和把内容全部识别,所以又分块又分行又把横线上的内容单独弄出来,后来说是对于已知的特定表格,所以最后都用python来写了,比较方便。在网上只找到一个比较巧妙的提取表格框架的方法,用横向和竖向的细长的条去腐蚀膨胀可以得到横线和竖线,拼在一起就是完整的表格框架,而且这样正好把一些小点和文字去除了。

这样的话因为有些线太细,就检测所有轮廓再加粗一次,上图为加粗后的表格框架和找到的表格块(这图有点问题。。。好的找不到了)。但这个方法有个问题就是表格位置必须比较正,如果倾斜角度较大则不行。所以要先对表格进行透视变换后摆正。这里使用的方法是用上图找到的表格框架,找到表格的四个顶点,再和其轮廓的外接矩形的四个顶点得到变换矩阵。这里还有个问题,就四个顶点和变换后的四个顶点必须是对应的,所以要对四个顶点进行排序,怎么对矩形的四个顶点进行排序,在网上也找到了一个比较好的方法,就是将得到的四个顶点先按照y坐标分成上下A、B两部分,再对A部分按x坐标从小到大排序,对B部分按x坐标降序排序,这样四个点就能按照顺时针排列了,对于没有定位标识的表格,只要表格不是倒着摆放或者过分倾斜都可以正确变换。然后还有一个问题就是这是用外接矩形作为变换后的表格,这样不同的表格则变换后的大小不一样,所以最后都resize到一个固定大小。

因为图片的表格可能不是矩形,所以是用opencv的cv2.approxPolyDP,拟合表格的四边形,找轮廓cv2.findcontours时选择SIMPLE的方式,轮廓存储的就是顶点。拟合多边形时为了尽量拟合出来的是四边形为不是多于四条边,可以把epsilon的值设置的较大些,官网的方式是用cv2.arclength计算轮廓的周长来设置epsilon

整个项目目录如图:

全部由python写的,为了统一,把之前C++写的一些函数用python重写了。

densenet  包含印刷体中文字符识别densenet+ctc模型

MnistRec 包含使用mnist训练的简单手写数字识别模型和多个数字分割的函数

preprocess 包含提取表格框等一些预处理函数,roiblock类文件

test_image 包含表单照片,roi区域截图,coordinates各roi的相对坐标及类型

test_result 识别结果输出

demo_new.py 入口程序

ocr.py 包含三种类型的roi识别函数

主程序demo_new.py流程:

步骤1

table_transform_roi可以对自动识别的表格区域进行手动动态调整,四个顶点

已按顺时针方向排序过(分成左上、右上、左下、右下四个顶点),table_roi

为透视变换后的表格图像,改变左侧顶点位置,可以在右侧窗口实时查看变换后

效果,大部分情况不需要手动调整。例如在表单照片倒置或者旋转90°,则可以

点击非顶点区域,四个顶点会循环交换一次。拖拽顶点可以调整顶点位置。

步骤2:

调整完选取区域后,会把表格部分resize到一个固定的大小,然后读取

coordinates中的相对坐标信息实例化多个roiblock对象,识别区域会显示在

表格上,在此窗口可以手动调整各个识别区域的大小和位置,拖拽区域左上绿

色点则可以改变框的大小,直接拖拽框则可以调整位置,在已知识别类容的类型

情况下,每个框都有特定的序号,故不可以随意更改摆放顺序。

对于定位和识别区域的问题暂时是可以这样了,识别的部分存在的问题是,印刷体可以很好的识别(网上找的训练好的汉字识别模型),关键是手写数字识别的问题,一是比如那个2015是粘连在一起的要先分开,二是手写数字的mnist数据集是国外的手写体与中国人写的数字差别比较大,识别效果不理想。手写汉字话暂时不考虑识别,只判断有没有签名即可,就根据二值化后的像素占比判断。

表格内容识别(python-opencv)(一)【9/8】相关推荐

  1. python手写汉字识别_中文简历表格提取,手写汉字识别(Python+OpenCV)

    原标题:中文简历表格提取,手写汉字识别(Python+OpenCV) 所有代码获取: 简历 网上对表格框的提取的相关资料较少,尤其是Python+OpenCV的实现方面. 整体流程 如今OpenCV官 ...

  2. 常用的表格检测识别方法-表格内容识别方法

    常用的表格检测识别方法 3.3 表格内容识别方法 表格识别的研究主要涉及两个方面,一方面是对单元格内的文本进行识别,这一步通常是在确定单元格区域后,利用较为稳定的光学字符识别方法(OCR)来实现,这一 ...

  3. 常用的表格检测识别方法——表格内容识别方法

    第三章 常用的表格检测识别方法 3.3表格内容识别方法 表格识别的研究主要涉及两个方面,一方面是对单元格内的文本进行识别,这一步通常是在确定单元格区域后,利用较为稳定的光学字符识别方法(OCR)来实现 ...

  4. 数字图像处理二维码识别 python+opencv实现二维码实时识别

    数字图像处理二维码识别 python+opencv实现二维码实时识别 特点: (1)可以实现普通二维码,条形码: (2)解决了opencv输出中文乱码的问题 (3)增加网页自动跳转功能 (4)实现二维 ...

  5. php-opencv身份证识别,python opencv实现证件照换底功能

    本文实例为大家分享了python opencv实现证件照换底功能的具体代码,供大家参考,具体内容如下 思路:先转到HSV空间,利用颜色提取背景制作掩模版mask,然后通过按位操作提取人像和制作新背景, ...

  6. 机器学习水果识别——python+opencv实现物体特征提取

    文章目录 一.用python+opencv实现物体特征值提取 1.读取图像.转为灰度图像并降噪 2.获取水果轮廓 将最大轮廓画入最开始的img图像并显示 将小于某一规模的轮廓删除 3.提取水果的面积周 ...

  7. python图片识别-Python+Opencv识别两张相似图片

    在网上看到python做图像识别的相关文章后,真心感觉python的功能实在太强大,因此将这些文章总结一下,建立一下自己的知识体系. 当然了,图像识别这个话题作为计算机科学的一个分支,不可能就在本文简 ...

  8. python opencv数字识别_基于模板匹配的手写数字识别(python+opencv)

    智能计算课第一周的实验是做基于模板匹配的手写数字识别,光听见就很感兴趣,于是决定认真做做这个实验,本实验基于python3+opencv的python版本,所用到的知识都比较简单,基本上边学边做,技术 ...

  9. 机器学习苹果识别——python+opencv实现物体特征提取

    以水果为例.要用机器学习来实现水果识别,无论是训练还是识别阶段都需要提取图片中水果的特征值.本篇将讲述如何提取水果的周长.面积.颜色.长度.宽度7个特征值. cv.findContours cv.fi ...

最新文章

  1. 牛!开创交互式电脑绘图先河,虚拟现实之父传奇
  2. android 清除应用程序数据,Android – 通过“清除数据”设置选项阻止正在删除的应用程序数据或文件...
  3. spring cloud+dotnet core搭建微服务架构:Api网关(三)
  4. linux之如何复制文件夹所有文件到其它文件夹
  5. python1~10阶乘while_Python3基础 while 阶乘
  6. 发票管理软件_企业为什么需要ERP企业管理软件?
  7. 再谈Jquery Ajax方法传递到action
  8. 3月4日见!Redmi Note 10系列屏幕升级:首次采用Super AMOLED屏
  9. 数据结构:队列的了解与示例(CPU处理任务的时间)
  10. 比较awk python: [文件]web日志信息统计 。 [命令]netstat命令状态统计
  11. 基于itchat实现微信群消息同步机器人
  12. 程序员常用不常见很难得的地址大全
  13. Vivado ML 2021.1 环境安装
  14. 手机连无线显示服务器超时,手机wifi为什么会连接超时
  15. 「大冰撸设计模式」java 创建型模式之单例模式
  16. 电脑重装系统,如何下载正版win10的iso
  17. Android中铃声总结【安卓源码解析一】
  18. aj6 stamps storm_AJ6黑红真假对比细节图评测
  19. 农学跨专业考研计算机,我是如何完成从农学(本科)-理学(硕士)-工学(博士)的跨专业之路 - 考研 - 小木虫 - 学术 科研 互动社区...
  20. 微分流形(流形)定义

热门文章

  1. 2M误码仪 TFN T1000M E1/数据传输分析仪
  2. ScheduledThreadPoolExecutor源码分析
  3. 常微分方程之欧拉法、隐式欧拉法、改进欧拉法以及梯形法的原理
  4. 开源项目:时光后台管理系统 前后端分离项目,后台系统模板 时光大魔王
  5. YNY-III型绝缘监测仪
  6. win7 64位纯净版安装教程
  7. 新媒体运营教程:要想把人留在直播间,人气直播间必备的8个技巧
  8. 招商头条:税务总局研究降低增值税率实施方案;宜昌签约20个项目总投资157.45亿元
  9. 从消费者角度评估RestFul的意义
  10. linux中openssh服务搭建,配置OPenSSH服务器