ABBYY FineReader Engine是一款功能強大的光學字符識別(OCR)軟件開發工具包(SDK),集成了ABBYY最早進的文檔識別和轉換軟件技術,如:光學字符識別(OCR)、智能字符識別(ICR)、光學標記識別(OMR)、條形碼識別(OBR)、文檔影像和PDF轉換。編程
若是開發人員須要開發具備如下任一功能的應用程序,能夠考慮使用ABBYY FineReader Engine軟件開發工具包(SDK):瀏覽器
•文檔轉換服務器
•文件歸檔編輯器
•文件分類工具
•書籍歸檔開發工具
•文本提取優化
•字段識別網站
•條碼識別this
•名片識別spa
•圖像預處理
•掃描
這個SDK中包含有十幾個應用程序示例,包括C++、C#、VB.NET、VB、Delphi、Java和幾種腳本語言(JavaScript、Perl和VBScript)示例。你能夠查看代碼開發庫(Code Development Library)來快速入門,代碼開發庫中包含了SDK編程的各個方面。每一個截面代碼庫包含一個或多個代碼片斷並逐步描述瞭如何運行一項任務。
原文來自http://www.twain100.com/doc/3784
安裝和設置
在開發機上安裝FineReader時有幾個步驟。首先,必須安裝受權服務器。若是隻有1個開發人員使用SDK,此時能夠將它直接安裝在開發機上。若是多個開發人員要從多個工做站使用FineReader,此時應該將受權服務器安裝在全部開發人員都能訪問的應用程序服務器上。受權服務器必須安裝在物理機器上,而不是虛擬機上。(請注意,該技術能夠在虛擬機和雲環境中運行)。經過受權管理器,您能夠添加和激活您的許可證,不管您的許可證是試用版或購買的正品版本。
接下來,能夠將FineReaderEngine安裝在開發機上,並鏈接到受權服務器。
安裝完成後,若是您使用的是Visual Studio2010或2012,此時必須再完成幾個步驟,纔可以使用可視化組件(控件)。這些步驟在其自帶的SDK幫助文件「在不一樣版本的Visual Studio中使用可視化組建」頁能夠找到。
如今您就可使用SDK進行開發了。你能夠按照上文代碼開發庫中描述的示例應用程序進行開發或你能夠着手建立本身的程序。
建立項目
首先,在C#或Visual Basic中建立1個新的Windows窗體應用程序。我在開發應用程序時使用的是Visual Studio2010。
隨後將ABBYY控件添加到Visual Studio工具箱窗口。我在工具箱中建立了1個新的ABBYY <section>。
將該項目的引用添加到ABBYY \Inc\.Net Interops\ 文件夾下的三個Interop DLL文件中,在安裝過程當中,這三個文件都已註冊並被添加到了GAC裏面。
UI控件
下面介紹設計視圖Windows窗體中的五個ABBYY控件。
從左上角開始,沿順時針方向依次是:
文件瀏覽器-該控件顯示了從圖像/文件加載的頁面清單以及每一個頁面的處理狀態。這些頁面能夠顯示爲縮略圖或詳細信息視圖。
圖像瀏覽器 –應用程序用戶能夠經過該控件來查看和編輯在文件瀏覽器中選中的頁面。
文本編輯器 –用戶可使用文本編輯器查看和編輯FREngine在指定頁面中識別出來的文字。
動態瀏覽器 – 用戶可使用該控件來放大或縮小圖像瀏覽器中選定的區域。
文本校驗器 – 用戶可使用該控件來調整掃描和驗證過程當中未能識別的文本區域。這也是用於文件拼寫檢查的用戶界面。
在這些控件中,將文件和頁面同步是很是簡單的事情,只需將每一個控件添加到代碼中的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();
}
固然,在實際應用中,您可能會建立一個按鈕,用戶經過點擊這個按鈕能夠從文件系統中選擇須要打開的文件。必須注意的是,卸載引擎很是重要。若是不這樣作,就會佔用您的工做站所得到的受權,直到手動將它從受權服務器中釋放出來爲止。咱們在進行COM交互操做……資源和內存管理很是重要。
識別
對加載的文件運行識別處理也是一件比較簡單的事情。下面是管理該進程的方法:
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」);
導出
要導出某個加載文件,能夠調用文檔對象的Export()方法。如下代碼段將加載的文件導出到RTF文件:
synthesizeIfNeed();
Document.Export(fileName,FREngine.FileExportFormatEnum.FEF_RTF, null);
配置文件
ABBYY FineReader Engine也支持「配置文件」,使引擎可以根據當前使用狀況來優化進程。這些配置文件可使程序自行啓動,並自動設置OCR質量的最佳的處理參數。下面是目前可用的配置文件:
•DocumentConversion_Accuracy-在將文檔轉換爲可編輯格式時優化其精確度。
•DocumentConversion_Speed-在將文檔轉換爲可編輯格式時優化其速度。
•DocumentArchiving_Accuracy-在建立電子檔案時優化其精確度。
•DocumentArchiving_Speed- 在建立電子檔案時優化其速度。
•BookArchiving_Accuracy-在創建電子圖書館時優化其精度。
•BookArchiving_Speed-在創建電子圖書館時優化其速度。
•TextExtraction_Accuracy-在從文件中提取文字時優化其精度。
•TextExtraction_Speed-在從文檔中提取文字時優化其速度。
•FieldLevelRecognition-識別短的文本片斷。
•BarcodeRecognition-提取條形碼。
• BusinessCardsProcessing–識別名片。
• HighCompressedImageOnlyPdf–無損壓縮文件,將全部文件以圖片的形式保存。
能夠用Engine.LoadPredefinedProfile來加載這些配置文件。也能夠經過.ini格式來建立自定義的用戶定義配置文件。該軟件自帶的幫助文件中有詳細說明,能夠幫助用戶建立自定義的配置文件。能夠調用Engine.LoadProfile來加載自定義的用戶配置文件。
其餘平臺和產品
我只使用了FineReaderEngine的Windows SDK,但ABBYY也提供一些其餘產品。FineReader Engine還支持Mac OS、Linux、移動SDK平臺使用,其中FlexiCapture EngineSDK還能進行數據採集。經過ABBYY託管在Azure的雲環境,開發者還能得到Web API。此外,ABBYY還有某些功能強大的、即裝即用的OCR產品和數據採集產品可供用戶選擇。您能夠訪問他們的網站,查看他們的所有產品。