65.9K
CodeProject 正在变化。 阅读更多。
Home

通过自动对齐改进表单识别结果

emptyStarIconemptyStarIconemptyStarIconemptyStarIconemptyStarIcon

0/5 (0投票)

2013年11月1日

CPOL

7分钟阅读

viewsIcon

19715

通过自动对齐改进表单识别结果

介绍 

如果您曾参与过文档管理应用程序或流程的开发,您很可能遇到过添加或对接表单识别的需求。您也可能对识别结果的准确性感到沮丧。表单识别和处理是一个复杂的过程,有无数的变量和因素影响提取字段的准确性。每个文档都不同,但大多数文档都存在导致不准确的类似问题,包括扫描质量、用户输入清晰度、识别引擎质量等。然而,很少有变量像表单对齐那样具有如此大的影响或重要性。

对齐对于表单识别的准确性至关重要,因为表单字段被限制在主表单上的非常特定的位置。因此,看似微小的几像素或几度的差异完全可能打乱呈现给光学文本识别 (OCR) 或光学标记识别 (OMR) 引擎的内容,导致无法获得正确结果,除非重新扫描文档或以某种方式修复文档。

图 1 从左到右
(1) 定义了绿色字段区域的主表单
(2) 已填写并扫描的表单,存在对齐不完美之处
(3) 前两个图像的叠加组合

使用 LEADTOOLS 自动纠正对齐问题 

表单对齐本身是一个多方面的问题,包括三个主要障碍:倾斜角度偏移边距扫描分辨率非线性变形。LEADTOOLS 利用其在文档成像行业数十年的经验和研究,让开发人员轻松纠正扫描文档中的对齐问题。最重要的是,这些纠正都是自动完成的,只需几行非常简单的代码即可实现。 

// Create an OCR Engine for each processor on the machine. This 
// allows for optimal use of thread during recognition and processing.
ocrEngines = new List<IOcrEngine>();
for (int i = 0; i < Environment.ProcessorCount; i++)
{
   ocrEngines.Add(OcrEngineManager.CreateEngine(OcrEngineType.Advantage, false));
   ocrEngines[i].Startup(formsCodec, null, String.Empty, String.Empty);
}
// Point repository to directory with existing master forms 
formsRepository = new DiskMasterFormsRepository(formsCodec, _MasterFormFolder);
autoEngine = new AutoFormsEngine(formsRepository, ocrEngines, null,
    AutoFormsRecognitionManager.Default | AutoFormsRecognitionManager.Ocr, 30, 70, true);

// Run the forms recognition on this document
AutoFormsRunResult runResult = autoEngine.Run(document, null);
if (runResult != null)
{
   // Process the recognized form and extract desired info
   foreach (FormPage formPage in runResult.FormFields)
   {
      foreach (FormField field in formPage)
      {
         // ...
      }
   }
}

LEADTOOLS 认为,表单对齐对于表单识别和处理的成功至关重要且不可或缺,因此将其作为其分类(识别)算法的一部分自动执行。这对开发人员来说是一个巨大的好处,因为他们可以将更多时间投入到应用程序的其他方面,而不是研究和调试因表单对齐不当而导致的不准确结果的问题。

但不要只听我们说。让我们深入探讨四个表单对齐的绊脚石,它们如何对准确性产生负面影响,以及使用 LEADTOOLS 将对您的表单识别应用程序的整体质量产生巨大影响。

倾斜角度

如果您花时间扫描过文档,您会非常清楚,纸张并不总是放置或进给得完全笔直。由于定义表单字段的区域是矩形的,因此填写的文本很难符合限制区域。即使仅有非常小的 1 度倾斜角度,一些字段仍可能落在其框内,具体取决于它们与旋转原点的距离。然而,对于较大的倾斜角度,大多数字段的字符顶部和底部会被截断,甚至可能显示在完全不同的字段框中。

图 2:仅倾斜 1 度的图像示例

偏移边距

