C# 中快速 OCR 配置以達到最佳效能
IronOCR 的快速設定功能透過使用EnglishFast語言模式並停用條碼讀取等不必要的功能,可在不損失準確度的情況下,將 OCR 處理速度提高高達 17%。 這種優化非常適合時間至關重要的大批量處理。
IronOCR開箱即用,效果顯著。 當速度比絕對精度更重要時,IronOCR 提供了快速配置方案。 此設定可在保證準確性的前提下顯著提高掃描效能,使其比標準OCR 配置快得多。
本文示範如何設定快速配置,並比較了快速 IronOCR 配置和標準 IronOCR 配置之間的基準測試結果。 無論您是處理掃描文件、 PDF還是影像,這些最佳化都能顯著提高應用程式的效能。
開始使用 IronOCR
如何設定 OCR 快速配置
- 使用 NuGet 安裝 OCR 庫以設定 IronOCR
- 初始化 OCR 引擎
- 將
Language設定為英語(快速) - 將
ReadBarCodes屬性設定為false - 加載圖像並提取文本
快速入門:在 C# 中配置快速 OCR
快速配置的主要組成部分是Language屬性。 將Language屬性設定為OcrLanguage.EnglishFast可以優先考慮速度,而犧牲一點準確性可能會造成損失。 這使得 IronOCR 可以更快地進行批量讀取,這在時間至關重要的關鍵任務應用中尤其有用。
除了設定快速語言外,您還可以透過停用不必要的配置(例如ReadBarCodes )來進一步提高速度。 讓 IronOCR 自動偵測頁面分割,以簡化設定。 有關更進階的配置選項,請參閱我們的Tesseract 詳細配置指南。
以下程式碼範例處理以下輸入影像:
我應該使用哪種輸入格式?

快速配置需要哪些程式碼?
立即開始使用 NuGet 建立 PDF 檔案:
使用 NuGet 套件管理器安裝 IronOCR
複製並運行這段程式碼。
/* :path=/static-assets/ocr/content-code-examples/how-to/ocr-fast-configuration.cs */ using IronOcr; using System; var ocrTesseract = new IronTesseract(); // Fast Dictionary ocrTesseract.Language = OcrLanguage.EnglishFast; // Turn off unneeded options ocrTesseract.Configuration.ReadBarCodes = false; // Assume text is laid out neatly in an orthogonal document ocrTesseract.Configuration.PageSegmentation模式 = TesseractPageSegmentation模式.Auto; using var ocrInput = new OcrInput(); ocrInput.LoadImage("image.png"); var ocrResult = ocrTesseract.Read(ocrInput); Console.WriteLine(ocrResult.Text);部署到您的生產環境進行測試
我可以期待什麼樣的輸出?

