Comment utiliser le suivi OcrProgress en C#

Comment utiliser le suivi de la progression en C# ; avec IronOCR

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

IronOcr fournit un système de suivi de la progression basé sur des événements pour les opérations d'OCR, permettant aux développeurs de surveiller la progression de la lecture grâce à l'événement OcrProgress qui rapporte le pourcentage d'achèvement, les pages traitées et les métriques de temps en temps réel.

<TODO : Ajouter une image ici -->

Démarrage rapide : abonnez-vous à OcrProgress et lisez le PDF

Cet exemple montre comment surveiller la progression de l'OCR avec IronOCR : abonnez-vous à son événement intégré OcrProgress et recevez un retour d'information instantané comprenant le pourcentage, les pages terminées et le nombre total de pages lors de la lecture d'un PDF. Quelques lignes suffisent pour commencer.

Nuget IconCommencez dès maintenant à créer des PDF avec NuGet :

  1. Installez IronOCR avec le gestionnaire de packages NuGet

    PM > Install-Package IronOcr

  2. Copiez et exécutez cet extrait de code.

    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. Déployez pour tester sur votre environnement de production.

    Commencez à utiliser IronOCR dans votre projet dès aujourd'hui grâce à un essai gratuit.
    arrow pointer


Comment mettre en œuvre le suivi des progrès dans mon application OCR?

<TODO : Ajouter une image ici -->

Le suivi de la progression est essentiel lors du traitement de documents volumineux ou de lots de fichiers à l'aide de l'OCR. Il est possible de s'abonner à l'événement OcrProgress pour recevoir des mises à jour sur l'avancement du processus de lecture. Ces outils sont particulièrement utiles pour les opérations de reconnaissance optique de caractères (OCR) des fichiers PDF et pour travailler avec des fichiers TIFF multipages.

L'événement transmet une instance contenant des informations sur la progression du travail d'OCR, telles que l'heure de début, le nombre total de pages, la progression en pourcentage, la durée et l'heure de fin. Cette fonctionnalité fonctionne de manière transparente avec les opérations async et peut être combinée avec multithreading pour améliorer les performances.

The following example uses this document as a sample: "Experiences in Biodiversity Research: A Field Course" by Thea B. Gessler, Université d'État de l'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
Sortie de la console montrant le suivi de la progression de 95 % à 100 % avec des horodatages et des données sur la durée

Quelles sont les informations sur le progrès auxquelles je peux accéder à partir de l'événement?

L'événement OcrProgress fournit des données complètes sur l'état d'avancement qui permettent de surveiller et d'optimiser les performances de l'OCR. Chaque propriété a une fonction spécifique dans le suivi de l'opération :

  • ProgressPercent : Progression du travail d'OCR en pourcentage de pages terminées, allant de 0 à 100. Utile pour mettre à jour les barres de progression dans les applications GUI.
  • TotalPages : nombre total de pages traitées par le moteur OCR. Indispensable pour calculer les temps de réalisation estimés.
  • PagesComplete : Nombre de pages pour lesquelles la lecture OCR a été entièrement achevée. Ce nombre augmente progressivement au fur et à mesure que les pages sont traitées.
  • Durée : Durée totale du travail d'OCR, indiquant le temps nécessaire à la réalisation de l'ensemble du processus. Mesuré au format TimeSpan et mis à jour à chaque fois que l'événement se déclenche.
  • StartTimeUTC : Date et heure de début du travail d'OCR, représentées au format UTC (Coordinated Universal Time).
  • EndTimeUTC : Date et heure auxquelles le travail d'OCR a été achevé à 100 % au format UTC. Cette propriété est nulle lorsque l'OCR est en cours et se remplit une fois le processus terminé.

Mise en œuvre d'un suivi avancé de la progression

Pour les applications de production, mettez en place un suivi de la progression plus sophistiqué. Cet exemple inclut la gestion des erreurs et la journalisation détaillée :

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

Intégrer le suivi de la progression dans les applications d'interface utilisateur

Lors de la création d'applications de bureau avec Windows Forms ou WPF, le suivi de la progression devient crucial pour l'expérience de l'utilisateur. L'événement de progression peut mettre à jour les éléments de l'interface utilisateur en toute sécurité :

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

Travailler avec des documents volumineux et des délais d'attente

