原創|使用教程|編輯:龔雪|2015-07-06 09:54:20.000|閱讀 755 次
概述:本文將為您展示如何設置一個主表單模板,然后從填充的發票中提取數據。
# 界面/圖表報表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
相關鏈接:
毫無疑問,圖像技術如表單識別和OCR已經徹底改變了我們做生意的方式,節省了無數的人力,同時降低了任務的錯誤率。然而,使用這些技術的前提是:數據必須在每個文檔的相同位置出現。在自動化系統中大范圍處理非結構化的表單和掃描文檔如發票、賬單和標簽非常困難。
然而,LEADTOOLS Version 19和先進的發票識別和處理SDK技術發布后,一切都不再是問題!它能夠處理包含列表數據的復雜非結構化半結構化的文檔,甚至每列每行的高度不一樣,或表格橫跨了多個頁面都可以。本白皮書我們將為您展示如何設置一個主表單模板,然后從填充的發票中提取數據。
第一個要求是創建一個模板,定義了多個值的位置以及數據類型。它需要是一個空白或修訂版本。一些字段可能包含靜態位置如客戶編號、發票號、地址等,但是由于表格區域,主模板和填充發票的大小不同,發票或其他非結構化表單類型中的表格會嚴重破壞識別的精度。
LEADTOOLS使用表格字段類型克服了這個障礙。要實現一個表格字段,只需簡單定義要識別的列標題和表格數據,不用管明細行、每個單元格的高度或頁面的數量。傳統的固定位置字段可以在表格下共存(如發票總數),基于它與整個表格的比例可以發現它。
設置主表單模板后,你就可以開始識別(如分類)和處理填好的文檔了。LEADTOOLS先進的表單識別算法會首先確定填充文檔的匹配表單類別。在存儲庫中,沒有限制主表單模板的數量,因此可以為企業中的所有文檔和發票創建一個單獨的自動解決方案。無論分辨率為多少,AutoFormsEngine會完成對齊、調整、分類和處理表單的所有工作。最重要的是,設置AutoFormsEngine快速簡單,只需要找到主表單模板,然后將它傳遞給填好的發票圖像。
// 基于文件夾路徑設置主表單模板庫 DiskMasterFormsRepository workingRepository = new DiskMasterFormsRepository(rasterCodecs, repositoryPath); // 使用Ocr識別管理器。其他的選項包括默認和條碼 AutoFormsRecognitionManager managers = AutoFormsRecognitionManager.Ocr; // 創建表單引擎 AutoFormsEngine autoEngine = new AutoFormsEngine(workingRepository, ocrEngines[0], barcodeEngine, managers, 30, 80, _menuItemRecognizeFirstPageOnly.Checked); autoEngine.UseThreadPool = true; // 創建我們想要確認/識別/分類的填充表單 FilledForm form = new FilledForm(); form.FileName = Path.GetFileName(imagePath); form.Name = Path.GetFileNameWithoutExtension(imagePath); form.Image = rasterCodecs.Load(imagePath, 0, CodecsLoadByteOrder.Bgr, 1, 1); // 在填充表單上運行識別和處理 AutoFormsRunResult result = autoEngine.Run(form.Image, MyPageRequestCallback, form, null); if (result != null && !canceled) { // 獲取主表單(識別/分類) MasterForm master = new MasterForm(); master.Properties = result.RecognitionResult.Properties; form.Master = master; // Populate our form with the recognition and processing results and alignment information form.Result = result.RecognitionResult.Result; form.Alignment = result.RecognitionResult.Alignments; //現在我們已經成功識別和處理了表單 }
在成功分類表單后,我們可以解析結果,從模板定義的字段中提取數據。
// 創建一個DataGridView 控件顯示表單數據 DataGridView _tableResults; _tableResults = new DataGridView(); TableFormField tableField = form.ProcessingPages[pageIndex][fieldIndex] as TableFormField; if (tableField.Result.Status == FormFieldStatus.Success) { // 添加列 foreach (TableColumn column in tableField.Columns) _tableResults.Columns.Add(column.OcrField.Name, column.OcrField.Name); // 添加數據,然后先循環行,然后循環行中的每個字段(單元格) TableFormFieldResult results = tableField.Result as TableFormFieldResult; for (int i = 0; i < results.Rows.Count; i++) { TableFormRow row = results.Rows[i]; _tableResults.Rows.Add(); for (int j = 0; j < row.Fields.Count; j++) { // 獲取字段中的文本! OcrFormField ocrField = row.Fields[j]; TextFormFieldResult txtResults = ocrField.Result as TextFormFieldResult; _tableResults.Rows[i].Cells[j].Value = txtResults.Text; } } }
每個字段包含大量的信息,包括識別的數據、置信度信息、字體特征、邊界矩形等。就像你從圖表3中看到的一樣,整個表格作為一個字段識別,然后進一步分解為每一個單元格。LEADTOOLS靈活準確的處理方法能夠檢測和解釋單元格高度的不同,正確的定義每個單元格的邊界,使用OCR文字識別提取數據和詳細的字符信息。
想要了解更多?查看LEADTOOLS識別和處理SDK的詳細介紹。
識別和處理非結構化表單如發票賬單中的數據是LEADTOOLS可以處理的諸多問題中的一個。先進的發票識別和處理SDK讓創建自動會計、賬單和表單解決方案變為可能。此外,LEADTOOLS提供了豐富的文檔清理功能集合,包括抗扭斜、移除線、去除雜點、去除孔等,過濾掉噪聲后識別。LEADTOOLS提供了光柵、文檔、醫學和多媒體圖像的綜合工具包。
本站文章除注明轉載外,均為本站原創或翻譯。歡迎任何形式的轉載,但請務必注明出處、不得修改原文相關鏈接,如果存在內容上的異議請郵件反饋至chenjj@fc6vip.cn