這是從上方提取的文字輸出。 OCR引擎能夠準確捕捉文學文本,同時保持原文的格式和結構。 快速配置可為清晰、高對比度的文字(例如本例中的文字)提供極佳的效果。
快速配置與標準配置有何差異?
為了展示實際影響,我們對標準配置和快速配置的效能進行了基準測試。 我們使用一組 10 個範例影像,每個影像包含幾個段落,來比較效能並視覺化使用快速配置的權衡。
對於標準配置,我們使用預設設定初始化IronTesseract ,不套用任何面向速度的屬性。 這種基準測試方法與我們的效能追蹤指南類似,該指南展示瞭如何即時監控 OCR 操作。
以下是我們用於運行測試的範例輸入。這些影像展示了您在處理多頁文件或進行批次操作時可能遇到的典型文件場景。
如何運行基準測試?
:path=/static-assets/ocr/content-code-examples/how-to/ocr-fast-configuration-benchmark.csusing IronOcr;
using System;
using System.Diagnostics;
using System.IO;
// --- Tesseract Engine Setup ---
var ocrTesseract = new IronTesseract();
ocrTesseract.Language = OcrLanguage.EnglishFast;
ocrTesseract.Configuration.ReadBarCodes = false;
ocrTesseract.Configuration.PageSegmentationMode = TesseractPageSegmentationMode.Auto;
// --- 1. Define folder and get files ---
string folderPath = @"images"; // IMPORTANT: Set this to your image directory
string filePattern = "*.png"; // Change to "*.jpg", "*.bmp", etc. as needed
string outputFilePath = "ocr_results.txt"; // The new results file
// Get all image files in the directory
var imageFiles = Directory.GetFiles(folderPath, filePattern);
Console.WriteLine($"Found {imageFiles.Length} total images to process...");
Console.WriteLine($"Results will be written to: {outputFilePath}");
// --- 2. Start timer and process images, writing to file ---
// Open the output file *before* the loop for efficiency
using (StreamWriter writer = new StreamWriter(outputFilePath))
{
var stopwatch = Stopwatch.StartNew();
foreach (var file in imageFiles)
{
string fileName = Path.GetFileName(file);
using var ocrInput = new OcrInput();
ocrInput.LoadImage(file);
var ocrResult = ocrTesseract.Read(ocrInput);
// Check if any text was actually found
if (!string.IsNullOrEmpty(ocrResult.Text))
{
// Write to Console
Console.WriteLine($"--- Text found in: {fileName} ---");
Console.WriteLine(ocrResult.Text.Trim());
Console.WriteLine("------------------------------------------");
// Write to File
writer.WriteLine($"--- Text found in: {fileName} ---");
writer.WriteLine(ocrResult.Text.Trim());
writer.WriteLine("------------------------------------------");
writer.WriteLine(); // Add a blank line for readability
}
else
{
// Write to Console
Console.WriteLine($"No text found in: {fileName}");
// Write to File
writer.WriteLine($"No text found in: {fileName}");
writer.WriteLine();
}
}
stopwatch.Stop();
// --- 3. Print and write final benchmark summary ---
string lineSeparator = "\n========================================";
string title = "Batch OCR Processing Complete";
string summary = $"Fast configuration took {stopwatch.Elapsed.TotalSeconds:F2} seconds";
// Write summary to Console
Console.WriteLine(lineSeparator);
Console.WriteLine(title);
Console.WriteLine("========================================");
Console.WriteLine(summary);
// Write summary to File
writer.WriteLine(lineSeparator);
writer.WriteLine(title);
writer.WriteLine("========================================");
writer.WriteLine(summary);
if (imageFiles.Length > 0)
{
string avgTime = $"Average time per image: {(stopwatch.Elapsed.TotalSeconds / (double)imageFiles.Length):F3} seconds";
Console.WriteLine(avgTime);
writer.WriteLine(avgTime);
}
}
Console.WriteLine($"\nSuccessfully saved results to {outputFilePath}");此基準測試程式碼示範了幾個重要概念:
1.批次處理:此程式碼在一次操作中處理多張影像,類似於我們的 多執行緒 OCR 範例,展示如何利用並行處理來獲得更大的速度提升。
2.效能測量:使用Stopwatch類別可以提供精確到毫秒的計時測量,這對於比較不同的配置至關重要。
3.結果日誌記錄:控制台和檔案輸出確保您可以稍後分析結果並驗證不同配置之間的準確性差異。
我能獲得哪些效能提升?
| 模式 | 總時間 | 平均耗時/影像 | 與標準相比,時間增益 | 與標準相比,精度提升 |
|---|---|---|---|---|
| 標準 | 10.40秒 | 1.040秒 | 基線 | 基線 |
| 快速地 | 8.60秒 | 0.860秒 | +17.31%(速度更快) | +0%(相同) |
標準配置和快速配置的基準測試結果顯示,快速配置具有明顯的效能優勢。 以標準模式為基準(總時間為 10.40 秒),快速配置僅用 8.60 秒就完成了相同批次的 10 張影像的處理。 這意味著在時間上節省了17.31%。 至關重要的是,速度的提升並沒有降低品質; 兩種模式的準確度相同,兩種配置產生的文字輸出也相同。
何時應該使用快速配置?
快速配置尤其適用於:
- 需要快速處理大量文檔,例如數千頁的文檔處理。
- 對反應時間要求極高的即時應用
- 需要保持響應式使用者體驗的Web 應用程式
- 依嚴格計畫運作的批次系統
對於涉及多種語言、低品質掃描或特殊文件類型(如車牌或護照)的更複雜場景,您可能需要使用標準配置以確保最高的準確性。
IronOCR 讓配置之間的切換變得簡單——只需更改幾個屬性,您的應用程式即可適應不同的效能要求,而無需進行重大程式碼變更。
常見問題解答
與標準設定相比,快速 OCR 配置的速度快多少?
與標準的 OCR 設定相比,IronOCR 的快速配置可使處理速度提高 17%,且對準確性的影響極小。這種性能增益是透過 EnglishFast 語言模式和停用不必要的功能來實現的。
實現快速 OCR 處理的主要設定是什麼?
IronOCR 中快速配置的主要元件是將語言屬性設定為 OcrLanguage.EnglishFast。這將速度優先於精確度上的小潛在代價,非常適合大量處理和時間緊迫的應用程式。
除了使用 EnglishFast 模式之外,我該如何進一步優化 OCR 速度?
您可以透過停用 IronOCR 中不必要的功能來獲得額外的速度改善,例如,如果您不需要條碼偵測,可將 ReadBarCodes 設為 false。此外,使用 TesseractPageSegmentationMode.Auto 讓 IronOCR 自動偵測頁面分割。
何時應該使用快速 OCR 設定而非標準設定?
IronOCR 中的快速 OCR 配置非常適合用於大批量處理的場景,在這些場景中,時間非常重要,而在精確度方面稍作取捨是可以接受的。它對於需要快速處理掃描文件、PDF 或影像的關鍵任務應用程式尤其有用。
快速配置是否適用於所有文件類型?
是的,IronOCR 的快速配置可有效處理各種文件類型,包括掃描文件、PDF 和影像。無論您處理的是何種輸入格式,優化優點都適用。
使用快速 OCR 模式時,精確度是否有任何損失?
IronOCR 的快速配置可大幅提升掃描效能,且對精確度的影響極小。雖然在使用 EnglishFast 模式時,可能會在精確度上付出少許潛在代價,但對於以速度為優先的應用程式來說,這樣的取捨往往是值得的。






