光學標記識別 (OMR) 允許讀取和捕獲標記在特殊類型文檔表格上的數據。此文檔表單可以是測試或調查,由用戶填寫的氣泡或方形輸入組成。我們可以輕鬆地對此類調查表或測試表的掃描圖像執行 OMR 操作,並在 .NET 應用程序中以編程方式讀取用戶輸入。在本文中,我們將學習如何使用 C# 執行 OMR 和提取數據。
本文應涵蓋以下主題:
用於執行 OMR 和提取數據的 C# OMR API
為了執行 OMR 操作和從圖像導出數據,我們將使用 Aspose.OMR for .NET API。它允許設計、創建和識別答題卡、測試、MCQ 試卷、測驗、反饋表、調查和投票。請 下載 API 的 DLL 或使用 NuGet 安裝它。
PM> Install-Package Aspose.OMR
執行 OMR 並從圖像中提取數據
為了對圖像進行 OMR 操作,我們需要準備好 OMR 模板(.omr)和圖像(用戶填寫的表格/表格)以對其進行 OMR。我們可以按照以下步驟對圖像執行 OMR 操作並提取數據:
- 首先,創建 OmrEngine 類的一個實例。
- 接下來,調用 GetTemplateProcessor() 方法並初始化 TemplateProcessor 類對象。它以 OMR 模板文件路徑作為參數。
- 然後,通過以圖像路徑作為參數調用 RecognizeImage() 方法來獲取 RecognitionResult 對象。
- 之後,使用 GetCsv() 方法將識別結果作為 CSV 字符串獲取。
- 最後,將CSV結果保存為本地磁盤的CSV文件。
以下代碼示例展示瞭如何使用 C# 對圖像執行 OMR 並提取 CSV 格式的數據。
// OMR 模板文件路徑
string templatePath = @"D:\Files\OMR\Sheet.omr";
// 圖片文件路徑
string imagePath = @"D:\Files\OMR\Sheet1.jpg";
// 初始化 OMR 引擎
OmrEngine engine = new OmrEngine();
// 獲取模板處理器
TemplateProcessor templateProcessor = engine.GetTemplateProcessor(templatePath);
// 識別圖像
RecognitionResult result = templateProcessor.RecognizeImage(imagePath);
// 獲取 CSV 格式的結果
string csvResult = result.GetCsv();
// 保存 CSV 文件
File.WriteAllText(@"D:\Files\OMR\Sheet1.csv", csvResult);
上述代碼示例中使用的 OMR 模板可以從 此處 下載。
執行 OMR 並從多個圖像中提取數據
我們可以按照前面提到的步驟對多張圖像執行 OMR 操作,並為每張圖像在單獨的 CSV 文件中提取數據。但是,我們需要對所有圖像一張一張地重複步驟 #3、4 和 5。
以下代碼示例展示瞭如何使用 C# 對多張圖像執行 OMR 並提取 CSV 格式的數據。
// OMR 模板文件路徑
string templatePath = @"D:\Files\OMR\Sheet.omr";
// 圖片文件夾文件路徑
string imageFolderPath = @"D:\Files\OMR\";
// 輸出目錄路徑
string outputPath = @"D:\Files\OMR\";
// 待處理圖像
string[] UserImages = new string[] { "Sheet1.jpg", "Sheet2.jpg" };
// 初始化 OMR 引擎
OmrEngine engine = new OmrEngine();
// 獲取模板處理器
TemplateProcessor templateProcessor = engine.GetTemplateProcessor(templatePath);
// 一張一張處理圖片
for (int i = 0; i < UserImages.Length; i++)
{
string imagePath = Path.Combine(imageFolderPath, UserImages[i]);
// 識別圖像
RecognitionResult result = templateProcessor.RecognizeImage(imagePath);
// 獲取 CSV 格式的結果
string csvResult = result.GetCsv();
// 保存 CSV 文件
File.WriteAllText(Path.Combine(outputPath, Path.GetFileNameWithoutExtension(UserImages[i]) + ".csv"), csvResult);
}
API 還提供了在 OMR 操作期間檢測和識別圖像上可用的任何條形碼的功能。這是 OMR 操作的默認功能。我們可以按照前面提到的步驟進行 OMR 操作和識別條形碼。
獲取帶閾值的 OMR 結果
我們可以在對圖像執行 OMR 操作時應用閾值。閾值的值可以從 0 到 100,具體取決於要求。閾值越高,API 對高亮答案越嚴格。請按照前面提到的步驟使用閾值執行 OMR。但是,我們只需要在步驟 # 3 中調用重載的 RecognizeImage(string, int32) 方法。它以圖像文件路徑和閾值作為參數。
以下代碼示例顯示瞭如何使用 C# 執行具有閾值的 OMR。
// OMR 模板文件路徑
string templatePath = @"D:\Files\OMR\Sheet.omr";
// 圖片文件路徑
string imagePath = @"D:\Files\OMR\Sheet1.jpg";
// 閾值
int CustomThreshold = 40;
// 初始化 OMR 引擎
OmrEngine engine = new OmrEngine();
// 獲取模板處理器
TemplateProcessor templateProcessor = engine.GetTemplateProcessor(templatePath);
// 識別圖像
RecognitionResult result = templateProcessor.RecognizeImage(imagePath, CustomThreshold);
// 獲取 CSV 格式的結果
string csvResult = result.GetCsv();
// 保存 CSV 文件
File.WriteAllText(@"D:\Files\OMR\Sheet1_threshold.csv", csvResult);
重新計算的 OMR 操作
在某些情況下,我們可能需要重新計算具有不同閾值的 OMR 結果。為此,我們可以將 API 配置為使用 TemplateProcessor.recalculate() 方法自動重新計算。它允許通過更改閾值設置多次處理圖像以獲得所需的結果。我們可以按照以下步驟執行重新計算的 OMR 操作:
- 首先,創建 OmrEngine 類的一個實例。
- 接下來,調用 GetTemplateProcessor() 方法並初始化 TemplateProcessor 類對象。它以 OMR 模板文件路徑作為參數。
- 然後,初始化 Stopwatch 對象並啟動計時器。
- 接下來,通過以圖像路徑作為參數調用 RecognizeImage() 方法來獲取 RecognitionResult 對象。
- 然後,停止計時器並使用 GetCsv() 方法將識別結果導出為 CSV 字符串。
- 接下來,將 CSV 結果保存為本地磁盤上的 CSV 文件。
- 然後,使用 Restart() 方法重新啟動計時器。
- 接下來,調用 Recalculate() 方法。它以 RecognitionResult 對象和閾值作為參數。
- 之後,停止計時器並使用 GetCsv() 方法將識別結果導出為 CSV 字符串。
- 最後將CSV結果保存為CSV文件到本地磁盤。
下面的代碼示例展示瞭如何使用 C# 通過重新計算方法執行 OMR。
// OMR 模板文件路徑
string templatePath = @"D:\Files\OMR\Sheet.omr";
// 圖片文件路徑
string imagePath = @"D:\Files\OMR\Sheet1.jpg";
// 閾值
int CustomThreshold = 40;
// 初始化 OMR 引擎
OmrEngine engine = new OmrEngine();
// 獲取模板處理器
TemplateProcessor templateProcessor = engine.GetTemplateProcessor(templatePath);
// 性能測量計時器
Stopwatch sw = Stopwatch.StartNew();
// 識別圖像
RecognitionResult result = templateProcessor.RecognizeImage(imagePath, CustomThreshold);
sw.Stop();
// 獲取 CSV 格式的結果
string csvResult = result.GetCsv();
// 保存 CSV 文件
File.WriteAllText(@"D:\Files\OMR\Sheet1.csv", csvResult);
sw.Restart();
// 重新計算
templateProcessor.重新計算(result, CustomThreshold);
sw.Stop();
// 以 CSV 格式獲取重新計算的結果
csvResult = result.GetCsv();
// 保存重新計算的結果 CSV 文件
File.WriteAllText(@"D:\Files\OMR\Sheet1_重新計算d.csv", csvResult);
獲得免費許可證
您可以 獲得免費的臨時許可證 來試用該庫,而沒有評估限制。
結論
在本文中,我們學習瞭如何:
- 使用C#對圖像進行OMR操作並提取CSV格式的數據;
- 在圖像上執行 OMR 時應用閾值設置;
- 以編程方式重新計算汽車過程中的 OMR 結果。
此外,您可以使用文檔了解更多關於 Aspose.OMR for .NET API 的信息。如有任何歧義,請隨時在論壇上與我們聯繫。