原創(chuàng)|使用教程|編輯:龔雪|2015-07-10 09:59:59.000|閱讀 727 次
概述:使用LEADTOOLS創(chuàng)建的應(yīng)用程序可以將一個(gè)掃描文檔與已經(jīng)的模板比較,并對(duì)文檔類型正確分類。當(dāng)正確識(shí)別一個(gè)文檔后,LEADTOOLS可以從表單中已定義的位置提取文字、選項(xiàng)、條碼等。
# 界面/圖表報(bào)表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
相關(guān)鏈接:
將紙質(zhì)文檔變?yōu)殡娮游臋n無疑又環(huán)保,還節(jié)省物理存儲(chǔ)空間,但是有些情況它卻沒有節(jié)省空間或減少麻煩。電子報(bào)告或手動(dòng)掃描紙質(zhì)文檔對(duì)賬單、發(fā)票、財(cái)務(wù)報(bào)表的歸檔十分有用。但是,往電腦里錄入這些紙質(zhì)文檔需要大量的時(shí)間和精力,而且保存的這些電子文檔日后卻很難查找它們,這又有什么好處呢?
對(duì)一個(gè)有好記性和習(xí)慣的人來說這可能不難,但是中型到大型企業(yè)有龐大的業(yè)務(wù),每天有數(shù)百人需要處理成千上萬的文檔,又會(huì)怎樣呢?沒有某種程序的話,就需要巨大的人力開銷,更大的問題是:會(huì)經(jīng)常錄錯(cuò)!
假設(shè)一下,你可以將所有掃描文件放在一個(gè)文件夾,然后自動(dòng)以一致的習(xí)慣移動(dòng)和重命名它們。LEADTOOLS OCR表單識(shí)別和處理擁有高級(jí)、靈活和強(qiáng)大的圖形庫,完全可以滿足你的要求。使用LEADTOOLS創(chuàng)建的應(yīng)用程序可以將一個(gè)掃描文檔與已經(jīng)的模板比較,并對(duì)文檔類型正確分類。當(dāng)正確識(shí)別一個(gè)文檔后,LEADTOOLS可以從表單中已定義的位置提取文字、選項(xiàng)、條碼等。
解決困境的第一步是處理和管理一個(gè)中心文檔數(shù)據(jù)庫,所有的掃描文檔會(huì)放到這個(gè)位置進(jìn)行分類。有多種方法可以完成,如使用一個(gè)web服務(wù)或一個(gè)機(jī)器人按下一個(gè)按鈕。此例中選擇的方法是一個(gè)簡(jiǎn)單的控制臺(tái)應(yīng)用程序,它與Windows的任務(wù)調(diào)度器一起運(yùn)行完成調(diào)度。
管理文檔庫的代碼相對(duì)來說簡(jiǎn)單,因?yàn)樗饕褂昧薙ystem.IO命名空間的基本文件和文件夾操作。然后應(yīng)用程序最重要的部分傳遞到了文檔分類器上,它封裝了LEADTOOLS表單識(shí)別功能,返回用戶移動(dòng)和重命名文檔時(shí)使用的數(shù)據(jù)。
// 為新文檔檢查掃描文檔存儲(chǔ)庫 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); // 根據(jù)找到的日期,重命名文件 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開始分類文檔前,必須知道如何分類他們,分類通過創(chuàng)建一個(gè)主表單模板的集合完成。LEADTOOLS附帶了一個(gè)主表單編輯器示例,使用它可以為兩種不同的包含單獨(dú)OCR字段的發(fā)票添加一個(gè)主表單,提取出發(fā)票日期,重命名文件。
現(xiàn)在我們定義了主表單,可以開始處理文檔了。我們已經(jīng)掃描了兩個(gè)基于主表單的發(fā)票和一個(gè)沒有已知模板的稅單。LEADTOOLS會(huì)將New文件夾中的每一個(gè)文件與主模板比較。如果找到了匹配項(xiàng),它會(huì)處理文檔字段,返回表單的名稱和日期字段。
// 為機(jī)器上的每一個(gè)處理器創(chuàng)建OCR引擎。在識(shí)別和處理過程中,允許線程的優(yōu)先使用 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); } // 將存儲(chǔ)庫指向包含已有主表單的文件夾 formsRepository = new DiskMasterFormsRepository(formsCodec, _MasterFormFolder); autoEngine = new AutoFormsEngine(formsRepository, ocrEngines, null, AutoFormsRecognitionManager.Default | AutoFormsRecognitionManager.Ocr, 30, 70, true); // 在這個(gè)文檔上運(yùn)行表單識(shí)別 AutoFormsRunResult runResult = autoEngine.Run(document, null); if (runResult != null) { // 在此例中,我們使用了兩種信息來組織分類的表單: // 1.子文件夾使用表單的名字 // 2.文件名使用 "ClassificationRenameDate" 字段 retClassifiedDocument.MasterFormName = runResult.RecognitionResult.MasterForm.Name; // 處理識(shí)別的表單,提取想要的信息 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); } } } }
正如你所看到的,兩張發(fā)票與它們的主表單正確匹配,并根據(jù)數(shù)據(jù)字段重命名。此外,未分類的文檔文件夾起到了自動(dòng)防御的功能,允許應(yīng)用程序通過最小的代價(jià)達(dá)到目的。當(dāng)你有一個(gè)主表單集合中沒有的新文檔類型時(shí),你所要做的只是將這些圖像中的一個(gè)當(dāng)做模板,提取出你想要的字段,將未分類的文檔移回New文件夾,在下次程序運(yùn)行時(shí)重新處理一次。
這個(gè)簡(jiǎn)單的解決方案有著巨大的擴(kuò)展性和適應(yīng)性。例如,通過連接一個(gè)云服務(wù)如Google Docs、SkyDrive或 iCloud輕松管理你的在線文檔。同樣,企業(yè)可以調(diào)整它來監(jiān)控和組織傳入的傳真和郵件附件,或使用識(shí)別出的字段數(shù)據(jù),將其直接存入數(shù)據(jù)庫。更重要的是,LEADTOOLS表單識(shí)別可以按你的意愿處理掃描文檔中或多或少的數(shù)據(jù),它的實(shí)用性已經(jīng)遠(yuǎn)遠(yuǎn)超出了組織和歸檔。通過提取表單字段、復(fù)選框、發(fā)票金額等還能加速工作流。
本站文章除注明轉(zhuǎn)載外,均為本站原創(chuàng)或翻譯。歡迎任何形式的轉(zhuǎn)載,但請(qǐng)務(wù)必注明出處、不得修改原文相關(guān)鏈接,如果存在內(nèi)容上的異議請(qǐng)郵件反饋至chenjj@fc6vip.cn