使用 C# 執行 OMR 和提取數據

光學標記識別 (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 操作並提取數據:

  1. 首先,創建 OmrEngine 類的一個實例。
  2. 接下來,調用 GetTemplateProcessor() 方法並初始化 TemplateProcessor 類對象。它以 OMR 模板文件路徑作為參數。
  3. 然後,通過以圖像路徑作為參數調用 RecognizeImage() 方法來獲取 RecognitionResult 對象。
  4. 之後,使用 GetCsv() 方法將識別結果作為 CSV 字符串獲取。
  5. 最後,將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 模板可以從 此處 下載。

執行 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 操作:

  1. 首先,創建 OmrEngine 類的一個實例。
  2. 接下來,調用 GetTemplateProcessor() 方法並初始化 TemplateProcessor 類對象。它以 OMR 模板文件路徑作為參數。
  3. 然後,初始化 Stopwatch 對象並啟動計時器。
  4. 接下來,通過以圖像路徑作為參數調用 RecognizeImage() 方法來獲取 RecognitionResult 對象。
  5. 然後,停止計時器並使用 GetCsv() 方法將識別結果導出為 CSV 字符串。
  6. 接下來,將 CSV 結果保存為本地磁盤上的 CSV 文件。
  7. 然後,使用 Restart() 方法重新啟動計時器。
  8. 接下來,調用 Recalculate() 方法。它以 RecognitionResult 對象和閾值作為參數。
  9. 之後,停止計時器並使用 GetCsv() 方法將識別結果導出為 CSV 字符串。
  10. 最後將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 的信息。如有任何歧義,請隨時在論壇上與我們聯繫。

也可以看看