我经常使用扫描文件。这些文件包含我需要手动输入计算机的表格(类似于Excel表格)。为了使任务更糟,表可以具有不同数量的列。手动将它们输入Excel是至关重要的。
如果我能把程序放到OCR上,我想我可以节省一周的工作时间。是否可以使用OpenCV检测标题文本区域,并检测检测到的图像坐标后面的文本。
我可以在OpenCV的帮助下实现这一目标,还是需要采用完全不同的方法?
编辑:示例表实际上只是一个标准表,类似于您在Excel和其他电子表格应用程序中可以看到的内容,请参见下文。
答案 0 :(得分:5)
这个问题看起来有点旧,但我也在研究类似的问题并得到了我自己的解决方案,我在这里解释。
对于使用任何OCR引擎阅读文本,有很多挑战,以获得良好的准确性,包括以下主要案例:
由于背景区域中的图像质量差/不需要的元素/斑点而存在噪声。这将需要一些预处理,如噪声消除,这可以使用高斯滤波器或普通中值滤波器方法轻松完成。这些也可以在opencv。
图像方向错误:由于方向错误,OCR引擎无法正确分割图像中的线条和单词,从而导致精度最低。
在这种情况下,我认为扫描图像质量非常好而且简单,可以使用以下步骤解决问题。
现在我们必须删除在这种情况下是表格网格的行。这也可以使用连接组件识别并删除大型连接组件。因此,我们需要输入OCR引擎的最终图像将如下所示。
对于OCR,我们可以使用Tesseract开源OCR引擎。我从OCR得到了以下结果:
标题标题
头! header2 header3
row1cell1 row1cell2 row1cell3
row2cell1 row2cell2 row2cell3
正如我们在这里看到的那样,结果非常准确,但也存在一些问题 标题!应该是 header1 ,这是因为OCR引擎误解了!使用基于Regex的操作进一步处理结果可以解决此问题。
在对OCR结果进行后处理后,可以对其进行解析以读取行和列值。
此外,在这种情况下,为了对表格标题,标题和正常单元格值进行分类,可以使用它们的字体信息。