跳轉到主要內容
如果您處理大量文件,OCR 在處理能力方面可能非常耗費資源。使用多 CPU 系統來提高處理速度通常是合理的,而 ABBYY FineReader Engine 提供了幾種方式,讓您能夠利用硬體配置的多處理功能。 本節概述了可能的使用情境,並提供選擇適合您任務的特定多處理模式的建議,連同測試統計資料。還有連結至 程式碼範例,這些範例提供了多處理實作。 要使用多處理,您需要將 Engine 物件的 MultiProcessingParams 屬性設定為適當的值。 ABBYY FineReader Engine 支援兩個不同的物件,可從單一 Engine 實例提供多處理。它們是 FRDocument 物件 (請參閱 使用 FRDocument 物件進行處理) 和 BatchProcessor 物件 (請參閱 使用 Batch Processor 進行處理) 。
請注意,並行處理比順序處理需要更多的 RAM。工作站的一般建議是 350 MB × (核心數量) + 450MB RAM,如果您處理阿拉伯文或 CJK 語言 的文件 — 850 MB × (核心數量) + 750MB RAM。

使用情境

我們先假設您需要處理大量文件。但也必須考量您希望取得的結果,並選擇最適合完成任務的方法。需要考慮的主要情境如下:
  • 轉換頁數很多的多頁文件。這通常表示要處理書籍、長篇報告等。在這種情況下,您可以先並行識別文件各頁,再於主程序中執行合成,之後再次並行匯出。使用 Engine 集區時,您也可以同時處理多個多頁文件,但記憶體耗用可能非常龐大,甚至導致「記憶體不足」錯誤。
  • 轉換大量單頁文件。這種情況常見於處理發票、合約、信件等。對這類情況而言,並行處理最簡單,因為單頁文件彼此之間沒有相依性,也不會一次占用大量記憶體。
  • 處理大量影像,並從中搜尋所需資訊,或以其他方式使用識別結果。您可能不需要將其中大多數轉換為可編輯格式,因此合成與匯出的速度不是問題。會在多個程序中執行的操作,是逐一走訪版面配置區塊並存取文字區塊的識別結果。
如果您想在匯出時使用並行處理,請注意,此功能僅支援匯出為 PDF (TextOnly 模式除外) 和 PPTX 格式。

建議和限制

  • 對於多頁文件的並行處理,我們建議使用 FRDocument。這是最易於以程式碼實作的多處理方式,因為您無需實作任何額外的介面。
    開啟、預處理、分析和識別會並行執行;文件合成會在主程序中依序執行,然後匯出至 PDF (TextOnly 模式除外) 和 PPTX 格式會並行執行。
  • 要處理從某個來源 (例如掃描器) 接收的許多單頁文件,我們建議使用 BatchProcessor。
    此方法的優點是,即使事先不知道文件數量,也可以使用;這些文件可能為不同類型,且必須在它們到達時立即處理。缺點是它需要更多的實作工作:您必須實作檔案配接器和自訂影像來源的介面。
    所有處理階段都會並行執行,因為在單頁文件的情況下,頁面和文件合成會針對每個頁面單獨執行。
並行匯出在與 Batch Processor 相關的情境中不支援。
要擷取並處理並行處理期間發生的イベント,您可以使用 IParallelProcessingCallback 介面。此介面對於管理問題情況非常有用。例如,當逾時錯誤發生時,IParallelProcessingCallback 介面會根據使用者偏好提供問題的幾種解決方案。更多資訊,請參閱 IParallelProcessingCallback::OnWaitIntervalExceeded
頁面並行處理期間發生的イベント會轉換為整個文件的イベント。

使用 FRDocument 物件進行處理

系統會根據可用的實體或邏輯 CPU 核心數量、授權中可用的空閒 CPU 核心數量,以及文件中的頁面數量,自動偵測要執行的處理程序數量。若要開啟多處理模式,請執行以下步驟:
  1. 設定 Engine 物件的 MultiProcessingParams 子物件的 MultiProcessingMode 屬性值。若此屬性設定為 MPM_Parallel 或 MPM_Auto,且文件頁面數量與可用 CPU 核心數量均大於一,則會啟用平行處理。
  2. 使用 RecognitionProcessesCount 屬性調整要執行的處理程序數量,並視需要指定其他屬性的值。
完成多處理設定後,即可使用標準程序來操作 FRDocument。當您呼叫 FRDocument 物件的下列任一方法時,ABBYY FineReader Engine 將自動啟動多個識別處理程序: 文件的每個頁面都會建立一個新的處理任務,並將該任務指派給其中一個識別處理程序。識別處理程序完成任務後,即會接收下一個處理任務。此流程持續進行,直到所有任務均處理完畢為止。

使用 Batch Processor 進行處理

初始化 Batch Processor 時,系統會啟動並設定非同步識別程序。接著,處理器會從自訂影像來源取得影像檔。對於影像檔中的每個頁面,都會建立一個新的處理工作,並將此工作交給其中一個識別程序。若某個檔案的所有工作都已送交處理,但並非所有識別程序都在忙碌中,則會從來源的影像佇列中取出下一個影像檔並送交處理。此流程會持續進行,直到第一個影像頁面完成轉換並傳回給使用者。頁面會依照從影像來源取得的順序回傳給使用者。 若要使用 Batch Processor 組織多程序處理,請執行下列步驟:
  1. 實作 IImageSourceIFileAdapter 介面,以提供對影像來源及其中檔案的存取。
  2. [選用] 實作 IAsyncProcessingCallback 介面,以管理處理流程。此介面的方法可讓您處理錯誤和/或取消處理。
  3. [選用] 使用 Engine 物件的 MultiProcessingParams 子物件來設定多程序處理。請注意,無需設定 MultiProcessingMode 屬性,因為使用 Batch Processor 時,預設會採用平行處理。請使用 RecognitionProcessesCount 屬性調整要執行的程序數量,並在需要時指定其他屬性的值。
  4. 呼叫 Engine 物件的 CreateBatchProcessor 方法,以取得 BatchProcessor 物件。
  5. 呼叫此物件的 Start 方法,以初始化處理器並啟動非同步識別程序。您可以在呼叫此方法時指定影像來源、傳入 IAsyncProcessingCallback 介面的參考,以及參數物件。
  6. 在迴圈中呼叫 GetNextProcessedPage 方法,直到該方法回傳 0,這表示來源中已無更多影像,且所有已處理的影像都已回傳給使用者。
GetNextProcessedPage 方法回傳的頁面會持續存在到下一次呼叫此方法為止。因此,若您想儲存此頁面,必須在下一次呼叫 GetNextProcessedPage 方法之前,使用 FRPage 物件的方法將其儲存,或使用 IFRDocument::AddPage 方法將其加入現有文件。
ABBYY FineReader Engine 發行套件包含 BatchProcessing 範例,示範如何使用 Batch Processor。

另請參閱

FRDocument BatchProcessor MultiProcessingParams 逐頁處理文件