前言:
在对文本图像进行分析时,除了常规的ocr之外如果文本中有表格结构如何同时对表格区域的文本部分进行ocr并且保留表格的结构是一个非常迫切而又实际的需求。然而,关于文本表格分析方面的资源却比较稀缺,博主搜寻了很长时间也不过找到几篇论文以及效果不怎么样的OpenCV方法,秉持着自己动手丰衣足食的想法博主走上了看论文写代码的不归路,这期间是怎样的惊心动魄、扣人心弦就不详细记录了,虽然最终的结果不能商用化但是作为自己的一次探索仍然是很有意义的。
Chapter 1
为什么需要提取文本图像中的表格区域?如果你做过OCR或者有一定了解,那么考虑这样一个场景:一张论文截图,有图有表还有公式,如果直接做OCR,首先纯文本区域应该是没问题的,对于表格区域如果你用的ocr接口效果不错那么应该可以识别出表格中的文字并且保留它们的相对位置,但是表格的结构肯定是被抛弃了的。虽然乍一看去没什么不对,但是没有线的表格是没有灵魂的。。。。
那么我们如果检测并且保留表格中的线也即是表格结构呢?两步走的策略:一、找出图像中表格的位置,二、检测出表格中的直线。
先说第一个问题,从图像中检测出表格。如果你对object-detection有一定了解,那么很自然的你会考虑Faster-rcnn、YOLO、SSD等经典的detector,因为表格完全可以看作是一种object。图一是基于Faster-rcnn以及图像颜色空间变换的检测结果。
可以看到,Faster-rcnn完全可以胜任这个工作。虽然不是特别的精确,但是还可以接受。
Chapter 2
网络的结构与原理。结构就是常见的Faster-rcnn的结构,只不过是对数据做了Distance-transformation的处理,再有就是调整anchor的scale以及ratio使其可以检测出表格结构。详见图二。
基本结构还是faster-rcnn,不同的地方是文档图像的预处理。作者对训练图像做了相应的变换(距离变换)使其能够更好的适应faster-rcnn从而得到较好的检测结果,毕竟原始的fater-rcnn是做常规物体检测,为了使其能够很好的兼容表格这一非常规物体检测,必须要对表格数据集做相应的变换。
作者在原文中是这样解释的:
由于faster-rcnn是被设计用于检测自然图像中的object,所以为了使其能够很好的兼容表格物体的检测必须对表格图像做变换使其能够贴近自然图像。之所以选择距离变换是因为距离变换通过计算文档图像中文本区域和空白区域之间的距离可以更好的突出文本中的表格区域。同时为了丰富表格区域的特征,作者用了三种不同的距离来对图像做变换。
procedure IMAGE TRANSFORMATION(I)
b = EuclideanDistanceTransform(I)
g = LinearDistanceTransform(I)
r = MaxDistanceTransform(I)
P = ChannelMerge(b,g,r)
return P
Chapter 3
训练模型,推荐Table Bank 数据集,按照github上的方式发邮件申请,回复附带下载链接。原文中用了9个anchor,但是博主发现3个ratio,5个scale,15个anchor的效果要更好一些,[16,32,64,128,256], [1,0.5,2]。其他参数就按照常规的faster-rcnn设置即可。
实际测试结果如图一。另外,存在论文中提到的部分检测,过分割,以及错误检测等问题。一个小建议,如果要处理的表格结构是线条很规整的,推荐优先使用传统的表格检测方法(Opencv),但是如果表格的结构较为复杂则推荐深度学习,泛化性能要更好一些,OpenCv的调参数一言难尽。。。。。。
Update:
新增用于生成annotation.txt的脚本。
Reference
论文:https://www.researchgate.net/publication/320243569_Table_Detection_Using_Deep_Learning Table Detection Using Deep Learning
参考文章:https://blog.goodaudience.com/table-detection-using-deep-learning-7182918d778
以上链接可能需要科学网才能打开,中文的资料不是很多,质量也一言难尽。
GitHub: https://github.com/luckydog5/TabelDetection