1. 程式人生 > >ABBYY FineReader Engine OCR 軟體開發工具包深度解析

ABBYY FineReader Engine OCR 軟體開發工具包深度解析

       FineReader Engine是一個軟體開發工具包,用來開發功能強大的應用程式,以開啟影象、PDF文件和掃描文件,分析和解析內容並輸出結果。它們幾乎能夠生成任何一種包含文字結果的匯出檔案,包括基於文字的PDF格式、微軟Office格式、XML格式(尤其有助於讓OCR結果與其他系統配套使用)等等。

        ABBYY FineReader Engine是一款功能強大的光學字元識別(OCR)軟體開發工具包(SDK),集成了ABBYY最先進的文件識別和轉換軟體技術,如:光學字元識別(OCR)、智慧字元識別(ICR)、光學標記識別(OMR)、條形碼識別(OBR)、文件影像和PDF轉換。

        如果開發人員需要開發具有以下任一功能的應用程式,可以考慮使用ABBYY FineReader Engine軟體開發工具包(SDK):

        ·文件轉換

        ·檔案歸檔

        ·檔案分類

        ·書籍歸檔

        ·文字提取

        ·欄位識別

        ·條碼識別

        ·名片識別

       ·影象預處理

       ·掃描

        這個SDK中包含有十幾個應用程式示例,包括

C++、C#、VB.NET、VB、Delphi、Java和幾種指令碼語言(JavaScript、Perl和VBScript)示例。你可以檢視程式碼開發庫(Code Development Library)來快速入門,程式碼開發庫中包含了SDK程式設計的各個方面。每個截面程式碼庫包含一個或多個程式碼片段並逐步描述瞭如何執行一項任務。選擇你需要執行的任務,檢視操作步驟描述,查閱原始碼示例或執行可執行檔案。

        安裝和設定

        在開發機上安裝FineReader時有幾個步驟。首先,必須安裝授權伺服器。如果只有1個開發人員使用SDK,此時可以將它直接安裝在開發機上。如果多個開發人員要從多個工作站使用FineReader,此時應該將授權伺服器安裝在所有開發人員都能訪問的應用程式伺服器上。授權伺服器必須安裝在物理機器上,而不是虛擬機器上。通過授權管理器,您可以新增和啟用您的許可證,無論您的許可證是試用版或購買的正品版本。

        接下來,可以將FineReaderEngine安裝在開發機上,並連線到授權伺服器。

        安裝完成後,如果您使用的是Visual Studio2010或2012,此時必須再完成幾個步驟,才能夠使用視覺化元件(控制元件)。這些步驟在其自帶的SDK幫助檔案“在不同版本的Visual Studio中使用視覺化組建”頁可以找到。

        現在您就可以使用SDK進行開發了。你可以按照上文程式碼開發庫中描述的示例應用程式進行開發或你可以著手建立自己的程式。建立專案

        首先,在C#或Visual Basic中建立一個新的Windows窗體應用程式。我在開發應用程式時使用的是Visual Studio2010。       

        隨後將ABBYY控制元件新增到Visual Studio工具箱視窗。我在工具箱中建立了1個新的ABBYY<section>。       

       將該專案的引用新增到ABBYY \Inc\.Net Interops\ 資料夾下的三個Interop DLL檔案中,在安裝過程中,這三個檔案都已註冊並被新增到了GAC裡面。

       下面介紹設計檢視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();
}       

       當然,在實際應用中,您可能會建立一個按鈕,使用者通過點選這個按鈕可以從檔案系統中選擇需要開啟的檔案。必須注意的是,解除安裝引擎非常重要。如果不這樣做,就會佔用您的工作站所獲得的授權,直到手動將它從授權伺服器中釋放出來為止。

       對載入的檔案執行識別處理也是一件比較簡單的事情。下面是管理該程序的方法:

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來載入自定義的使用者配置檔案。其他平臺和產品

        ABBYY也提供一些其他產品。FineReader Engine還支援Mac OS、Linux、移動SDK平臺使用,其中FlexiCapture

EngineSDK還能進行資料採集。通過ABBYY託管在Azure的雲環境(訪問www.ocrsdk.com),開發者還能獲得Web

API。此外,ABBYY還有某些功能強大的、即裝即用的OCR產品和資料採集產品可供使用者選擇。您可以訪問他們的網站,檢視他們的全部產品。