C# 範例僅適用於 Windows 版 FRE。
在影像中偵測核取記號
C# 程式碼
C# 程式碼
識別一組核取記號
- 正確設定核取記號類型,因為
CMT_Circle和CMT_Square類型的核取記號具有黑色邊框,在計算百分比時必須將其納入考量; - 指定核取記號的精確區域,因為黑色百分比會以整個區域為基礎計算;如果區域中包含無關部分,估算結果可能會變差。
- 從含有核取記號群組的影像建立 FRDocument 物件。例如,您可以使用 Engine 物件的 CreateFRDocumentFromImage 方法。
- 從文件的頁面集合中取得包含核取記號影像的頁面 (IFRDocument::Pages) ——使用 FRPages 集合的屬性和方法。
- 透過 IFRPage::Layout 屬性,取得與此頁面對應的 Layout 物件。
- 對於每個核取記號群組:
- 使用 IEngine::CreateRegion 方法建立 Region 物件,並使用 IRegion::AddRect 方法向其中新增矩形。
-
建立核取記號群組類型的 Block 物件,並使用 ILayoutBlocks::AddNew 方法將其新增至版面配置區塊集合 (ILayout::Blocks) 中 (使用
BT_CheckmarkGroup常數和已建立的 Region 物件作為輸入參數。此方法還要求將版面配置中的區塊索引作為第三個輸入參數) 。 - 取得 CheckmarkGroup 物件 (使用 IBlock::GetAsCheckmarkGroup 方法) 。
- 對於群組中的每個核取記號:
-
使用
IEngine::CreateRegion方法建立 Region 物件,並使用IRegion::AddRect方法將矩形新增至其中。 - 使用 ICheckmarkGroup::AddNew 方法,在群組中建立新的核取記號區塊 (將已建立的 Region 物件作為輸入參數) 。
- 取得 CheckmarkBlock 物件 (使用 IBlock::GetAsCheckmarkBlock 方法) ,並設定所需參數 (CheckmarkType、IsCorrectionEnabled) 。
- 設定核取記號群組的必要參數 (MinimumCheckedInGroup、MaximumCheckedInGroup) 。
- 若要辨識核取記號,請使用任何可執行辨識的可用方法,例如 IFRPage::Recognize、IFRPage::RecognizeBlocks、IFRDocument::Recognize、IFRDocument::RecognizePages 等。
C# 程式碼
C# 程式碼
辨識單一核取記號
- 從含有核取記號的影像建立 FRDocument 物件。例如,您可以使用 Engine 物件的 CreateFRDocumentFromImage 方法。
- 從文件的頁面集合中取得包含核取記號影像的頁面 (IFRDocument::Pages) — 使用 FRPages 集合的屬性和方法。
- 透過 IFRPage::Layout 屬性,取得與此頁面對應的 Layout 物件。
- 使用 IEngine::CreateRegion 方法建立 Region 物件,並使用 IRegion::AddRect 方法將矩形新增至其中。
- 建立核取記號類型的 Block 物件,並使用 ILayoutBlocks::AddNew 方法將其新增至版面配置區塊集合 (ILayout::Blocks) 中 (使用 BT_Checkmark 常數和已建立的 Region 物件作為輸入參數) 。
- 取得 CheckmarkBlock 物件 (使用 IBlock::GetAsCheckmarkBlock 方法) ,並設定所需的參數 (CheckmarkType、IsCorrectionEnabled) 。
- 若要辨識核取記號,請使用任何可用的辨識方法,例如 IFRPage::Recognize、IFRPage::RecognizeBlocks、IFRDocument::Recognize、IFRDocument::RecognizePages 等。
C# 程式碼
C# 程式碼
學習辨識自訂類型的核取記號
- 找出一張影像,其中包含一些您想要辨識之類型的未勾選核取記號。這可以是包含這些核取記號的空白表單影像。
- 由此影像建立 FRDocument 物件。例如,您可以使用 Engine 物件的 CreateFRDocumentFromImage 方法。
- 從文件的頁面集合中取得包含核取記號影像的頁面 (IFRDocument::Pages) — 使用 FRPages 集合的屬性和方法。
- 透過 IFRPage::Layout 屬性,取得與此頁面對應的 Layout 物件。
- 指定頁面上每個核取記號區塊的區域與類型:
- 使用 IEngine::CreateRegion 方法建立 Region 物件,並使用 IRegion::AddRect 方法將核取記號區域的矩形加入其中。
- 建立核取記號類型的 Block 物件,並使用 ILayoutBlocks::AddNew 方法將其加入版面配置區塊集合 (ILayout::Blocks) (使用 BT_Checkmark 常數和已建立的 Region 物件作為輸入參數) 。
- 取得 CheckmarkBlock 物件 (使用 IBlock::GetAsCheckmarkBlock 方法) ,並將其 CheckmarkType 屬性設為 CMT_Custom。
- 訓練 FineReader Engine 識別此類核取記號:呼叫 FRPage 物件的 LearnCheckmarks 方法。
- 這樣一來,您在訓練前建立的 CheckmarkBlock 物件之 TrainingData 屬性會包含自訂核取記號類型的資訊。這項資訊之後可用於識別其他相同類型的核取記號。您可以使用 CheckmarkTrainingData 物件的 SaveToMemory 方法 (僅限 Windows) 或 SaveToFile 方法,將其儲存至檔案或記憶體。
- 根據包含此類核取記號的影像建立 FRDocument 物件,在頁面上指定核取記號區塊,並將核取記號類型設為 CMT_Custom。此程序如步驟 2 到 5 所述。
- 使用訓練期間取得的 CheckmarkTrainingData 物件,初始化每個 CheckmarkBlock 物件的 TrainingData 屬性。例如,您可以使用 CopyFrom 方法複製該物件,或使用 CheckmarkTrainingData 物件的 LoadFromMemory 方法 (僅限 Windows) 或 LoadFromFile 方法,從檔案或記憶體載入該物件。
- 呼叫 FRDocument 或 FRPage 物件的任一識別方法,例如 IFRDocument::Recognize 方法。
- 如果您對識別結果不滿意,CheckmarkBlock 物件的 BlackThreshold 和 SuspiciousDistance 屬性可讓您進一步微調設定。訓練完成後,這些屬性的預設值會改為在大多數情況下預期可正常運作的值。當您為核取記號區塊載入 CheckmarkTrainingData 物件時,這些屬性的值也會一併載入。您可以嘗試變更這些屬性的值,然後重新識別核取記號 (重複步驟 10) ;找到最佳組態後,再次儲存 CheckmarkTrainingData 物件,並使用新物件來識別您的自訂類型核取記號。
