OCR软件能否可靠地从表中读取值?

时间:2011-05-30 07:31:46

标签: ocr

OCR Software是否能够将以下图像可靠地转换为值列表?
Table of values

更新

更详细地说,任务如下:

我们有一个客户端应用程序,用户可以在其中打开报告。此报告包含值表。 但并不是每个报告看起来都一样 - 不同的字体,不同的间距,不同的颜色,也许报告包含许多具有不同行数/列数的表...

用户选择包含表格的报告区域。使用鼠标。

现在我们想要使用我们的OCR工具将选定的表转换为值。

当用户选择矩形区域时,我可以要求提供额外信息 协助OCR流程,并要求确认值已被正确识别。

它最初将是一个实验项目,因此最有可能使用OpenSource OCR工具 - 或者至少一个不需要花费任何资金用于实验目的。

8 个答案:

答案 0 :(得分:23)

简单回答是,您应该选择正确的工具。

我不知道开源是否能够在这些图像上获得接近100%的准确度,但根据这里的答案可能是肯定的,如果您花一些时间进行培训并解决表格分析问题以及类似的问题。< / p>

当我们谈论像ABBYY或其他的纪念性OCR时,它将提供99%+开箱即用的准确性,它将自动检测表格。没有训练,没有任何东西,只是工作。缺点是你必须为它支付$$。有些人会反对,对于开源来说,你需要花时间来设置和维护 - 但是每个人都在这里决定自己。

然而,如果我们谈论纪念工具,实际上还有更多的选择。这取决于你想要什么。像FineReader这样的盒装产品实际上是将输入文档转换为Word或Excell等可编辑文档。由于您实际上想要获取数据,而不是Word文档,您可能需要查看不同的产品类别 - 数据捕获,基本上是OCR以及一些在页面上查找必要数据的附加逻辑。如果是发票,可以是公司名称,总金额,到期日,表格中的行项目等。

数据捕获是一个复杂的主题,需要一些学习,但正确使用可以在从文档中捕获数据时保证准确性。它使用不同的规则进行数据交叉检查,数据库查找等。必要时,它可以发送数据进行手动验证。企业广泛使用Data Capture应用程序每月输入数百万个文档,并且严重依赖于在他们的日常工作流程中提取的数据。

还有OCR SDK ofcourse,它将为您提供识别结果的API访问权限,您将能够编写如何处理数据。

如果您更详细地描述您的任务,我可以为您提供建议更容易的方向。

<强> 更新

所以你所做的基本上是数据捕获应用程序,但不是完全自动化的,使用所谓的“点击索引”方法。市场上有许多类似的应用程序:您扫描图像和操作员点击图像上的文本(或在其周围绘制矩形),然后将字段填充到数据库。当处理的图像数量相对较少,并且手动工作量不足以证明全自动应用程序的成本合理时,这是一种很好的方法(是的,有完全自动化的系统可以做不同字体,间距,布局,数量的图像表格中的行等等。)

如果你决定开发东西而不是购买,那么你需要的就是选择OCR SDK。你打算用自己写的所有UI,对吧?最大的选择是决定:开源还是商业。

据我所知,最佳开源是tesseract OCR。它是免费的,但表分析可能存在实际问题,但使用手动分区方法时,这应该不是问题。至于OCR准确 - 人们经常训练OCR字体以提高准确性,但这不应该是你的情况,因为字体可能不同。所以你可以试试tesseract,看看你会得到什么准确性 - 这将影响手动工作量来纠正它。

Commertial OCR将提供更高的准确性,但会花费你的钱。我认为无论如何你应该看看它是否值得,或者tesserack对你来说已经足够了。我认为最简单的方法是下载像FineReader这样的盒子OCR产品的试用版。您将很好地了解OCR SDK的准确性。

答案 1 :(得分:19)

如果您的表格中始终有实线边框,则可以尝试此解决方案:

  
      
  1. 找到每页上的水平和垂直线条   黑色像素)
  2.   
  3. 使用线坐标
  4. 将图像分割为单元格   
  5. 清理每个单元格(删除边框,阈值为黑白)
  6.   
  7. 对每个单元格执行OCR
  8.   
  9. 将结果汇总到2D数组
  10.   

否则你的文档有一个无边框表,你可以尝试按照这一行:

  

光学字符识别是非常了不起的东西,但事实并非如此   永远完美。为了获得最佳结果,有助于使用   最干净的输入你可以。在我最初的实验中,我发现了   在整个文档上执行OCR实际上工作得很好   只要我删除了单元格边框(长水平和垂直   线)。但是,该软件将所有空白压缩为一个空格   空的空间。由于我的输入文档有多列   每列中有几个单词,单元格边界就丢失了。   保持细胞之间的关系是非常重要的,所以一个   可能的解决方案是绘制一个独特的字符,如每个字符“^”   细胞边界 - OCR仍会识别的东西,我   以后可以用来拆分结果字符串。

