文章目录
前言
实现简单的横竖表格图片的识别,提取表格并生成对应的Word文档
- 表格检测(Table Detection)任务是从一个页面中检测出表格所在的区域
- 表格结构识别(Table Structure Recognition)任务则是在检测到的表格区域的基础上,进一步将表格的内容与逻辑结构识别出来
本篇文章采用的传统方法实现的,在复杂场景下的鲁棒性有所不足,故之后采用了深度学习的方法进行了重新实现(暂定为1.0版本)
其中有些地方只是记录一下实现的思路,具体实现由于公司项目具有极高的商业价值,出于尊重和保护,我不能将所以的实现细节所完全表述,以及代码不能够开源,望谅解。(出于相互学习,朋友可以联系我,相互交流😊😊😊)
一、整体识别流程
![](https://i-blog.csdnimg.cn/blog_migrate/470b46e12eb298c94714765841bcd81b.png)
![](https://i-blog.csdnimg.cn/blog_migrate/71f61b7ecc99e8b9e008d02440be4499.png)
![](https://i-blog.csdnimg.cn/blog_migrate/2272d8fd062b8b046193d51b8f49578e.png)
二、去印章:remove_mark
step 1: 为了加快后面的印章处理速度,首先进行图片的 resize 操作;
step 2: 遍历图片像素点,将图片的部分位置灰度化,突出红色区域,以便寻找红色轮廓;
step 3: 分离通道,利用红色通道和蓝色通道进行异或,突出 mask 区域;
step 4: 利用 mask,进行印章位置的寻找,可能也会有其他 contour 的干扰;
step 5: 对上面的可疑区域(包含印章部分)进行处理。
三、寻找表格区域:get_pt
对去完印章的图片进行处理,寻找到表格位置,返回表格坐标点位置信息;
对去完印章的图片寻找 contour,利用 contour 的面积以及投影的长度来判定是否属于表格;
四、图片分割:TransformTable
图片分割,根据 pt 值将图片分为 文字区域 和 表格区域:TransformTable
五、文本部分检测
六、文本部分识别
七、表格部分的处理
step 1: 提取表格区域部分;
step 2: 提取表格的 mask : FindContours
step 3: 通过 mask,寻找表格内部的 cell:FindBlocks
step 4: 表格 json 初始化以及位置的计算:table_json_XH
step 5: 表格内部的识别:可参考上面的流程图即可明了。
八、识别结果
1. 速度对比
与其他算法,我们的算法速度有明显的优势。
以下图为例,在同样准确率情况下,我们的算法只需要 0.623s
:
而其他表格识别算法需要 1.985s
:
2. 鲁棒性
2.1 倾斜不会影响识别结果
2.2 旋转不会影响识别结果:
2.3 背景白平衡不会影响识别结果: 文字识别没有问题,这张图是公司随机生成的一些文字
2.4 复杂结构表格识别: