Como usar o rastreamento de progresso em C# com o IronOCR
O IronOCR fornece um sistema de rastreamento de progresso baseado em eventos para operações de OCR, permitindo que os desenvolvedores monitorem o progresso da leitura por meio do evento OcrProgress, que relata a porcentagem de conclusão, as páginas processadas e as métricas de tempo em tempo real.
Início Rápido: Assine o OcrProgress e Leia o PDF
Este exemplo mostra como monitorar o progresso do OCR com o IronOCR: inscreva-se no evento integrado OcrProgress e receba feedback instantâneo, incluindo porcentagem, páginas concluídas e total de páginas durante a leitura de um PDF. Bastam algumas linhas para começar.
-
Instale IronOCR com o Gerenciador de Pacotes NuGet
PM > Install-Package IronOcr -
Copie e execute este trecho de código.
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")); -
Implante para testar em seu ambiente de produção.
Comece a usar IronOCR em seu projeto hoje com uma avaliação gratuita
Fluxo de trabalho mínimo (5 etapas)
- Baixe uma biblioteca C# para acompanhar o progresso da leitura.
- Subscreva o evento OcrProgress
- Utilize a instância passada pelo evento para recuperar informações de progresso.
- Obtenha o progresso em porcentagem e duração total.
- Recupere os horários de início e término, bem como o número total de páginas.
Como implementar o acompanhamento do progresso no meu aplicativo de OCR?
O acompanhamento do progresso é essencial ao processar documentos grandes ou lotes de arquivos com OCR. É possível se inscrever no evento OcrProgress para receber atualizações sobre o andamento do processo de leitura. Isso é particularmente útil para operações de OCR em PDF e ao trabalhar com arquivos TIFF de várias páginas .
O evento passa uma instância contendo informações sobre o progresso da tarefa de OCR, como a hora de início, o número total de páginas, o progresso em porcentagem, a duração e a hora de término. Essa funcionalidade opera perfeitamente com operações assíncronas e pode ser combinada com multithreading para um desempenho aprimorado.
The following example uses this document as a sample: "Experiences in Biodiversity Research: A Field Course" by Thea B. Gessler, Universidade Estadual de Iowa.
: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);
Imports IronOcr
Imports System
Private ocrTesseract = New IronTesseract()
' Subscribe to OcrProgress event
Private ocrTesseract.OcrProgress += Sub(underscore, 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("----------------------------------------------")
End Sub
Private input = New OcrInput()
input.LoadPdf("Experiences-in-Biodiversity-Research-A-Field-Course.pdf")
' Progress events will fire during the read operation
Dim result = ocrTesseract.Read(input)
Que informações sobre o progresso posso acessar a partir do evento?
O evento OcrProgress fornece dados de progresso abrangentes que ajudam a monitorar e otimizar o desempenho do OCR . Cada propriedade serve a um propósito específico no acompanhamento da operação:
ProgressPercent: Progresso do trabalho de OCR em porcentagem de páginas concluídas, variando de 0 a 100. Útil para atualizar barras de progresso em aplicativos com interface gráfica.TotalPages: Número total de páginas sendo processadas pelo mecanismo de OCR. Essencial para calcular os tempos estimados de conclusão.PagesComplete: Número de páginas onde a leitura OCR foi totalmente concluída. Essa contagem aumenta gradualmente à medida que as páginas são processadas.Duration: Duração total da tarefa de OCR, indicando o tempo necessário para a conclusão de todo o processo. Medido no formatoTimeSpane atualizado sempre que o evento é acionado.StartTimeUTC: Data e hora em que o trabalho de OCR foi iniciado, representadas no formato de Tempo Universal Coordenado (UTC).EndTimeUTC: Data e hora em que o trabalho de OCR foi 100% concluído, no formato UTC. Essa propriedade fica nula enquanto o OCR está em andamento e é preenchida assim que o processo termina.
Implementação avançada de acompanhamento do progresso
Para aplicações de produção, implemente um sistema de rastreamento de progresso mais sofisticado. Este exemplo inclui tratamento de erros e registro detalhado:
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;
}
}
Imports IronOcr
Imports System
Imports System.Diagnostics
Public Class OcrProgressTracker
Private ReadOnly _tesseract As IronTesseract
Private _stopwatch As Stopwatch
Private _lastReportedPercent As Integer = 0
Public Sub New()
_tesseract = New IronTesseract()
' Configure for optimal performance
_tesseract.Language = OcrLanguage.EnglishBest
_tesseract.Configuration.ReadBarCodes = False
' Subscribe to progress event
AddHandler _tesseract.OcrProgress, AddressOf OnOcrProgress
End Sub
Private Sub OnOcrProgress(sender As Object, e As OcrProgressEventsArgs)
' Only report significant progress changes (every 10%)
If e.ProgressPercent - _lastReportedPercent >= 10 OrElse e.ProgressPercent = 100 Then
_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 AndAlso e.ProgressPercent < 100 Then
Dim estimatedTotal = e.Duration.TotalSeconds / (e.ProgressPercent / 100.0)
Dim remaining = estimatedTotal - e.Duration.TotalSeconds
Console.WriteLine($"Estimated remaining: {remaining:F1}s")
End If
Console.WriteLine("---")
End If
End Sub
Public Function ProcessDocument(filePath As String) As OcrResult
_stopwatch = Stopwatch.StartNew()
Using input As New OcrInput()
input.LoadPdf(filePath)
' Apply image filters for better accuracy
input.Deskew()
input.DeNoise()
Dim result = _tesseract.Read(input)
_stopwatch.Stop()
Console.WriteLine($"Total processing time: {_stopwatch.Elapsed.TotalSeconds:F1}s")
Return result
End Using
End Function
End Class
Integração do acompanhamento do progresso com aplicativos de interface do usuário
Ao desenvolver aplicações desktop com Windows Forms ou WPF, o acompanhamento do progresso torna-se crucial para a experiência do usuário. O evento de progresso pode atualizar elementos da interface do usuário com segurança:
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");
}
}
}
Imports System
Imports System.Windows.Forms
Imports IronOcr
Public Partial Class OcrForm
Inherits Form
Private _tesseract As IronTesseract
Private progressBar As ProgressBar
Private statusLabel As Label
Public Sub New()
InitializeComponent()
_tesseract = New IronTesseract()
AddHandler _tesseract.OcrProgress, AddressOf UpdateProgress
End Sub
Private Sub UpdateProgress(sender As Object, e As OcrProgressEventsArgs)
' Ensure UI updates happen on the main thread
If InvokeRequired Then
BeginInvoke(New Action(Sub() UpdateProgress(sender, e)))
Return
End If
progressBar.Value = e.ProgressPercent
statusLabel.Text = $"Processing page {e.PagesComplete} of {e.TotalPages}"
' Show completion message
If e.ProgressPercent = 100 Then
MessageBox.Show($"OCR completed in {e.Duration.TotalSeconds:F1} seconds")
End If
End Sub
End Class
Trabalhando com documentos grandes e tempos limite
Ao processar documentos extensos, o acompanhamento do progresso torna-se ainda mais valioso. Combine isso com configurações de tempo limite e tokens de aborto para um melhor controle:
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");
}
}
Imports IronOcr
Imports System
Imports System.Threading
Imports System.Threading.Tasks
Public Async Function ProcessLargeDocumentWithTimeout() As Task
Dim cts As New CancellationTokenSource()
Dim tesseract As New IronTesseract()
' Set a timeout of 5 minutes
cts.CancelAfter(TimeSpan.FromMinutes(5))
AddHandler tesseract.OcrProgress, Sub(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 AndAlso e.ProgressPercent < 50 Then
Console.WriteLine("Processing too slow, cancelling...")
cts.Cancel()
End If
End Sub
Try
Using input As New OcrInput()
input.LoadPdf("large-document.pdf")
Dim result = Await Task.Run(Function() tesseract.Read(input, cts.Token), cts.Token)
Console.WriteLine("OCR completed successfully")
End Using
Catch ex As OperationCanceledException
Console.WriteLine("OCR operation was cancelled")
End Try
End Function
Melhores práticas para acompanhamento do progresso
-
Frequência de atualizações : O evento
OcrProgressé acionado frequentemente durante o processamento. Considere filtrar as atualizações para evitar sobrecarregar sua interface de usuário ou seus registros. -
Impacto no desempenho : O acompanhamento do progresso tem uma sobrecarga mínima de desempenho, mas o registro excessivo de logs ou atualizações da interface do usuário podem tornar o processo de OCR mais lento.
-
Gerenciamento de memória : Para arquivos TIFF ou PDFs grandes , monitore o uso de memória em conjunto com o progresso para garantir o desempenho ideal.
-
Tratamento de erros : Inclua sempre o tratamento de erros nos seus manipuladores de eventos de progresso para evitar que exceções interrompam o processo de OCR.
- Segurança de Threads : Ao atualizar elementos da interface do usuário a partir do evento de progresso, assegure a sincronização adequada de threads usando os métodos
InvokeouBeginInvoke.
Conclusão
O acompanhamento do progresso no IronOCR oferece visibilidade essencial das operações de OCR, permitindo que os desenvolvedores criem aplicativos responsivos que mantêm os usuários informados sobre o status do processamento. Ao aproveitar o evento OcrProgress de forma eficaz, você pode criar aplicativos Professional que lidam com tudo, desde documentos de uma única página até arquivos PDF extensos, com confiança.
Para técnicas de OCR mais avançadas, explore nossos guias sobre filtros de imagem e objetos de resultado para aprimorar ainda mais suas implementações de OCR.
Perguntas frequentes
Como posso acompanhar o progresso do OCR em tempo real?
O IronOCR oferece um sistema de acompanhamento de progresso baseado em eventos por meio do evento OcrProgress. Basta se inscrever nesse evento em sua instância do IronTesseract e você receberá atualizações em tempo real, incluindo a porcentagem de conclusão, as páginas processadas e as métricas de tempo durante as operações de OCR.
Que informações o evento OcrProgress fornece?
O evento OcrProgress no IronOCR fornece dados abrangentes, incluindo ProgressPercent (0-100%), contagem de TotalPages, contagem de PagesComplete, horários de início e término e duração total. Essas informações são particularmente úteis para atualizar barras de progresso em aplicativos com interface gráfica e monitorar o desempenho do OCR.
Posso usar o rastreamento de progresso com operações OCR assíncronas?
Sim, a funcionalidade de rastreamento de progresso do IronOCR funciona perfeitamente com operações assíncronas. Você pode combiná-la com processamento assíncrono e até mesmo com multithreading para melhorar o desempenho, enquanto ainda recebe atualizações de progresso em tempo real por meio do evento OcrProgress.
Como posso implementar um rastreador de progresso simples para OCR de PDF?
Para implementar o rastreamento básico de progresso com o IronOCR, crie uma instância do IronTesseract, inscreva-se no evento OcrProgress com uma expressão lambda ou um manipulador de eventos e, em seguida, chame o método Read com seu PDF. O evento será disparado periodicamente, fornecendo informações sobre a porcentagem concluída e as páginas processadas.
O acompanhamento do progresso é útil para o processamento de grandes volumes de documentos?
O acompanhamento do progresso é essencial ao processar documentos grandes ou lotes de arquivos com o IronOCR. É particularmente útil para operações de OCR em PDF e arquivos TIFF com várias páginas, permitindo monitorar o status do processamento, estimar os tempos de conclusão e fornecer feedback ao usuário durante operações demoradas.
O IronOCR suporta vários idiomas?
O IronOCR suporta múltiplos idiomas, tornando-se uma ferramenta versátil para aplicações globais que requerem reconhecimento de texto em diferentes idiomas.
O IronOCR pode ser integrado em aplicações existentes?
O IronOCR é projetado para ser facilmente integrado em aplicações existentes usando C#, permitindo que os desenvolvedores adicionem funcionalidades de OCR ao seu software com esforço mínimo.
Quais são os benefícios de usar o IronOCR para gestão de documentos?
Usar o IronOCR para gestão de documentos simplifica o fluxo de trabalho convertendo documentos escaneados em texto pesquisável e editável, reduzindo a necessidade de inserção manual de dados e melhorando a acessibilidade dos documentos.
Como o IronOCR pode melhorar a precisão dos dados?
O IronOCR melhora a precisão dos dados através de seus algoritmos avançados de reconhecimento e recursos de correção de imagem, assegurando que o processo de extração de texto seja tanto confiável quanto preciso.
Há uma avaliação gratuita disponível para o IronOCR?
Sim, o Iron Software oferece uma avaliação gratuita do IronOCR, permitindo que os usuários testem seus recursos e capacidades antes de tomar uma decisão de compra.

