OCR - tesseract - 提取表格数据中的数字

OCR - tesseract - Extract numbers in tabular data

我有一堆经过预处理的表格,看起来与这个相似:

玩了一会儿参数后,我发现这个命令给了我不错的结果:

tesseract my_img.png out -c tessedit_char_whitelist="0123456789.E%-" --psm 6

不幸的是,它不能满足我的需求。请注意输出中有些列没有分开,并且缺少一些减号。

我可以做些什么来改善结果?

0.015 1.0010.623 0.09911.850.0272 0.1% 4.0 0.03%
0.020 1.0030.304 0.3211404-0.2144 0.0% 4.0 0.02%
0.030 1.0080.370 0.26214.040.1718 0.1% 3.0 0.06%
0.040 1.0170.393 0.23814.150.1412 0.2% 0.5 0.10%
0.050 1.0300.408 0.22813.76-0.1346 0.4% 0.5 0.17%
0.060 1.9031.408 0.08518.32-0.0988 15.2% 40. 7.47%
0.080 1.7390.609 0.23516.120.2033 2.2% 35. 1.23%
0.1001.6480.242-0.00619.35 0.0590 0.4% 0.5 0.17%
0.150 1.4330.076 0.62913.32-0.3336 1.5% 2 0.75%
0.2001.4880.148 0.47913.91-0.2602 2.2% 0.5 0.96%
0.3001.664-0.303 0.31614.000.2044 2.8% 0.5 1.25%
0.400-1.883.-0.408 0.24213.70-0.1576 3.0% 0.5 1.40%
0.5002.022-0.516 0.18613.77.-0.1282 3.6% 0.5 1.60%
0.6001.9750.625 0.13413.80-0.0948 3.0% 0.5 1.38%
0.8002.0540.709 0.10113.64-0.0763 2.8% 0.5 1.34%
1.00 2.0250.790 0.07414.55-0.0629 2.6% 0.5 1.28%
1.50 1.8990.912 0.03313.360.0360 1.2% 5 0.72%
2.00 1.7950.889 0.049-13.34-0.0585 2.5% 0.5 1.35%
3.00 1.6250.866 0.06813.44-0.0887 6.3% 0.5 2.67%
4.00 1.4900.854 0.08113.71-0.1057 8.0% 0.5 3.34%
5.00 1.6160.713 0.14514.15--0.1708 7.7% 0.5 4.29%
6.00 1.4820.828 0.10014.26-0.1177 11.6% 0.5 4.23%
8.00 1.4660.820 0.11614.21-0.1362 9.0% 0.5 3.85%
10.00 1.433-0.938 0.08714.14-01117 8.2% 0.5 3.54%
15.00 14151.120 0.06013.92-0.0949 7.0 0.5 3.26%

我使用 opencvpytesseract 解决了这个问题。我的解决方案受到 .

的启发
  1. 此过程的关键是对图像进行良好的预处理。在原始问题的图像中,您可以在右侧最后一列之前看到一小块黑色像素。必须清除这些斑点!因为我只有几个 table 遇到这个问题,所以我使用了 GIMP。

  2. 检测 table 中的列,方法是对反转的灰度图像应用膨胀步骤。通过选择适当的迭代次数,列就形成了,也可以发现减号。

  1. cv2.boundingRect(cnt) 可以裁剪出单列并将它们保存到磁盘。

  2. pytesseract应用于不同的列,使用与原始问题中相同的选项。

  3. 检测减号:我很幸运,只有第 4 列和第 6 列出现减号,而我的 table 恰好有 25 行(因此,每行的高度 = 图像的高度 / 25)。因此,采用这些列,将列裁剪为 40px 宽度(这是基于反复试验的猜测)。作物现在应该有几个白色矩形,减号所在的位置。检测这些矩形的轮廓。计算每个轮廓的质心。质心的 y 坐标用于查找减号所在行的编号。对 OCR 结果应用更正(在需要时)。

  4. 将不同的列合并到一个 CSV 文件中。

编辑:通过这个程序,我得到了大约 98.5% 的准确率。