使用 OpenCV 检测 table

Detect table with OpenCV

我经常使用扫描文件。论文包含 tables(类似于 Excel tables),我需要手动将其输入计算机。更糟糕的是,tables 可以有不同数量的列。手动将它们输入 Excel 至少可以说是平凡的。

我想如果我能把一个程序放到 OCR 上,我可以节省一周的工作时间。是否可以使用 OpenCV 和 OCR 检测到检测到的图像坐标后面的文本来检测 headers 文本区域。

我能否在 OpenCV 的帮助下实现这一点,还是我需要完全不同的方法?

编辑:示例 table 实际上只是一个标准 table,与您在 Excel 和其他 spread-sheet 应用程序中看到的类似,见下文。

这个问题似乎有点老,但我也在研究类似的问题并得到了我自己的解决方案,我在这里解释一下。

对于使用任何 OCR 引擎阅读文本,要获得良好的准确性存在许多挑战,其中包括以下主要情况:

  1. 由于图像质量不佳/背景区域不需要 elements/blobs 而存在噪点。这将需要一些 pre-processing 之类的噪声去除,这可以使用高斯滤波器或普通中值滤波器方法轻松完成。这些也可以在 opencv.

  2. 中找到
  3. 图像方向错误:由于方向错误,OCR引擎无法正确分割图像中的线条和文字,从而给出最差的准确性。

  4. 行的存在:在进行单词或行分割时,OCR 引擎有时也会尝试将单词和行合并在一起,从而处理错误的内容,从而给出错误的结果。 还有其他问题,但这些是基本问题。

在这种情况下,我认为扫描图像质量非常好且简单,可以使用以下步骤解决问题。

  1. 简单的图像二值化将删除背景内容,只留下必要的内容,如此处所示。
  2. 现在我们必须删除在本例中为表格网格的行。这也可以使用连接组件和删除大连接组件来识别。因此,我们需要提供给 OCR 引擎的最终图像将如下所示。

  3. 对于 OCR,我们可以使用 Tesseract 开源 OCR 引擎。我从 OCR 得到以下结果:

    字幕标题

    header! header2 header3

    row1cell1 row1cell2 row1cell3

    row2cell1 row2cell2 row2cell3

  4. 正如我们在这里看到的,结果是相当准确的,但也有一些问题,比如 header!应该是header1,这是OCR引擎理解错了!与 1. 这个问题可以通过使用基于正则表达式的操作进一步处理结果来解决。

在 post 处理 OCR 结果后,可以对其进行解析以读取行值和列值。

在这种情况下,这里还可以使用 sheet 标题、标题和普通单元格值的字体信息进行分类。