Cómo usar seguimiento de OcrProgress en C#

Cómo utilizar el seguimiento del progreso en C# con IronOCR

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

IronOCR proporciona un sistema de seguimiento del progreso basado en eventos para las operaciones de OCR, lo que permite a los desarrolladores supervisar el progreso de la lectura a través del evento OcrProgress, que informa del porcentaje de finalización, las páginas procesadas y las métricas de tiempo en tiempo real.

<Descripción: Diagrama o captura de pantalla que ilustre el concepto de código -->

como-encabezado:2(Inicio rápido: Suscríbete a OcrProgress y lee PDF)

Este ejemplo muestra cómo supervisar el progreso del OCR con IronOCR: suscríbase a su evento OcrProgress incorporado y reciba información instantánea que incluye el porcentaje, las páginas completadas y el total de páginas mientras lee un PDF. Solo se necesitan unas pocas líneas para empezar.

Nuget IconEmpieza a crear PDF con NuGet ahora:

  1. Instalar IronOCR con el gestor de paquetes NuGet

    PM > Install-Package IronOcr

  2. Copie y ejecute este fragmento 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. Despliegue para probar en su entorno real

    Empieza a utilizar IronOCR en tu proyecto hoy mismo con una prueba gratuita
    arrow pointer


¿Cómo implemento el seguimiento del progreso en mi aplicación OCR?

<Descripción: Diagrama o captura de pantalla que ilustre el concepto de código -->

El seguimiento del progreso es esencial cuando se procesan grandes documentos o lotes de archivos con OCR. Al evento OcrProgress se puede suscribir para recibir actualizaciones de progreso sobre el proceso de lectura. Esto es especialmente útil para operaciones de OCR en PDF y cuando se trabaja con archivos TIFF multipágina.

El evento pasa una instancia que contiene información sobre el progreso del trabajo de OCR, como la hora de inicio, el total de páginas, el progreso como porcentaje, la duración y la hora de finalización. Esta funcionalidad funciona perfectamente con operaciones asíncronas y puede combinarse con multihilos para mejorar el rendimiento.

The following example uses this document as a sample: "Experiences in Biodiversity Research: A Field Course" by Thea B. Gessler, Universidad Estatal 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)
$vbLabelText   $csharpLabel
Salida de la consola que muestra el seguimiento del progreso del 95% al 100% de finalización con marcas de tiempo y datos de duración

¿A qué información de progreso puedo acceder desde el evento?

El evento OcrProgress proporciona datos de progreso completos que ayudan a supervisar y optimizar el rendimiento deOCR. Cada propiedad tiene un propósito específico en el seguimiento de la operación:

  • ProgressPercent: Progreso del trabajo de OCR como porcentaje de páginas completadas, que va de 0 a 100. Útil para actualizar barras de progreso en aplicaciones GUI.
  • TotalPages: Número total de páginas que está procesando el motor de OCR. Esencial para calcular los tiempos estimados de finalización.
  • PagesComplete: Número de páginas en las que se ha completado la lectura OCR. Este recuento aumenta gradualmente a medida que se procesan las páginas.
  • Duración: duración total del trabajo de OCR, que indica el tiempo necesario para completar todo el proceso. Medido en formato TimeSpan y actualizado cada vez que se dispara el evento.
  • StartTimeUTC: Fecha y hora de inicio del trabajo de OCR, representadas en formato de Tiempo Universal Coordinado (UTC).
  • EndTimeUTC: Fecha y hora en la que el trabajo de OCR se completó al 100% en formato UTC. Esta propiedad es nula mientras el OCR está en curso y se rellena una vez finalizado el proceso.

Implementación avanzada de seguimiento del progreso

Para las aplicaciones de producción, implemente un seguimiento del progreso más sofisticado. Este ejemplo incluye la gestión de errores y un registro detallado:

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;
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Integración del seguimiento del progreso con aplicaciones de interfaz de usuario

Cuando se crean aplicaciones de escritorio con Windows Forms o WPF, el seguimiento del progreso es crucial para la experiencia del usuario. El evento de progreso puede actualizar elementos de la interfaz de usuario de forma segura:

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");
        }
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Trabajar con documentos grandes y tiempos de espera

