Como usar o rastreamento de progresso Ocr em C#

Como usar o rastreamento de progresso em C# com o IronOCR

This article was translated from English: Does it need improvement?
Translated
View the article in English

IronOCR oferece um sistema de acompanhamento de progresso baseado em eventos para operações de OCR, permitindo que os desenvolvedores monitorem o progresso da leitura através do evento OcrProgress, que reporta porcentagem de conclusão, páginas processadas e 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: assine seu evento embutido OcrProgress e receba feedback instantâneo, incluindo a porcentagem, páginas concluídas e total de páginas enquanto lê um PDF. Bastam algumas linhas para começar.

  1. Instale IronOCR com o Gerenciador de Pacotes NuGet

    PM > Install-Package IronOcr
  2. 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"));
  3. Implante para testar em seu ambiente de produção.

    Comece a usar IronOCR em seu projeto hoje com uma avaliação gratuita

    arrow pointer


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. O evento OcrProgress pode ser assinado para receber atualizações de progresso 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);
$vbLabelText   $csharpLabel
Saída do console mostrando o progresso de 95% a 100% de conclusão, com registros de data e hora e dados de duração.

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 da tarefa de OCR como uma porcentagem de páginas concluídas, variando de 0 a 100. Útil para atualizar barras de progresso em aplicativos de interface gráfica.
  • TotalPages: Número total de páginas sendo processadas pelo motor OCR. Essencial para calcular os tempos estimados de conclusão.
  • PagesComplete: Número de páginas onde a leitura de 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 concluir todo o processo. Medido no formato TimeSpan e atualizado sempre que o evento é acionado.
  • StartTimeUTC: Data e hora de início da tarefa de OCR, representadas no formato Horário Universal Coordenado (UTC).
  • EndTimeUTC: Data e hora em que a tarefa de OCR foi 100% concluída, 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;
    }
}
$vbLabelText   $csharpLabel

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");
        }
    }
}
$vbLabelText   $csharpLabel

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");
    }
}
$vbLabelText   $csharpLabel

Melhores práticas para acompanhamento do progresso

  1. Frequência das Atualizações: O evento OcrProgress dispara frequentemente durante o processamento. Considere filtrar as atualizações para evitar sobrecarregar sua interface de usuário ou seus registros.

  2. 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.

  3. 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.

  4. 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.

  5. Segurança de Thread: Ao atualizar elementos da interface do usuário a partir do evento de progresso, assegure a sincronização adequada dos threads usando os métodos Invoke ou BeginInvoke.

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 alavancar efetivamente o evento OcrProgress, você pode construir aplicativos profissionais que lidam com tudo, desde documentos de uma única página até extensos arquivos PDF 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.

Curtis Chau
Redator Técnico

Curtis Chau é bacharel em Ciência da Computação (Universidade Carleton) e se especializa em desenvolvimento front-end, com experiência em Node.js, TypeScript, JavaScript e React. Apaixonado por criar interfaces de usuário intuitivas e esteticamente agradáveis, Curtis gosta de trabalhar com frameworks modernos e criar manuais ...

Leia mais
Pronto para começar?
Nuget Downloads 5,525,971 | Versão: 2026.3 acaba de ser lançado
Still Scrolling Icon

Ainda está rolando a tela?

Quer provas rápidas? PM > Install-Package IronOcr
executar um exemplo Veja sua imagem se transformar em texto pesquisável.