我在此链接中找到了所有这些信息,要求Google“OCR to table”。作者发表了a full algorithm using Python and Tesseract两个开源解决方案!

如果你想试试Tesseract的力量,也许你应该试试这个网站:

http://www.free-ocr.com/

答案 2 :(得分:5)

你在谈论哪种OCR?
您是否会根据该OCR开发代码,或者您将使用现成的东西?

供参考: Tesseract OCR

它已经实现了文档读取可执行文件,因此您可以将整个页面提供给它,它将为您提取字符。它很好地识别空白区域,它可能能够帮助制作标签间距。

答案 3 :(得分:4)

自从98年以来,我一直是OCR扫描文档。对于扫描的文档,这是一个反复出现的问题,特别是那些包含旋转和/或倾斜页面的文档。

是的,有几个很好的商业系统,有些可以提供,一旦配置良好,非常好的自动数据挖掘速率,只要求那些非常退化的领域的操作员帮助。如果我是你,我会依赖其中一些。

如果商业选择威胁到您的预算,OSS可以提供​​帮助。但是,&#34;没有免费午餐&#34;。因此,您必须依靠一堆量身定制的脚本来构建一个经济实惠的解决方案来处理您的大量文档。幸运的是,你并不孤单。事实上,在过去的几十年里,很多人一直在处理这个问题。所以,恕我直言,本文提供了这个问题的最佳和简明的答案:

https://datascience.blog.wzb.eu/2017/02/16/data-mining-ocr-pdfs-using-pdftabextract-to-liberate-tabular-data-from-scanned-documents/

它的阅读值得!作者提供了他自己的有用工具,但文章的结论非常重要,可以让你对如何解决这类问题有一个良好的心态。

&#34;没有银弹。&#34; (Fred Brooks,The Mitical Man-Month

答案 4 :(得分:3)

这实际上取决于实施。

有一些参数会影响OCR的识别能力:
1. OCR的培训情况 - 示例数据库的大小和质量
2.如何训练检测“垃圾”(除了知道什么是字母,你还需要知道什么不是字母)。
3. OCR的设计和类型
4.如果是Nerural Network,Nerural Network结构会影响其学习和“决定”的能力。

所以,如果你不是自己制作一个,那么只要你找到一个合适的东西就可以测试不同种类。

答案 5 :(得分:3)

您可以尝试其他方法。使用tesseract(或其他OCRS),您可以获得每个单词的坐标。然后,您可以尝试通过vercital和horizo​​ntal坐标对这些单词进行分组,以获得行/列。例如,区分空白区域和制表符空间。获得好结果需要一些练习,但这是可能的。使用此方法,您可以检测表,即使表使用不可见的分隔符 - 没有行。单词坐标是表格识别的坚实基础

答案 6 :(得分:3)

我们也一直在努力解决在表格中识别文本的问题。有两种解决方案可以开箱即用,ABBYY Recognition Server和ABBYY FlexiCapture。 Rec Server是一种基于服务器的大容量OCR工具,用于将大量文档转换为可搜索格式。虽然它可用于这些类型的API,我们建议使用FlexiCapture。 FlexiCapture可以对表格格式内的数据提取进行低级别控制,包括自动检测页面上的表格项目。它提供完整的API版本,没有前端或我们销售的现成版本。如果你想了解更多,请联系我。

答案 7 :(得分:0)

以下是对我有用的基本步骤。如果您需要对图像进行任何旋转以校正偏斜,则所需的工具包括Tesseract,Python,OpenCVImageMagick

  1. 使用Tesseract检测旋转,然后ImageMagick进行移动修复。
  2. 使用OpenCV查找和提取表。
  3. 使用OpenCV从表中查找并提取每个单元格。
  4. 使用OpenCV裁剪并清理每个单元,以确保不会使OCR软件感到困惑。
  5. 使用Tesseract对每个单元格进行OCR。
  6. 将每个单元格的提取文本合并为所需的格式。

每个步骤的代码都很详尽,但是如果您要使用python包,则如下所示。

pip3 install table_ocr
python3 -m table_ocr.demo https://raw.githubusercontent.com/eihli/image-table-ocr/master/resources/test_data/simple.png

该软件包和演示模块会将下表转换为CSV输出。

example table with 3 columns and 6 rows

Cell,Format,Formula
B4,Percentage,None
C4,General,None
D4,Accounting,None
E4,Currency,"=PMT(B4/12,C4,D4)"
F4,Currency,=E4*C4

如果您需要进行任何更改以使代码适用于不同宽度的表格边框,请在https://eihli.github.io/image-table-ocr/pdf_table_extraction_and_ocr.html

处进行详细注释