Al procesar documentos extensos, el seguimiento del progreso resulta aún más valioso. Combínalo con configuraciones de tiempo de espera y fichas de aborto para un mejor control:

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");
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Mejores prácticas para el seguimiento del progreso

  1. Frecuencia de las actualizaciones: El evento OcrProgress se dispara con frecuencia durante el procesamiento. Considere la posibilidad de filtrar las actualizaciones para evitar saturar la interfaz de usuario o los registros.

  2. Impacto en el rendimiento: El seguimiento del progreso tiene una sobrecarga de rendimiento mínima, pero el registro excesivo o las actualizaciones de la interfaz de usuario pueden ralentizar el proceso de OCR.

  3. Gestión de memoria: Para archivos TIFF o PDF de gran tamaño, supervisa el uso de memoria junto con el progreso para garantizar un rendimiento óptimo.

  4. Manejo de errores: Incluya siempre el manejo de errores en sus manejadores de eventos de progreso para evitar que las excepciones interrumpan el proceso de OCR.

  5. Thread Safety: Al actualizar los elementos de la interfaz de usuario desde el evento de progreso, asegúrese de que existe una sincronización de hilos adecuada mediante los métodos Invoke o BeginInvoke.

Conclusión

El seguimiento del progreso en IronOCR proporciona una visibilidad esencial de las operaciones de OCR, lo que permite a los desarrolladores crear aplicaciones con capacidad de respuesta que mantienen a los usuarios informados sobre el estado del procesamiento. Si aprovecha el evento OcrProgress de forma eficaz, podrá crear aplicaciones profesionales que gestionen con confianza desde documentos de una sola página hasta extensos archivos PDF.

Para técnicas de OCR más avanzadas, explore nuestras guías sobre filtros de imagen y objetos de resultado para mejorar aún más sus implementaciones de OCR.

Preguntas Frecuentes

¿Cómo puedo seguir el progreso del OCR en tiempo real?

IronOCR proporciona un sistema de seguimiento del progreso basado en eventos a través del evento OcrProgress. Simplemente suscríbase a este evento en su instancia de IronTesseract y recibirá actualizaciones en tiempo real que incluyen el porcentaje de finalización, las páginas procesadas y las métricas de tiempo durante las operaciones de OCR.

¿Qué información proporciona el evento OcrProgress?

El evento OcrProgress en IronOCR proporciona datos completos, incluyendo ProgressPercent (0-100%), TotalPages count, PagesComplete count, horas de inicio y fin, y la duración total. Esta información es especialmente útil para actualizar las barras de progreso en aplicaciones GUI y supervisar el rendimiento del OCR.

¿Puedo utilizar el seguimiento del progreso con operaciones de OCR asíncronas?

Sí, la funcionalidad de seguimiento del progreso de IronOCR funciona perfectamente con operaciones asíncronas. Puede combinarla con procesamiento asíncrono e incluso multihilo para mejorar el rendimiento sin dejar de recibir actualizaciones de progreso en tiempo real a través del evento OcrProgress.

¿Cómo implemento un sencillo rastreador de progreso para PDF OCR?

Para implementar un seguimiento básico del progreso con IronOCR, cree una instancia IronTesseract, suscríbase al evento OcrProgress con una expresión lambda o un controlador de eventos y, a continuación, llame al método Read con su PDF. El evento se activará periódicamente y proporcionará información sobre el porcentaje de páginas completadas y procesadas.

¿Es útil el seguimiento del progreso para el procesamiento de documentos de gran tamaño?

El seguimiento del progreso es esencial cuando se procesan grandes documentos o lotes de archivos con IronOCR. Es especialmente valioso para las operaciones de OCR de PDF y los archivos TIFF de varias páginas, ya que permite supervisar el estado del procesamiento, estimar los tiempos de finalización y proporcionar comentarios al usuario durante operaciones prolongadas.

Chaknith Bin
Ingeniero de Software
Chaknith trabaja en IronXL e IronBarcode. Tiene un profundo conocimiento en C# y .NET, ayudando a mejorar el software y apoyar a los clientes. Sus conocimientos derivados de las interacciones con los usuarios contribuyen a mejores productos, documentación y experiencia en general.
¿Listo para empezar?
Nuget Descargas 5,246,844 | Versión: 2025.12 recién lanzado