- 建立分類資料庫
- 分類文件
情境實作
本主題提供的程式碼範例僅適用於 Windows。
步驟 1. 載入 ABBYY FineReader Engine
步驟 1. 載入 ABBYY FineReader Engine
若要開始使用 ABBYY FineReader Engine,您需要建立 Engine 物件。Engine 物件是 ABBYY FineReader Engine 物件階層中的頂層物件,提供各種全域設定、部分處理方法,以及建立其他物件的方法。若要建立 Engine 物件,您可以使用 InitializeEngine 函式。另請參閱 載入 Engine 物件的其他方式 (Win) 。
C#
步驟 2. 建立 ClassificationEngine
步驟 2. 建立 ClassificationEngine
建立 ClassificationEngine 物件,作為其他 Classification API 物件的工廠。請使用 Engine 物件的 CreateClassificationEngine 方法。
C#
步驟 3. 準備分類物件
步驟 3. 準備分類物件
訓練和分類方法會使用一種特殊物件,這種物件是根據文件或頁面建立的:ClassificationObject,其中包含所有與分類相關的資訊。若要為分類情境準備文件,請執行下列步驟:
- 載入要處理的影像。可用的方法有好幾種:例如,您可以使用 Engine 物件的 CreateFRDocument 方法建立 FRDocument 物件,然後使用 AddImageFile 方法,從檔案將影像加入已建立的 FRDocument 物件。
- 如果您要訓練或使用會考量文字特徵的分類器類型 (CT_Combined、CT_Text) ,請先用任何方便的方法辨識文件。我們將使用 FRDocument 物件的 Analyze 和 Recognize 方法。分類不需要進行文件合成。
雖然分類本身不支援平行處理,但在 Windows 和 Linux 中,您可能會需要對文件進行前置辨識處理。如果要分類的文件數量很多,建議使用 Batch Processor,或採用 Parallel Processing with ABBYY FineReader Engine 中所述的其他平行處理方法。
- 使用 ClassificationEngine 物件的 CreateObjectFromDocument 方法,建立一個包含文件第一頁資訊的 ClassificationObject。如果需要使用文件中的其他頁面,請呼叫 CreateObjectFromPage 方法。
- ClassificationObject 的 Description 屬性預設為空白。如果您需要相關描述,請設定此屬性。
有時候,即使文件或頁面已完成辨識,仍可能完全沒有任何辨識出的文字 (例如誤用了空白頁) 。在這種情況下,ClassificationObject 就不能用於需要文字特徵的分類器。您可以使用其 SuitableClassifiers 屬性再次確認。
C#
步驟 4. 建立訓練資料集
步驟 4. 建立訓練資料集
若要訓練能夠區分多種文件類型的分類器,您需要一個已分類的資料集,其中包含各類型的範例。使用 TrainingData 物件來填充及管理此資料集:
- 使用 ClassificationEngine 物件的 CreateTrainingData 方法建立空白物件。
- 透過其 Categories 屬性存取類別集合。
- 多次使用 Categories 物件的 AddNew 方法,為您打算分類的每一種文件類型新增一個類別。此方法需要一個 string 作為輸入參數,用來指定類別標籤。分類方法會傳回此標籤,因此它在類別集合中必須是唯一的。
- 針對每個新加入的 Category 物件,使用 Objects 屬性開啟分類物件集合。接著,使用 IClassificationObjects::Add 方法加入對應至此類別的分類物件。
任何類別都不能留空。顯而易見地,訓練至少需要兩個類別。 - 現在您已完成訓練資料集的設定,可能會想將它儲存到磁碟上的檔案中,以便日後使用:例如,如果訓練出的模型準確度不夠理想,而您希望新增或修正部分資料以提升品質。TrainingData 物件提供 SaveToFile 方法。
C#
步驟 5. 訓練分類模型
步驟 5. 訓練分類模型
模型訓練的功能由 Trainer 物件提供。請使用 ClassificationEngine 物件的 CreateTrainer 方法來建立此物件。它包含分類器類型和訓練程序的所有設定,分別位於兩個子物件 TrainingParams 和 ValidationParams 中。請確認您所需的設定,並修改對應的屬性:ITrainingResult::Model 屬性可存取已訓練的分類模型。您可以使用 SaveToFile 方法將其儲存至檔案,或直接用於分類文件 (繼續執行步驟 6) 。
- 分類器的類型 (ITrainingParams::ClassifierType) 。此設定會決定在指派類別時會考量文件的哪些特徵:影像特徵、已辨識文字的內容,或兩者。若要選取使用文字內容的類型,您必須確保訓練資料集中的所有分類物件,都是根據先前已辨識的文件所建立。
- 訓練模式 (ITrainingParams::TrainingMode) 。此設定決定訓練程序應優先追求高精確率 (選取的元素中有多少是正確的) 、高召回率 (有多少正確元素被選取) ,或在兩者之間取得平衡。
- 是否應使用 k 折交叉驗證 (IValidationParams::ShouldPerformValidation) 。我們建議在訓練樣本量不大時使用交叉驗證,因為這樣可以在同一樣本的不同分割上訓練多個模型,並選出最佳模型。如果您擁有大量已分類的資料,最好關閉驗證,在整個訓練樣本上訓練模型,然後使用分類方法 (步驟 6) 在另一個樣本上測試模型,並由您自行計算效能評分。
- k 折交叉驗證的參數:訓練樣本被分成的份數 (IValidationParams::FoldsCount) 以及迭代次數 (IValidationParams::RepeatCount) 。請注意,在每次迭代中,訓練集所需的物件數量對於文字分類器不得少於 4,對於組合分類器不得少於 8。請確保您的訓練樣本包含足夠的物件。
odel 訓練和分類在 Linux 和 Windows 上都會以循序模式執行,不受 IMultiProcessingParams::MultiProcessingMode 值的影響。
C#
步驟 6. 將文件分類
步驟 6. 將文件分類
若要使用已訓練的模型進行分類:
- 如果模型目前尚未載入,請呼叫 ClassificationEngine 物件的 CreateModelFromFile 方法,從磁碟上的檔案載入模型。
- 如步驟 3 所述,根據您要分類的文件準備分類物件。
- 針對每個分類物件,請呼叫 Model 物件的 Classify 方法,並將 ClassificationObject 作為輸入參數。此方法會傳回一組 ClassificationResult 物件,每個物件都包含類別標籤及該類別的機率。結果會依機率由高到低排序。請擷取結果,並確認該機率等級是否可接受。
如果分類器無法指派類別,則會傳回 null,而非結果集合。
模型訓練與分類在 Linux 和 Windows 中都會以循序模式執行,無論 IMultiProcessingParams::MultiProcessingMode 的值為何。
C#
步驟 7. 卸載 ABBYY FineReader Engine
步驟 7. 卸載 ABBYY FineReader Engine
必要資源
進一步最佳化
- 載入 Engine - 僅限 Windows
- 載入 Engine 物件的不同方式
詳細說明載入 Engine 物件的各種方式。 - 在多執行緒伺服器應用程式中使用 ABBYY FineReader Engine
說明在伺服器應用程式中使用 FineReader Engine 時的特定考量。
- 載入 Engine 物件的不同方式
- 辨識 - 適用於 Linux 和 Windows
- 使用 ABBYY FineReader Engine 進行平行處理
若要快速將已辨識的文件或頁面準備供具文字特徵的分類器使用,請在辨識時使用平行處理,並在分類時關閉多重處理。
- 使用 ABBYY FineReader Engine 進行平行處理
