轉帖|行業(yè)資訊|編輯:龔雪|2014-03-28 09:59:06.000|閱讀 5745 次
概述:在過去幾周,我在業(yè)余時間里利用ABBYY開發(fā)的FineReader Engine試用版來開發(fā)了一些簡單的OCR應用程序。本文將分享一下FineReader Engine的一些入門經(jīng)驗。
# 界面/圖表報表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
關于ABBYYFineReader Engine
ABBYY網(wǎng)站上對FineReaderEngine的描述如下:
ABBYY FineReader Engine是一款功能強大的光學字符識別(OCR)軟件開發(fā)工具包(SDK),集成了ABBYY最先進的文檔識別和轉換軟件技術,如:光學字符識別(OCR)、智能字符識別(ICR)、光學標記識別(OMR)、條形碼識別(OBR)、文檔影像和PDF轉換。
如果開發(fā)人員需要開發(fā)具有以下任一功能的應用程序,可以考慮使用ABBYY FineReader Engine軟件開發(fā)工具包(SDK):
這個SDK中包含有十幾個應用程序示例,包括C++、C#、VB.NET、VB、Delphi、Java和幾種腳本語言(JavaScript、Perl和VBScript)示例。你可以查看代碼開發(fā)庫(Code Development Library)來快速入門,代碼開發(fā)庫中包含了SDK編程的各個方面。每個截面代碼庫包含一個或多個代碼片段并逐步描述了如何運行一項任務。
選擇你需要執(zhí)行的任務,查看操作步驟描述,查閱源代碼示例或運行可執(zhí)行文件:
安裝和設置
在開發(fā)機上安裝FineReader時有幾個步驟。首先,必須安裝授權服務器。如果只有1個開發(fā)人員使用SDK,此時可以將它直接安裝在開發(fā)機上。如果多個開發(fā)人員要從多個工作站使用FineReader,此時應該將授權服務器安裝在所有開發(fā)人員都能訪問的應用程序服務器上。授權服務器必須安裝在物理機器上,而不是虛擬機上。(請注意,該技術可以在虛擬機和云環(huán)境中運行)。通過授權管理器,您可以添加和激活您的許可證,無論您的許可證是試用版或購買的正品版本。
接下來,可以將FineReaderEngine安裝在開發(fā)機上,并連接到授權服務器。
安裝完成后,如果您使用的是Visual Studio2010或2012,此時必須再完成幾個步驟,才能夠使用可視化組件(控件)。這些步驟在其自帶的SDK幫助文件“在不同版本的Visual Studio中使用可視化組建”頁可以找到。
現(xiàn)在您就可以使用SDK進行開發(fā)了。你可以按照上文代碼開發(fā)庫中描述的示例應用程序進行開發(fā)或你可以著手創(chuàng)建自己的程序。
創(chuàng)建項目
首先,在C#或Visual Basic中創(chuàng)建1個新的Windows窗體應用程序。我在開發(fā)應用程序時使用的是Visual Studio2010。
隨后將ABBYY控件添加到Visual Studio工具箱窗口。我在工具箱中創(chuàng)建了1個新的ABBYY 。
將該項目的引用添加到ABBYY \Inc\.Net Interops\ 文件夾下的三個Interop DLL文件中,在安裝過程中,這三個文件都已注冊并被添加到了GAC里面。
UI控件
下面介紹設計視圖Windows窗體中的五個ABBYY控件。
從左上角開始,沿順時針方向依次是:
文件瀏覽器-該控件顯示了從圖像/文件加載的頁面清單以及每個頁面的處理狀態(tài)。這些頁面可以顯示為縮略圖或詳細信息視圖。
圖像瀏覽器 –應用程序用戶可以通過該控件來查看和編輯在文件瀏覽器中選中的頁面。
文本編輯器 –用戶可以使用文本編輯器查看和編輯FREngine在指定頁面中識別出來的文字。
動態(tài)瀏覽器 – 用戶可以使用該控件來放大或縮小圖像瀏覽器中選定的區(qū)域。
文本校驗器 – 用戶可以使用該控件來調(diào)整掃描和驗證過程中未能識別的文本區(qū)域。這也是用于文件拼寫檢查的用戶界面。
在這些控件中,將文件和頁面同步是非常簡單的事情,只需將每個控件添加到代碼中的ComponentSynchronizer對象即可:
// Attach components to Synchronizer Synchronizer =new FineReaderVisualComponents.ComponentSynchronizerClass(); Synchronizer.DocumentViewer = (FineReaderVisualComponents.DocumentViewer ) documentViewer.GetOcx(); Synchronizer.ImageViewer = (FineReaderVisualComponents.ImageViewer ) imageViewer.GetOcx(); Synchronizer.ZoomViewer = (FineReaderVisualComponents.ZoomViewer ) zoomViewer.GetOcx(); Synchronizer.TextEditor = (FineReaderVisualComponents.TextEditor ) textEditor.GetOcx();
引擎
下面舉個簡單的例子,來說明如何運用所有五個FineReader控件來打開窗體并加載PDF文件。
IEngine engine; FRDocument document; ComponentSynchronizer synchronizer; IEngineLoader loader; privatevoid LoadEngine() { loader =new FREngine.InprocLoader(); engine = loader.GetEngineObject("xxxx-xxxx-xxxx-xxxx-xxxx-xxxx"); engine.ParentWindow =this.Handle.ToInt32(); engine.ApplicationTitle =this.Text; document = engine.CreateFRDocumentFromImage((@"C:\Users\ABBYYTest\Images\Documents\DemoSample.pdf"); synchronizer.Document = document; } privatevoid SyncComponents() { synchronizer =new ComponentSynchronizer(); synchronizer.DocumentViewer =(FineReaderVisualComponents.DocumentViewer)DocViewer.GetOcx(); synchronizer.ImageViewer =(FineReaderVisualComponents.ImageViewer)ImgViewer.GetOcx(); synchronizer.TextEditor =(FineReaderVisualComponents.TextEditor)textEdit.GetOcx(); synchronizer.ZoomViewer =(FineReaderVisualComponents.ZoomViewer)zoomView.GetOcx(); synchronizer.TextValidator =(FineReaderVisualComponents.TextValidator)textVal.GetOcx(); } privatevoid UnloadEngine() { // If Engine was loaded, unload it if (engine !=null) { engine =null; } } privatevoid DocumentForm_Load(object sender, EventArgs e) { SyncComponents(); LoadEngine(); } privatevoid DocumentForm_FormClosing(object sender, FormClosingEventArgs e) { UnloadEngine(); }
當然,在實際應用中,您可能會創(chuàng)建一個按鈕,用戶通過點擊這個按鈕可以從文件系統(tǒng)中選擇需要打開的文件。必須注意的是,卸載引擎非常重要。如果不這樣做,就會占用您的工作站所獲得的授權,直到手動將它從授權服務器中釋放出來為止。我們在進行COM交互操作……資源和內(nèi)存管理非常重要。
識別
對加載的文件運行識別處理也是一件比較簡單的事情。下面是管理該進程的方法:
privatevoid RecognizeDocument() { FREngine.ProcessingParams processingParams =synchronizer.ProcessingParams; FREngine.DIFRDocumentEvents_OnProgressEventHandler progressHandler = newFREngine.DIFRDocumentEvents_OnProgressEventHandler(document_OnProgress); document.OnProgress += progressHandler; document.Process(processingParams.PageProcessingParams, processingParams.SynthesisParamsForPage, processingParams.SynthesisParamsForDocument); document.OnProgress -= progressHandler; }
progressHandler 能夠讓UI保持響應,并能夠讓用戶啟動“取消”命令,以終止某個長時間運行的文檔識別進程。
本軟件的默認識別語言是英語,如果您需要識別其他語言或任意語言組合的文檔,你可以在打開文檔前更改RecognizerParams中的SetPredefinedTextLanguage選項,步驟如下:
processingParams.PageProcessingParams.RecognizerParams.SetPredefinedTextLanguage(“ChinesePRC,English”);
導出
要導出某個加載文件,可以調(diào)用文檔對象的Export()方法。以下代碼段將加載的文件導出到RTF文件:
synthesizeIfNeed(); Document.Export(fileName,FREngine.FileExportFormatEnum.FEF_RTF, null);
配置文件
ABBYY FineReader Engine也支持“配置文件”,使引擎能夠根據(jù)當前使用情況來優(yōu)化進程。這些配置文件可以使程序自行啟動,并自動設置OCR質量的最佳的處理參數(shù)。下面是目前可用的配置文件:
可以用Engine.LoadPredefinedProfile來加載這些配置文件。也可以通過.ini格式來創(chuàng)建自定義的用戶定義配置文件。該軟件自帶的幫助文件中有詳細說明,可以幫助用戶創(chuàng)建自定義的配置文件。可以調(diào)用Engine.LoadProfile來加載自定義的用戶配置文件。
其他平臺和產(chǎn)品
我只使用了FineReaderEngine的Windows SDK,但ABBYY也提供一些其他產(chǎn)品。FineReader Engine還支持Mac OS、Linux、移動SDK平臺使用,其中FlexiCapture EngineSDK還能進行數(shù)據(jù)采集。通過ABBYY托管在Azure的云環(huán)境(訪問www.ocrsdk.com),開發(fā)者還能獲得Web API。此外,ABBYY還有某些功能強大的、即裝即用的OCR產(chǎn)品和數(shù)據(jù)采集產(chǎn)品可供用戶選擇。您可以訪問他們的網(wǎng)站,查看他們的全部產(chǎn)品。
后記
ABBYY FineReader Engine軟件開發(fā)工具包的設置和使用非常簡單,有了它,您也可以開發(fā)出具有強大OCR功能的應用程序。如果您自己的應用程序需要用到OCR,我強烈建議您試用他們的產(chǎn)品。
本文轉載自!
本站文章除注明轉載外,均為本站原創(chuàng)或翻譯。歡迎任何形式的轉載,但請務必注明出處、不得修改原文相關鏈接,如果存在內(nèi)容上的異議請郵件反饋至chenjj@fc6vip.cn
文章轉載自:慧都控件網(wǎng)