彩票走势图

使用LEADTOOLS表单识别自动分类扫描文档

原创|使用教程|编辑:龚雪|2015-07-10 09:59:59.000|阅读 683 次

概述:使用LEADTOOLS创建的应用程序可以将一个扫描文档与已经的模板比较,并对文档类型正确分类。当正确识别一个文档后,LEADTOOLS可以从表单中已定义的位置提取文字、选项、条码等。

# 慧都年终大促·界面/图表报表/文档/IDE等千款热门软控件火热促销中 >>

相关链接:

将纸质文档变为电子文档无疑又环保,还节省物理存储空间,但是有些情况它却没有节省空间或减少麻烦。电子报告或手动扫描纸质文档对账单、发票、财务报表的归档十分有用。但是,往电脑里录入这些纸质文档需要大量的时间和精力,而且保存的这些电子文档日后却很难查找它们,这又有什么好处呢?

对一个有好记性和习惯的人来说这可能不难,但是中型到大型企业有庞大的业务,每天有数百人需要处理成千上万的文档,又会怎样呢?没有某种程序的话,就需要巨大的人力开销,更大的问题是:会经常录错!

假设一下,你可以将所有扫描文件放在一个文件夹,然后自动以一致的习惯移动和重命名它们。LEADTOOLS OCR表单识别和处理拥有高级、灵活和强大的图形库,完全可以满足你的要求。使用LEADTOOLS创建的应用程序可以将一个扫描文档与已经的模板比较,并对文档类型正确分类。当正确识别一个文档后,LEADTOOLS可以从表单中已定义的位置提取文字、选项、条码等。

处理文档并保存

解决困境的第一步是处理和管理一个中心文档数据库,所有的扫描文档会放到这个位置进行分类。有多种方法可以完成,如使用一个web服务或一个机器人按下一个按钮。此例中选择的方法是一个简单的控制台应用程序,它与Windows的任务调度器一起运行完成调度。

管理文档库的代码相对来说简单,因为它主要使用了System.IO命名空间的基本文件和文件夹操作。然后应用程序最重要的部分传递到了文档分类器上,它封装了LEADTOOLS表单识别功能,返回用户移动和重命名文档时使用的数据。

// 为新文档检查扫描文档存储库 
string[] newDocuments = Directory.GetFiles(docRepositoryNewDocs);  
DocumentClassifier docClassifier = new DocumentClassifier(docRepositoryMasterForms);  
string movedDocumentName, masterFormSubFolder;  
foreach (string currentDoc in newDocuments)  
{  
   movedDocumentName = null;  
   // 尝试将此文档与已知的文档类型匹配  
   ClassifiedDocument classifiedDoc = docClassifier.ClassifyDocument(currentDoc);  
   if (classifiedDoc.MasterFormName != null)  
   {  
      // 如果不存在,为Master Form添加子文件夹  
      masterFormSubFolder = string.Format(@"{0}{1}\",   
         docRepositoryRoot,classifiedDoc.MasterFormName);  
      if (!Directory.Exists(masterFormSubFolder))  
         Directory.CreateDirectory(masterFormSubFolder);  

 
      // 根据找到的日期,重命名文件   
      if (classifiedDoc.DocumentDate != DateTime.MinValue)  
      {  
         movedDocumentName = string.Format("{0}{1}{2}",   
            masterFormSubFolder,  
            classifiedDoc.DocumentDate.ToString("yyyyMMdd"),  
            currentDoc.Substring(currentDoc.LastIndexOf('.'),   
                currentDoc.Length - currentDoc.LastIndexOf('.')));  
      }  
      else  
      {  
         // 没有找到用来重命名的日期,就移走它  
         movedDocumentName = currentDoc.Replace(docRepositoryNewDocs, masterFormSubFolder);  
      }  
   }  
   else  
   {  
      movedDocumentName = currentDoc.Replace(docRepositoryNewDocs,   
          docRepositoryUnclassifiedDocs);  
   }  

 
   if (!string.IsNullOrEmpty(movedDocumentName))  
      File.Move(currentDoc, movedDocumentName);  
}

使用LEADTOOLS表单识别

在LEADTOOLS开始分类文档前,必须知道如何分类他们,分类通过创建一个主表单模板的集合完成。LEADTOOLS附带了一个主表单编辑器示例,使用它可以为两种不同的包含单独OCR字段的发票添加一个主表单,提取出发票日期,重命名文件。

leadtools教程
图1:使用Master Form编辑器定义Master Form模板

现在我们定义了主表单,可以开始处理文档了。我们已经扫描了两个基于主表单的发票和一个没有已知模板的税单。LEADTOOLS会将New文件夹中的每一个文件与主模板比较。如果找到了匹配项,它会处理文档字段,返回表单的名称和日期字段。

// 为机器上的每一个处理器创建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)  
{  
   // 在此例中,我们使用了两种信息来组织分类的表单:  
   // 1.子文件夹使用表单的名字  
   // 2.文件名使用 "ClassificationRenameDate" 字段  
   retClassifiedDocument.MasterFormName = runResult.RecognitionResult.MasterForm.Name;  

 
   // 处理识别的表单,提取想要的信息  
   foreach (FormPage formPage in runResult.FormFields)  
   {  
      foreach (FormField field in formPage)  
      {  
         if (field != null && field.Name == "ClassificationRenameDate")  
         {  
            retClassifiedDocument.DocumentDate = DateTime.Parse((  
                field.Result as TextFormFieldResult).Text);  
         }  
      }  
   }  
}
leadtools教程
图2 分类前的表单存储库和子文件夹
leadtools教程
图3 分类后的表单存储库和子文件夹

正如你所看到的,两张发票与它们的主表单正确匹配,并根据数据字段重命名。此外,未分类的文档文件夹起到了自动防御的功能,允许应用程序通过最小的代价达到目的。当你有一个主表单集合中没有的新文档类型时,你所要做的只是将这些图像中的一个当做模板,提取出你想要的字段,将未分类的文档移回New文件夹,在下次程序运行时重新处理一次。

再进一步

这个简单的解决方案有着巨大的扩展性和适应性。例如,通过连接一个云服务如Google Docs、SkyDrive或 iCloud轻松管理你的在线文档。同样,企业可以调整它来监控和组织传入的传真和邮件附件,或使用识别出的字段数据,将其直接存入数据库。更重要的是,LEADTOOLS表单识别可以按你的意愿处理扫描文档中或多或少的数据,它的实用性已经远远超出了组织和归档。通过提取表单字段、复选框、发票金额等还能加速工作流。


标签:文档管理

本站文章除注明转载外,均为本站原创或翻译。欢迎任何形式的转载,但请务必注明出处、不得修改原文相关链接,如果存在内容上的异议请邮件反馈至chenjj@pclwef.cn


为你推荐

  • 推荐视频
  • 推荐活动
  • 推荐产品
  • 推荐文章
  • 慧都慧问
扫码咨询


添加微信 立即咨询

电话咨询

客服热线
023-68661681

TOP