Cómo rastrear el progreso al convertir imagen a texto en C# con IronOCR
IronOCR proporciona un sistema de seguimiento del progreso basado en eventos para operaciones de reconocimiento de texto, que permite a los desarrolladores monitorear el progreso al convertir imagen a texto a través del evento OcrProgress que informa el porcentaje de finalización, las páginas procesadas y las métricas de tiempo en tiempo real.
Inicio rápido: Suscríbase a OcrProgress y lea el PDF
Este ejemplo muestra cómo monitorear el progreso de OCR con IronOCR: suscríbase a su evento incorporado OcrProgress y reciba comentarios instantáneos que incluyen porcentaje, páginas completadas y total de páginas mientras lee un PDF. Solo se necesitan unas pocas líneas para empezar.
-
Instala IronOCR con el Administrador de Paquetes NuGet
PM > Install-Package IronOcr -
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")); -
Despliegue para probar en su entorno real
Comienza a usar IronOCR en tu proyecto hoy mismo con una prueba gratuita
Flujo de trabajo mínimo (5 pasos)
- Descargue una biblioteca de C# para realizar un seguimiento del progreso de lectura
- Suscríbase al evento **`OcrProgress`**
- Utiliza la instancia pasada por el evento para obtener información de progreso
- Obtén progreso en porcentaje y duración total
- Recuperar las horas de inicio y finalización, así como el número total de páginas
¿Cómo implemento el seguimiento del progreso en mi aplicación OCR?
El seguimiento del progreso es esencial cuando se procesan grandes documentos o lotes de archivos con OCR. Puedes suscribirte al evento OcrProgress para recibir actualizaciones sobre el progreso del 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)
¿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, de 0 a 100. Útil para actualizar barras de progreso en aplicaciones GUI.TotalPages: Número total de páginas procesadas por el motor de OCR. Imprescindible para calcular los tiempos de finalización estimados.PagesComplete: Número de páginas en las que se ha completado por completo la lectura de OCR. Este recuento aumenta gradualmente a medida que se procesan las páginas.Duration: Duración total del trabajo de OCR, indicando el tiempo que tarda todo el proceso en completarse. Medido en formato TimeSpan y actualizado cada vez que se dispara el evento.StartTimeUTC: Fecha y hora en que se inició el trabajo de OCR, representada en formato de Tiempo Universal Coordinado (UTC).EndTimeUTC: Fecha y hora en 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;
}
}
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
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");
}
}
}
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
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");
}
}
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
Mejores prácticas para el seguimiento del progreso
-
Frecuencia de actualizaciones : el evento
OcrProgressse activa con frecuencia durante el procesamiento. Considere la posibilidad de filtrar las actualizaciones para evitar saturar la interfaz de usuario o los registros. -
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.
-
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.
-
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.
- Seguridad de subprocesos : al actualizar elementos de la interfaz de usuario desde el evento de progreso, asegúrese de que haya una sincronización de subprocesos adecuada utilizando los métodos
InvokeoBeginInvoke.
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. Al aprovechar el evento OcrProgress de manera eficaz, puede crear aplicaciones profesionales que gestionen todo, desde documentos de una sola página hasta archivos PDF extensos, con confianza.
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.

