表格内容识别(python-opencv)(一)【9/8】
暑假都在弄这个,一开始以为是要弄一个通用的对表格进行分块和把内容全部识别,所以又分块又分行又把横线上的内容单独弄出来,后来说是对于已知的特定表格,所以最后都用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】相关推荐
- python手写汉字识别_中文简历表格提取,手写汉字识别(Python+OpenCV)
原标题:中文简历表格提取,手写汉字识别(Python+OpenCV) 所有代码获取: 简历 网上对表格框的提取的相关资料较少,尤其是Python+OpenCV的实现方面. 整体流程 如今OpenCV官 ...
- 常用的表格检测识别方法-表格内容识别方法
常用的表格检测识别方法 3.3 表格内容识别方法 表格识别的研究主要涉及两个方面,一方面是对单元格内的文本进行识别,这一步通常是在确定单元格区域后,利用较为稳定的光学字符识别方法(OCR)来实现,这一 ...
- 常用的表格检测识别方法——表格内容识别方法
第三章 常用的表格检测识别方法 3.3表格内容识别方法 表格识别的研究主要涉及两个方面,一方面是对单元格内的文本进行识别,这一步通常是在确定单元格区域后,利用较为稳定的光学字符识别方法(OCR)来实现 ...
- 数字图像处理二维码识别 python+opencv实现二维码实时识别
数字图像处理二维码识别 python+opencv实现二维码实时识别 特点: (1)可以实现普通二维码,条形码: (2)解决了opencv输出中文乱码的问题 (3)增加网页自动跳转功能 (4)实现二维 ...
- php-opencv身份证识别,python opencv实现证件照换底功能
本文实例为大家分享了python opencv实现证件照换底功能的具体代码,供大家参考,具体内容如下 思路:先转到HSV空间,利用颜色提取背景制作掩模版mask,然后通过按位操作提取人像和制作新背景, ...
- 机器学习水果识别——python+opencv实现物体特征提取
文章目录 一.用python+opencv实现物体特征值提取 1.读取图像.转为灰度图像并降噪 2.获取水果轮廓 将最大轮廓画入最开始的img图像并显示 将小于某一规模的轮廓删除 3.提取水果的面积周 ...
- python图片识别-Python+Opencv识别两张相似图片
在网上看到python做图像识别的相关文章后,真心感觉python的功能实在太强大,因此将这些文章总结一下,建立一下自己的知识体系. 当然了,图像识别这个话题作为计算机科学的一个分支,不可能就在本文简 ...
- python opencv数字识别_基于模板匹配的手写数字识别(python+opencv)
智能计算课第一周的实验是做基于模板匹配的手写数字识别,光听见就很感兴趣,于是决定认真做做这个实验,本实验基于python3+opencv的python版本,所用到的知识都比较简单,基本上边学边做,技术 ...
- 机器学习苹果识别——python+opencv实现物体特征提取
以水果为例.要用机器学习来实现水果识别,无论是训练还是识别阶段都需要提取图片中水果的特征值.本篇将讲述如何提取水果的周长.面积.颜色.长度.宽度7个特征值. cv.findContours cv.fi ...
最新文章
- 牛!开创交互式电脑绘图先河,虚拟现实之父传奇
- android 清除应用程序数据,Android – 通过“清除数据”设置选项阻止正在删除的应用程序数据或文件...
- spring cloud+dotnet core搭建微服务架构:Api网关(三)
- linux之如何复制文件夹所有文件到其它文件夹
- python1~10阶乘while_Python3基础 while 阶乘
- 发票管理软件_企业为什么需要ERP企业管理软件?
- 再谈Jquery Ajax方法传递到action
- 3月4日见!Redmi Note 10系列屏幕升级:首次采用Super AMOLED屏
- 数据结构:队列的了解与示例(CPU处理任务的时间)
- 比较awk python: [文件]web日志信息统计 。 [命令]netstat命令状态统计
- 基于itchat实现微信群消息同步机器人
- 程序员常用不常见很难得的地址大全
- Vivado ML 2021.1 环境安装
- 手机连无线显示服务器超时,手机wifi为什么会连接超时
- 「大冰撸设计模式」java 创建型模式之单例模式
- 电脑重装系统,如何下载正版win10的iso
- Android中铃声总结【安卓源码解析一】
- aj6 stamps storm_AJ6黑红真假对比细节图评测
- 农学跨专业考研计算机,我是如何完成从农学(本科)-理学(硕士)-工学(博士)的跨专业之路 - 考研 - 小木虫 - 学术 科研 互动社区...
- 微分流形(流形)定义