偏移边距与倾斜角度类似,都是文档在扫描时方向的问题。当左上角位置不正确时,扫描图像会添加或减去额外的边距,相对于原始文档将所有内容向上或向下、向左或向右移动。平板扫描仪比带有自动进纸器 (ADF) 的扫描仪更容易出现这种情况,但如果导轨选择不当或纸张滑动,也会出现同样的缺陷。

对于整页 OCR,只要文档已去倾斜且文本行水平对齐,偏移边距问题就很少。在识别具有小矩形感兴趣区域的特定字段时,仅 5 到 10 像素的偏移边距就可能导致字符从两侧丢失,或者由于顶部或底部被截断导致整行字符无法识别。

图 3:仅偏移 (5,10) 像素的图像示例

扫描分辨率

扫描分辨率在表单对齐中起着另一个重要作用。扫描文档的 DPI(每英寸点数/像素)决定了坐标系,因此可能影响字段在位图中实际位置的偏移。例如,在 300 DPI 图像上位于 (300,300) 的点,在 200 DPI 图像上实际位于 (200,200)。

图 4:不同扫描分辨率下坐标系统差异的示例

大多数 SDK 和表单识别解决方案都不关心这一点,而是让程序员即时转换坐标空间,或者强制用户以与原始主表单相同的 DPI 扫描表单。LEADTOOLS 认识到为客户和程序员提供灵活性和安心的重要性,只要扫描质量足够高,能够进行准确的 OCR、OMR 或条形码识别(通常 150-200 DPI 是一个不错的基线),LEADTOOLS 就能识别表单并处理字段。所有坐标都是相对的,因此一旦扫描并分类了已填写的表单,它就会包含有助于将字段与主表单精确映射的属性。

非线性变形

最后,最难克服的对齐缺陷是非线性变形。每个扫描仪都不同,可能导致文档某些区域拉伸和收缩,而其他区域则显示正常。这意味着在同一台扫描仪上以相同分辨率扫描的文档,可能无法与在不同扫描仪上扫描的完全相同的纸质文档对齐。

最常见的原因是 ADF 速度的差异。当文档送入扫描仪时,进纸器通常启动缓慢,然后加速到全速,有些扫描仪在文档结束时甚至会再次减速。这会导致文档中间部分对齐正确,但顶部和/或底部被拉伸,从而导致字段错位。透镜的差异甚至扫描仪的年龄也可能导致非线性变形。这对客户来说是一个巨大的问题,因为他们的表单识别通常只在填写好的表单与主表单使用完全相同的扫描仪扫描时才能按预期工作。

图 5:非线性变形的示例。注意图像顶部如何对齐,而底部开始拉伸

很少有表单识别 SDK 能够进行这种高级图像处理,但 LEADTOOLS 非常自豪地在全方位的表单识别文档对齐纠正方面远超竞争对手。在下面的最终图中,您将看到一个已通过 LEADTOOLS 表单对齐完全纠正的表单。

图 6:正确对齐的表单。注意要提取的数据完美地位于字段内

结论

如上所述,选择 LEADTOOLS 作为您的表单识别引擎具有巨大的优势。其自动表单对齐功能可以纠正倾斜角度、偏移边距,计算不同扫描分辨率的相对坐标,并考虑非线性变换;使您填写的表单与主表单完美统一。当这种情况发生时,您将获得更高的准确性、更快的处理速度、更多的安心以及更快的应用程序上市时间。

下载完整的表单识别示例

您可以下载包含上述功能的完整功能演示。要运行此示例,您需要以下条件:

  • LEADTOOLS 免费 60 天试用版
  • Visual Studio 2008 或更高版本
  • 浏览至 LEADTOOLS 示例文件夹(例如:C:\LEADTOOLS 18\Examples\),在那里您可以找到此示例以及 LEADTOOLS 中更多技术的示例项目。

支持

需要帮助来运行此示例吗?联系我们的支持团队以获得免费技术支持!有关定价或许可问题,您可以联系我们的销售团队(sales@leadtools.com)或致电 704-332-5532。

© . All rights reserved.