IronOCR 操作指南 進度追踪 如何在 C# 中使用IronOCR進行進度跟踪 Curtis Chau 更新:2026年1月10日 下載 IronOCR NuGet 下載 DLL 下載 Windows 安裝程式 開始免費試用 LLM副本 LLM副本 將頁面複製為 Markdown 格式,用於 LLMs 在 ChatGPT 中打開 請向 ChatGPT 諮詢此頁面 在雙子座打開 請向 Gemini 詢問此頁面 在 Grok 中打開 向 Grok 詢問此頁面 打開困惑 向 Perplexity 詢問有關此頁面的信息 分享 在 Facebook 上分享 分享到 X(Twitter) 在 LinkedIn 上分享 複製連結 電子郵件文章 This article was translated from English: Does it need improvement? Translated View the article in English IronOCR為 OCR 操作提供了一個基於事件的進度追蹤系統,允許開發人員透過 OcrProgress 事件監控讀取進度,該事件會即時報告完成百分比、已處理的頁面和時間指標。 快速入門:訂閱 OcrProgress 並閱讀 PDF 本範例展示如何使用IronOCR監控 OCR 進度:訂閱其內建的 OcrProgress 事件,並在閱讀 PDF 時接收即時回饋,包括百分比、已完成頁數和總頁數。 只需幾行程式碼即可開始。 使用NuGet套件管理器安裝https://www.nuget.org/packages/IronOcr PM > Install-Package IronOcr 複製並運行這段程式碼。 var ocr = new IronOcr.IronTesseract(); ocr.OcrProgress += (s, e) => Console.WriteLine(e.ProgressPercent + "% (" + e.PagesComplete + "/" + e.TotalPages + ")"); var result = ocr.Read(new IronOcr.OcrInput().LoadPdf("file.pdf")); 部署到您的生產環境進行測試 今天就在您的專案中開始使用免費試用IronOCR Free 30 Day Trial 最簡工作流程(5個步驟) 下載一個用於追蹤閱讀進度的 C# 庫 訂閱**`OcrProgress`**活動 利用事件傳遞的實例來檢索進度訊息 以百分比和總時長取得進度。 取得開始時間和結束時間,以及總頁數 如何在我的OCR應用程式中實現進度追蹤? 使用 OCR 處理大型文件或批次文件時,進度追蹤至關重要。 訂閱 OcrProgress 事件,即可接收有關閱讀過程的進度更新。 這對於PDF OCR 操作和處理多頁 TIFF 檔案尤其有用。 此事件會傳遞一個實例,其中包含有關 OCR 作業進度的信息,例如開始時間、總頁數、進度百分比、持續時間和結束時間。此功能可與非同步操作無縫協作,並可與 多執行緒結合使用以提升效能。 The following example uses this document as a sample: "Experiences in Biodiversity Research: A Field Course" by Thea B. 蓋斯勒,愛荷華州立大學。 :path=/static-assets/ocr/content-code-examples/how-to/progress-tracking-progress-tracking.cs using IronOcr; using System; var ocrTesseract = new IronTesseract(); // Subscribe to OcrProgress event ocrTesseract.OcrProgress += (_, ocrProgressEventsArgs) => { Console.WriteLine("Start time: " + ocrProgressEventsArgs.StartTimeUTC.ToString()); Console.WriteLine("Total pages number: " + ocrProgressEventsArgs.TotalPages); Console.WriteLine("Progress(%) | Duration"); Console.WriteLine(" " + ocrProgressEventsArgs.ProgressPercent + "% | " + ocrProgressEventsArgs.Duration.TotalSeconds + "s"); Console.WriteLine("End time: " + ocrProgressEventsArgs.EndTimeUTC.ToString()); Console.WriteLine("----------------------------------------------"); }; using var input = new OcrInput(); input.LoadPdf("Experiences-in-Biodiversity-Research-A-Field-Course.pdf"); // Progress events will fire during the read operation var result = ocrTesseract.Read(input); $vbLabelText $csharpLabel 我可以從活動中獲得哪些進度資訊? OcrProgress 事件提供全面的進度數據,有助於監控和優化OCR 效能。 每個屬性在追蹤營運過程中都發揮著特定作用: ProgressPercent: OCR 作業的進度,以已完成頁面的百分比表示,範圍從 0 到 100。可用於更新 GUI 應用程式中的進度條。 TotalPages: OCR引擎正在處理的頁面總數。對計算預計完成時間至關重要。 PagesComplete: OCR 讀取已完全完成的頁數。 隨著頁面處理,該計數會逐漸增加。 Duration: OCR 作業的總持續時間,表示完成整個過程所花費的時間。 以 TimeSpan 格式測量,並在每次事件觸發時更新。 StartTimeUTC: OCR 作業開始的日期和時間,以協調世界時 (UTC) 格式表示。 EndTimeUTC: OCR 作業 100% 完成的日期和時間(UTC 格式)。 OCR 進行中時,此屬性為空;OCR 完成後,此屬性將會被填入。 高階進度追蹤實施 對於生產應用,應實現更複雜的進度追蹤。 此範例包含錯誤處理和詳細日誌記錄: using IronOcr; using System; using System.Diagnostics; public class OcrProgressTracker { private readonly IronTesseract _tesseract; private Stopwatch _stopwatch; private int _lastReportedPercent = 0; public OcrProgressTracker() { _tesseract = new IronTesseract(); // Configure for optimal performance _tesseract.Language = OcrLanguage.EnglishBest; _tesseract.Configuration.ReadBarCodes = false; // Subscribe to progress event _tesseract.OcrProgress += OnOcrProgress; } private void OnOcrProgress(object sender, OcrProgressEventsArgs e) { // Only report significant progress changes (every 10%) if (e.ProgressPercent - _lastReportedPercent >= 10 || e.ProgressPercent == 100) { _lastReportedPercent = e.ProgressPercent; Console.WriteLine($"Progress: {e.ProgressPercent}%"); Console.WriteLine($"Pages: {e.PagesComplete}/{e.TotalPages}"); Console.WriteLine($"Elapsed: {e.Duration.TotalSeconds:F1}s"); // Estimate remaining time if (e.ProgressPercent > 0 && e.ProgressPercent < 100) { var estimatedTotal = e.Duration.TotalSeconds / (e.ProgressPercent / 100.0); var remaining = estimatedTotal - e.Duration.TotalSeconds; Console.WriteLine($"Estimated remaining: {remaining:F1}s"); } Console.WriteLine("---"); } } public OcrResult ProcessDocument(string filePath) { _stopwatch = Stopwatch.StartNew(); using var input = new OcrInput(); input.LoadPdf(filePath); // Apply image filters for better accuracy input.Deskew(); input.DeNoise(); var result = _tesseract.Read(input); _stopwatch.Stop(); Console.WriteLine($"Total processing time: {_stopwatch.Elapsed.TotalSeconds:F1}s"); return result; } } using IronOcr; using System; using System.Diagnostics; public class OcrProgressTracker { private readonly IronTesseract _tesseract; private Stopwatch _stopwatch; private int _lastReportedPercent = 0; public OcrProgressTracker() { _tesseract = new IronTesseract(); // Configure for optimal performance _tesseract.Language = OcrLanguage.EnglishBest; _tesseract.Configuration.ReadBarCodes = false; // Subscribe to progress event _tesseract.OcrProgress += OnOcrProgress; } private void OnOcrProgress(object sender, OcrProgressEventsArgs e) { // Only report significant progress changes (every 10%) if (e.ProgressPercent - _lastReportedPercent >= 10 || e.ProgressPercent == 100) { _lastReportedPercent = e.ProgressPercent; Console.WriteLine($"Progress: {e.ProgressPercent}%"); Console.WriteLine($"Pages: {e.PagesComplete}/{e.TotalPages}"); Console.WriteLine($"Elapsed: {e.Duration.TotalSeconds:F1}s"); // Estimate remaining time if (e.ProgressPercent > 0 && e.ProgressPercent < 100) { var estimatedTotal = e.Duration.TotalSeconds / (e.ProgressPercent / 100.0); var remaining = estimatedTotal - e.Duration.TotalSeconds; Console.WriteLine($"Estimated remaining: {remaining:F1}s"); } Console.WriteLine("---"); } } public OcrResult ProcessDocument(string filePath) { _stopwatch = Stopwatch.StartNew(); using var input = new OcrInput(); input.LoadPdf(filePath); // Apply image filters for better accuracy input.Deskew(); input.DeNoise(); var result = _tesseract.Read(input); _stopwatch.Stop(); Console.WriteLine($"Total processing time: {_stopwatch.Elapsed.TotalSeconds:F1}s"); return result; } } $vbLabelText $csharpLabel 將進度追蹤與用戶介面應用程式集成 在使用 Windows Forms 或 WPF 建立桌面應用程式時,進度追蹤對於使用者體驗至關重要。 進度事件可以安全地更新使用者介面元素: using System; using System.Windows.Forms; using IronOcr; public partial class OcrForm : Form { private IronTesseract _tesseract; private ProgressBar progressBar; private Label statusLabel; public OcrForm() { InitializeComponent(); _tesseract = new IronTesseract(); _tesseract.OcrProgress += UpdateProgress; } private void UpdateProgress(object sender, OcrProgressEventsArgs e) { // Ensure UI updates happen on the main thread if (InvokeRequired) { BeginInvoke(new Action(() => UpdateProgress(sender, e))); return; } progressBar.Value = e.ProgressPercent; statusLabel.Text = $"Processing page {e.PagesComplete} of {e.TotalPages}"; // Show completion message if (e.ProgressPercent == 100) { MessageBox.Show($"OCR completed in {e.Duration.TotalSeconds:F1} seconds"); } } } using System; using System.Windows.Forms; using IronOcr; public partial class OcrForm : Form { private IronTesseract _tesseract; private ProgressBar progressBar; private Label statusLabel; public OcrForm() { InitializeComponent(); _tesseract = new IronTesseract(); _tesseract.OcrProgress += UpdateProgress; } private void UpdateProgress(object sender, OcrProgressEventsArgs e) { // Ensure UI updates happen on the main thread if (InvokeRequired) { BeginInvoke(new Action(() => UpdateProgress(sender, e))); return; } progressBar.Value = e.ProgressPercent; statusLabel.Text = $"Processing page {e.PagesComplete} of {e.TotalPages}"; // Show completion message if (e.ProgressPercent == 100) { MessageBox.Show($"OCR completed in {e.Duration.TotalSeconds:F1} seconds"); } } } $vbLabelText $csharpLabel 處理大型文件和逾時 處理大量文件時,進度追蹤就顯得尤為重要。 結合逾時設定和中止令牌,可以更好地控制: using IronOcr; using System; using System.Threading; public async Task ProcessLargeDocumentWithTimeout() { var cts = new CancellationTokenSource(); var tesseract = new IronTesseract(); // Set a timeout of 5 minutes cts.CancelAfter(TimeSpan.FromMinutes(5)); tesseract.OcrProgress += (s, e) => { Console.WriteLine($"Progress: {e.ProgressPercent}% - Page {e.PagesComplete}/{e.TotalPages}"); // Check if we should cancel based on progress if (e.Duration.TotalMinutes > 4 && e.ProgressPercent < 50) { Console.WriteLine("Processing too slow, cancelling..."); cts.Cancel(); } }; try { using var input = new OcrInput(); input.LoadPdf("large-document.pdf"); var result = await Task.Run(() => tesseract.Read(input, cts.Token), cts.Token); Console.WriteLine("OCR completed successfully"); } catch (OperationCanceledException) { Console.WriteLine("OCR operation was cancelled"); } } using IronOcr; using System; using System.Threading; public async Task ProcessLargeDocumentWithTimeout() { var cts = new CancellationTokenSource(); var tesseract = new IronTesseract(); // Set a timeout of 5 minutes cts.CancelAfter(TimeSpan.FromMinutes(5)); tesseract.OcrProgress += (s, e) => { Console.WriteLine($"Progress: {e.ProgressPercent}% - Page {e.PagesComplete}/{e.TotalPages}"); // Check if we should cancel based on progress if (e.Duration.TotalMinutes > 4 && e.ProgressPercent < 50) { Console.WriteLine("Processing too slow, cancelling..."); cts.Cancel(); } }; try { using var input = new OcrInput(); input.LoadPdf("large-document.pdf"); var result = await Task.Run(() => tesseract.Read(input, cts.Token), cts.Token); Console.WriteLine("OCR completed successfully"); } catch (OperationCanceledException) { Console.WriteLine("OCR operation was cancelled"); } } $vbLabelText $csharpLabel 進度追蹤最佳實踐 1.更新頻率:在處理過程中,OcrProgress 事件頻繁觸發。 請考慮對更新進行篩選,以避免使用者介面或日誌過載。 2.效能影響:進度追蹤對效能的影響很小,但過多的日誌記錄或 UI 更新可能會減慢 OCR 流程。 3.記憶體管理:對於大型 TIFF 文件或 PDF 文件,請監控記憶體使用量以及處理進度,以確保最佳效能。 4.錯誤處理:始終在進度事件處理程序中包含錯誤處理,以防止異常中斷 OCR 過程。 5.執行緒安全性:從進度事件更新 UI 元素時,請使用 Invoke 或 BeginInvoke 方法確保正確的執行緒同步。 結論 IronOCR中的進度追蹤功能提供了對 OCR 操作的重要可見性,使開發人員能夠創建響應迅速的應用程序,讓用戶隨時了解處理狀態。 透過有效利用 OcrProgress 事件,您可以建立專業的應用程序,自信地處理從單頁文件到大型 PDF 文件的一切。 如需更進階的 OCR 技術,請探索我們關於影像濾鏡和結果物件的指南,以進一步增強您的 OCR 實作。 常見問題解答 如何即時追蹤 OCR 的進度? IronOCR 透過 OcrProgress 事件提供以事件為基礎的進度追蹤系統。只需在您的 IronTesseract 實例上訂閱這個事件,您就能在 OCR 作業期間收到即時更新,包括完成百分比、處理的頁面以及時間指標。 OcrProgress 活動提供哪些資訊? IronOCR 中的 OcrProgress 事件提供全面的資料,包括 ProgressPercent (0-100%)、TotalPages 計數、PagesComplete 計數、開始和結束時間,以及總持續時間。這些資訊對於更新 GUI 應用程式中的進度列以及監控 OCR 效能特別有用。 我可以在進行非同步 OCR 作業時使用進度追蹤嗎? 是的,IronOCR 的進度追蹤功能可與異步作業無縫配合。您可以將其與異步處理甚至多執行緒結合,以提升效能,同時仍可透過 OcrProgress 事件接收即時進度更新。 如何為 PDF OCR 實作一個簡單的進度追蹤器? 若要使用 IronOCR 實作基本的進度追蹤,請建立一個 IronTesseract 範例,使用 lambda 表達式或事件處理程式訂閱 OcrProgress 事件,然後以 PDF 來呼叫 Read 方法。該事件會定期啟動,提供完成百分比和已處理頁數的資訊。 進度追蹤對大型文件處理有用嗎? 在使用 IronOCR 處理大型文件或批次文件時,進度追蹤是必不可少的。它對 PDF OCR 作業和多頁 TIFF 檔案尤其重要,可讓您監控處理狀態、估計完成時間,並在冗長的作業過程中提供使用者回饋。 Curtis Chau 立即與工程團隊聊天 技術作家 Curtis Chau 擁有卡爾頓大學計算機科學學士學位,專注於前端開發,擅長於 Node.js、TypeScript、JavaScript 和 React。Curtis 熱衷於創建直觀且美觀的用戶界面,喜歡使用現代框架並打造結構良好、視覺吸引人的手冊。除了開發之外,Curtis 對物聯網 (IoT) 有著濃厚的興趣,探索將硬體和軟體結合的創新方式。在閒暇時間,他喜愛遊戲並構建 Discord 機器人,結合科技與創意的樂趣。 準備好開始了嗎? Nuget 下載 5,556,263 | 版本: 2026.3 剛剛發布 開始免費試用 免費 NuGet 下載 總下載量:5,556,263 查看許可證 還在捲動嗎? 想要快速證明? PM > Install-Package IronOcr 執行範例 觀看您的圖片變成可搜尋的文字。 免費 NuGet 下載 總下載量:5,556,263 查看許可證