今天把表格识别与应用的相关基础技术梳理了一下:
越想越多,就成上面的样子了。要想都做好,这估计就够组一个十人的算法团队了。
逐一介绍一下:
1. 表格检测:类似目标检测,检测出页面哪些位置有表格,得到表格的坐标;
2. 表格线检测:检测出表格线段的坐标与交点坐标,传统算法基于图像特征进行计算,但是这种算法目前基本已经被抛弃,因为精度跟深度学习的通常差太多,而且只能检测有表格线的表格,还通常比较耗时。现在主流算法都是使用深度学习模型进行检测线段端点坐标,无线表格也能预测出哪里应该有线段,这是接下来要做的;
3. 单元格结构还原:有了表格线,还需要有算法还原单元格的结构。现在也有端到端模型,直接以单元格结构为目标进行预测,不过据大家评价效果通常没有二阶段算法的好。这里应该也有深度学习的算法可以预测,不过目前了解不多,主要是使用算法实现,涉及的算法就比较多。例如判断哪些线段在一个表格内需要聚类,判断哪些线段在同一水平上也需要聚类,哪些线段可以组成单元格等。这样使用算法也有问题,很容易出问题,规则越来越多,难维护。
4. 文本框检测与文字识别:这就是ocr的部分,但是基于表格就会有一些特点,例如单元格内的单个数字很容易漏识别,文本行跨单元格怎么处理等。
5. 跨页单元格合并:在文档里表格跨页的情况是比较常见的,这里也有两种常见的情况:一是单元格没有跨页拆分,二是一个单元格在跨页时被拆成了两个单元格。第一种情况通常还比较好处理,第二种就比较难处理,很可能表格结构都是不完整的,整个业界估计也没有太好的处理方案。
6. 表格标题识别:这应该是一个相对容易的技术点,只是目前做表格识别的可能都还没有做到这么细。
7. 表头识别:这个看起来也比较简单,但是情况也比较复杂,因为表头可能不止一行,还可能合并了单元格等。
8. 键值对识别:有些表格可能并不是按列组织的,而是键值对的形式,例如去办事时填的表格。目前也有做表格这方面的,但是实际测试效果很糟糕,也许针对特定场景训练之后效果可以变好,例如单独训练模型实现某种表格的识别,但是这样就各种场景都要训练,成本大了,而且新表格还层出不穷。
9. 表格数据对比:只要前面的基础打得好,数据对比相对就简单些,也是有不少坑,通常对比是,先把表格匹配上,然后把单元格匹配上,最后比对单元格的文本。但是这其中的坑就有,如果插入了一行或者一列,或者合并拆分了单元格等,这些情况处理起来并不是那么容易的。
10. 表格信息提取:要抽取的内容无非是整个表格,某行,某列,或者某个单元格等。极度依赖于前面各任务的识别准确性。
11. 表格信息存储与检索:这看起来并不是一个难事,但是基本上还没有看到哪个有实现了。如果都是同一种表格结构的表格,这确实很容易,只要定义好数据库字段就很容易搞定,但是对于开放领域下的表格数据存储与检索就没那么简单了,表格结构本身就是多种多样的,字段肯定定义不了。需要前面的任务都实现的比较好,才有可能把存储和检索做好。
预处理技术
上面说的都还是直接的技术,预处理技术还有不少:
1. 倾斜纠正:如果图像本身是倾斜的,识别效果会大打折扣。
2. 翻转纠正:有些表格本身是横着的,但却竖着放,例如PDF文档里有时就会有这种,当它的宽度比较大时。
3. 扭曲纠正:这种通常是拍照时没有放平导致的,有些算法可以实现,但是效果估计也一般。
4. 去噪:图像上可能有干扰噪声,如杂质,水印,印章等,这些对识别也会产生很大的影响。