← 返回所有博客文章

 

简介

如果你曾经参与过文档管理应用程序或过程的开发,你可能遇到过添加表单识别或与表单识别连接的需求。你可能对结果的准确性也非常沮丧。表单识别和处理是一个复杂的过程,无数变量和因素都会影响提取字段的准确性。每个文档都不一样,但是导致不准确的因素大同小异,例如扫描质量、用户输入的易读性、识别引擎的质量等。但是,表单对齐却是最重要的影响因素。

对齐对表单识别的准确性至关重要,因为表单字段被限定在主表单的特定位置上。因此,看似微小的像素或角度都可能扰乱光学文字识别(OCR)或光学标记识别(OMR)的结果,如果不重新扫描文档或以某些方式修复文档就无法得到正确的结果。

clip_image001

图1(从左到右):

(1)主表单,包含字段区域,表示为绿色

(2)未对齐的填好的和扫描的表单

(3)前两个图像的叠加

 

使用LEADTOOLS自动纠正对齐问题

表单对齐本身是一个多方面问题,包含三个主要问题:倾斜角度、边缘偏移、扫描的分辨率和非线性的变形。LEADTOOLS凭借在文档图像领域几十年的经验和研究,为开发者提供了扫描文档对齐校正的简单解决方案。最重要的是,使用非常简单的几行代码,就能自动完成文档校正。

// 为机器上的每一个处理器创建一个OCR引擎。允许在识别和处理过程中优先使用线程
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);
}
// 将库指向包含已有主表单的文件夹
formsRepository = new DiskMasterFormsRepository(formsCodec, _MasterFormFolder);
autoEngine = new AutoFormsEngine(formsRepository, ocrEngines, null,
    AutoFormsRecognitionManager.Default | AutoFormsRecognitionManager.Ocr, 30, 70, true);
// 在文档上运行表单识别
AutoFormsRunResult runResult = autoEngine.Run(document, null);
if (runResult != null)
{
   // 处理识别的表单,提取需要的信
   foreach (FormPage formPage in runResult.FormFields)
   {
      foreach (FormField field in formPage)
      {
         // ...      }
   }
}

LEADTOOLS坚信文档对齐对成功的表单识别非常重要,因此它必须作为分类(识别)算法的一部分自动运行。程序员从中非常受益,因为他们将有更多的时间专注于应用程序其他部分的开发,而不是研究和调试未对齐导致的不准确结果。

但是不要只看我们说的。让我们一起深入了解表单对齐的四种绊脚石以及它们如何影响了精度,以及使用LEADTOOLS对表单识别应用程序整体质量带来的巨大影响。

 

倾斜

如果你花过大量时间扫描文档,你肯定清楚地知道纸张并不总是处于理想状态。如果定义表单字段的区域是矩形,将填写的文本限定在特定区域非常困难。若有仅仅一度的轻微倾斜,靠近旋转原点的字段可能还在框内,但是,大多数字段的顶部或底部会在框外,当倾斜角度更大时,甚至会出现在另一个完全不同的字段框中。

clip_image002

图2:旋转1度的示例图像

 

边缘偏移

边缘偏移与倾斜角度一样,是放置文档扫描时出现的问题。当左上角不在正确位置时,扫描文档会出现多余的边缘或被裁减掉的边缘,整个图像与原始文档相比不是偏上或偏下,就是偏左或偏右。

如果对文档进行了倾斜校正,此时文本行都是水平的,那么整页OCR的边缘偏移导致的问题较少。当识别感兴趣小矩形内的特殊字段时,5 - 10像素的边缘偏移都会造成字符丢失,或者由于顶部或底部被裁减掉,整行字符无法识别。

clip_image003

图3:5 - 10像素偏移的图像示例

 

扫描分辨率

扫描分辨率对对齐表单也非常重要。扫描文档的DPI(每英寸点数/像素数)设置了坐标系统,因此可能会丢掉本身存在于位图上的字段。例如,一个300DPI图像上位置为(300,300)的点在一个200DPI图像上的实际位置为(200,200)。

clip_image004

图4:坐标系如何影响扫描分辨率的例子

大多数SDK和表单识别解决方案不用我们费心,程序员转换坐标空间,或要求用户以与原始主表单相同的DPI扫描表单。LEADTOOLS看到了给予客户和程序员灵活性的价���,用户知道只要扫描质量足够高,就可以准确识别OCR、OMR或条码(一般情况下150 - 200DPI是一个基准)会为他们带来内心的平静。所有的坐标都是相对的,以便填充的表格一旦被扫描和分类,它就包含了以无可挑剔的准确性帮助字段映射到主表单的属性。

 

非线性变形

最后,对齐要克服的最困难的问题是非线性变形。每个扫描仪都不同,因此会导致文档某些区域伸展和收缩了而其他部分正常。这意味着一个扫描仪以同样分辨率扫描的文档有可能与另一个扫描仪扫描出的相同纸质文档无法对齐。

最常见的原因是ADF速度的差异。当文档输入扫描仪后,馈线通常启动缓慢,然后加速至全速,一些扫描仪甚至在一个文档接近尾声时又降慢了速度。文档中心可能正确排列,但是又延伸了顶部和底部因此反过来移动了字段。镜头的差异甚至扫描仪的年龄都可能引起非线性变形。如果不使用与主表单一样的扫描仪扫描填充表格,表单识别时就会出现很多问题,给用户带来很大的不便。

clip_image005

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

很少有表单识别SDK拥有如此先进的图像处理能力,但是LEADTOOLS遥遥领先于其他对手,为用户提供了具有文档对齐校正功能的全面表单识别SDK。在下面的例子中,你会看到一个使用LEADTOOLS表单对齐全面纠正后的表单。

clip_image006

图6:正确对齐的表单。注意提取的数据如何与字段对齐。

 

总结

正如上面所示,选择LEADTOOLS做你的识别引擎会带来巨大的好处。它的自动表单对齐功能可以校正倾斜角度,边缘偏移,计算不同扫描分辨率之间的相对坐标,同时还解决了非线性变换,让你的填写表单与主表单完美统一。当这一切发生时,你会获得更高的准确率、更快的处理速度、更多的内心平静以及更短的应用程序上市时间。

 

获取支持

关于其他产品的更多信息,请访问我们的官方网站

欢迎下载免费的全功能评估版SDK,全功能试用版中有这个例子的全部源代码。

同时欢迎您使用评估版期间的免费技术支持