Lors du traitement de documents volumineux, le suivi de la progression devient encore plus précieux. Combinez-la avec les paramètres de temporisation et les jetons d'abandon pour un meilleur contrôle :

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

Bonnes pratiques pour le suivi des progrès

  1. Fréquence des mises à jour : L'événement OcrProgress se déclenche fréquemment au cours du traitement. Envisagez de filtrer les mises à jour pour éviter de submerger votre interface utilisateur ou vos journaux.

  2. <Impact sur les performances : Le suivi de la progression a un impact minimal sur les performances, mais une journalisation excessive ou des mises à jour de l'interface utilisateur peuvent ralentir le processus d'OCR.

  3. Gestion de la mémoire : Pour les grands fichiers TIFF ou PDF, surveillez l'utilisation de la mémoire parallèlement à la progression pour garantir des performances optimales.

  4. Gestion des erreurs : Incluez toujours une gestion des erreurs dans vos gestionnaires d'événements de progression afin d'éviter que des exceptions ne viennent perturber le processus d'OCR.

  5. Sécurité des threads : Lors de la mise à jour des éléments de l'interface utilisateur à partir de l'événement de progression, assurez une synchronisation correcte des threads à l'aide des méthodes Invoke ou BeginInvoke.

Conclusion

Le suivi de la progression dans IronOcr offre une visibilité essentielle sur les opérations d'OCR, permettant aux développeurs de créer des applications réactives qui tiennent les utilisateurs informés de l'état d'avancement du traitement. En exploitant efficacement l'événement OcrProgress, vous pouvez créer des applications professionnelles qui traitent tout, des documents d'une seule page aux fichiers PDF volumineux, en toute confiance.

Pour des techniques d'OCR plus avancées, consultez nos guides sur les filtres d'images et les objets de résultat afin d'améliorer encore vos implémentations d'OCR.

Questions Fréquemment Posées

Comment puis-je suivre la progression de l'OCR en temps réel ?

IronOCR fournit un système de suivi des progrès basé sur des événements grâce à l'événement OcrProgress. Il suffit de s'abonner à cet événement sur votre instance IronTesseract, et vous recevrez des mises à jour en temps réel, y compris le pourcentage d'achèvement, les pages traitées et les mesures de temps pendant les opérations d'OCR.

Quelles sont les informations fournies par l'événement OcrProgress ?

L'événement OcrProgress dans IronOcr fournit des données complètes, notamment ProgressPercent (0-100 %), TotalPages count, PagesComplete count, les heures de début et de fin, et la durée totale. Ces informations sont particulièrement utiles pour mettre à jour les barres de progression dans les applications GUI et contrôler les performances de l'OCR.

Puis-je utiliser le suivi de la progression avec des opérations d'OCR asynchrones ?

Oui, la fonctionnalité de suivi de la progression d'IronOCR fonctionne de manière transparente avec les opérations asynchrones. Vous pouvez la combiner avec le traitement asynchrone et même le multithreading pour améliorer les performances tout en continuant à recevoir des mises à jour de la progression en temps réel par le biais de l'événement OcrProgress.

Comment mettre en place un outil simple de suivi de la progression de l'OCR PDF ?

Pour mettre en œuvre un suivi de base de la progression avec IronOCR, créez une instance IronTesseract, abonnez-vous à l'événement OcrProgress avec une expression lambda ou un gestionnaire d'événement, puis appelez la méthode Read avec votre PDF. L'événement sera déclenché périodiquement et fournira des informations sur le pourcentage d'achèvement et les pages traitées.

Le suivi de la progression est-il utile pour le traitement de documents volumineux ?

Le suivi de la progression est essentiel lors du traitement de documents volumineux ou de lots de fichiers avec IronOCR. Il est particulièrement utile pour les opérations d'OCR de PDF et les fichiers TIFF multipages, vous permettant de surveiller l'état du traitement, d'estimer les temps d'achèvement et de fournir un retour d'information à l'utilisateur pendant les opérations de longue durée.

Curtis Chau
Rédacteur technique

Curtis Chau détient un baccalauréat en informatique (Université de Carleton) et se spécialise dans le développement front-end avec expertise en Node.js, TypeScript, JavaScript et React. Passionné par la création d'interfaces utilisateur intuitives et esthétiquement plaisantes, Curtis aime travailler avec des frameworks modernes ...

Lire la suite
Prêt à commencer?
Nuget Téléchargements 5,299,091 | Version : 2025.12 vient de sortir