Wie man OcrProgress Tracking in C# verwendet

Fortschrittsverfolgung in C#35; mit IronOCR

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

IronOCR bietet ein ereignisbasiertes Fortschrittsverfolgungssystem für OCR-Vorgänge, das es Entwicklern ermöglicht, den Lesefortschritt über das OcrProgress-Ereignis zu überwachen, das den Fertigstellungsgrad, die verarbeiteten Seiten und die Zeitmetriken in Echtzeit meldet.

Schnellstart: OcrProgress abonnieren und PDF lesen

Dieses Beispiel zeigt, wie der OCR-Fortschritt mit IronOCR überwacht werden kann: Abonnieren Sie das eingebaute OcrProgress-Ereignis und erhalten Sie beim Lesen einer PDF-Datei sofortige Rückmeldung über den Prozentsatz, die abgeschlossenen Seiten und die Gesamtseiten. Für den Anfang werden nur ein paar Zeilen benötigt.

Nuget IconLegen Sie jetzt mit NuGet los, um PDFs zu erstellen:

  1. Installieren Sie IronOCR mit dem NuGet-Paketmanager.

    PM > Install-Package IronOcr

  2. Kopieren Sie diesen Codeausschnitt und führen Sie ihn aus.

    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. Bereitstellen zum Testen in Ihrer Live-Umgebung

    Beginnen Sie noch heute mit der Nutzung von IronOCR in Ihrem Projekt – mit einer kostenlosen Testversion.
    arrow pointer


Wie implementiere ich Fortschrittsverfolgung in meiner OCR-Anwendung?

Die Fortschrittsverfolgung ist bei der Verarbeitung großer Dokumente oder Dateistapel mit OCR unerlässlich. Das OcrProgress-Ereignis kann abonniert werden, um Fortschrittsupdates zum Lesevorgang zu erhalten. Dies ist besonders nützlich für PDF OCR-Operationen und bei der Arbeit mit Multipage TIFF-Dateien.

Das Ereignis übergibt eine Instanz, die Informationen über den Fortschritt des OCR-Auftrags enthält, z. B. die Startzeit, die Gesamtzahl der Seiten, den Fortschritt in Prozent, die Dauer und die Endzeit. Diese Funktionalität arbeitet nahtlos mit asynchronen Operationen zusammen und kann zur Leistungssteigerung mit Multithreading kombiniert werden.

The following example uses this document as a sample: "Experiences in Biodiversity Research: A Field Course" by Thea B. Gessler, Iowa State University.

: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
Konsolenausgabe mit Fortschrittsverfolgung von 95 % bis 100 % Fertigstellung mit Zeitstempeln und Dauer

Welche Fortschrittsinformationen kann ich über die Veranstaltung abrufen?

Das Ereignis OcrProgress liefert umfassende Fortschrittsdaten, die zur Überwachung und Optimierung der OCR-Leistung beitragen. Jede Eigenschaft dient einem bestimmten Zweck bei der Nachverfolgung des Vorgangs:

  • FortschrittProzent: Fortschritt des OCR-Auftrags als Prozentsatz der fertiggestellten Seiten im Bereich von 0 bis 100. Nützlich für die Aktualisierung von Fortschrittsbalken in GUI-Anwendungen.
  • TotalPages: Gesamtzahl der Seiten, die von der OCR-Engine verarbeitet werden. Wichtig für die Berechnung der geschätzten Fertigstellungszeit.
  • PagesComplete: Anzahl der Seiten, auf denen die OCR-Lesung vollständig abgeschlossen wurde. Die Anzahl der zu übersetzenden Seiten wird schrittweise erhöht.
  • Dauer: Gesamtdauer des OCR-Auftrags mit Angabe der Zeit, die für den gesamten Prozess benötigt wird. Gemessen im TimeSpan-Format und jedes Mal aktualisiert, wenn das Ereignis ausgelöst wird.
  • StartTimeUTC: Datum und Uhrzeit, zu der der OCR-Auftrag gestartet wurde, dargestellt im Format Coordinated Universal Time (UTC).
  • EndTimeUTC: Datum und Uhrzeit, zu der der OCR-Auftrag zu 100 % abgeschlossen wurde, im UTC-Format. Diese Eigenschaft ist während der OCR ungültig und wird nach Beendigung des Prozesses ausgefüllt.

Erweiterte Implementierung der Fortschrittsverfolgung

Für Produktionsanwendungen sollten Sie eine ausgefeiltere Fortschrittskontrolle implementieren. Dieses Beispiel beinhaltet Fehlerbehandlung und detaillierte Protokollierung:

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

Integration der Fortschrittsverfolgung in UI-Anwendungen

Bei der Entwicklung von Desktop-Anwendungen mit Windows Forms oder WPF ist die Fortschrittsverfolgung für die Benutzererfahrung von entscheidender Bedeutung. Das Fortschrittsereignis kann UI-Elemente sicher aktualisieren:

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

Arbeiten mit großen Dokumenten und Zeitüberschreitungen

Bei der Bearbeitung umfangreicher Dokumente wird die Fortschrittskontrolle noch wertvoller. Kombinieren Sie sie mit Timeout-Einstellungen und Abbruch-Tokens für eine bessere Kontrolle:

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

Best Practices für die Fortschrittsverfolgung

  1. Häufigkeit der Aktualisierungen: Das Ereignis OcrProgress wird während der Verarbeitung häufig ausgelöst. Ziehen Sie in Erwägung, Aktualisierungen zu filtern, um Ihre Benutzeroberfläche oder Protokolle nicht zu überfrachten.

  2. Auswirkungen auf die Leistung: Die Fortschrittsverfolgung hat einen minimalen Leistungsaufwand, aber übermäßige Protokollierung oder UI-Aktualisierungen können den OCR-Prozess verlangsamen.

  3. Speichermanagement: Überwachen Sie bei großen TIFF-Dateien oder PDFs die Speichernutzung parallel zum Fortschritt, um eine optimale Leistung zu gewährleisten.

  4. Fehlerbehandlung: Nehmen Sie immer eine Fehlerbehandlung in Ihre Fortschrittsereignishandler auf, um zu verhindern, dass Ausnahmen den OCR-Prozess unterbrechen.

  5. Thread-Sicherheit: Wenn Sie UI-Elemente aus dem Fortschrittsereignis aktualisieren, stellen Sie die richtige Thread-Synchronisation mit den Methoden Invoke oder BeginInvoke sicher.

Abschluss

Die Fortschrittsverfolgung in IronOCR bietet einen wesentlichen Einblick in OCR-Vorgänge und ermöglicht es Entwicklern, reaktionsschnelle Anwendungen zu erstellen, die die Benutzer über den Verarbeitungsstatus informieren. Durch die effektive Nutzung des Ereignisses OcrProgress können Sie professionelle Anwendungen erstellen, die von einseitigen Dokumenten bis hin zu umfangreichen PDF-Dateien alles zuverlässig verarbeiten.

Weitere fortgeschrittene OCR-Techniken finden Sie in unseren Anleitungen zu Bildfiltern und Ergebnisobjekten, um Ihre OCR-Implementierungen weiter zu verbessern.

Häufig gestellte Fragen

Wie kann ich den OCR-Fortschritt in Echtzeit verfolgen?

IronOCR bietet mit dem Ereignis OcrProgress ein ereignisbasiertes System zur Fortschrittsverfolgung. Abonnieren Sie einfach dieses Ereignis auf Ihrer IronTesseract-Instanz, und Sie erhalten Echtzeit-Updates, einschließlich Fertigstellungsprozentsatz, verarbeitete Seiten und Zeitmetriken während der OCR-Vorgänge.

Welche Informationen bietet die Veranstaltung OcrProgress?

Das Ereignis OcrProgress in IronOCR liefert umfassende Daten, darunter ProgressPercent (0-100%), TotalPages count, PagesComplete count, Start- und Endzeiten sowie die Gesamtdauer. Diese Informationen sind besonders nützlich, um Fortschrittsbalken in GUI-Anwendungen zu aktualisieren und die OCR-Leistung zu überwachen.

Kann ich die Fortschrittsverfolgung mit asynchronen OCR-Vorgängen verwenden?

Ja, die Fortschrittsverfolgungsfunktion von IronOCR funktioniert nahtlos mit asynchronen Operationen. Sie können sie mit asynchroner Verarbeitung und sogar Multithreading kombinieren, um die Leistung zu verbessern, während Sie immer noch Fortschrittsaktualisierungen in Echtzeit über das Ereignis OcrProgress erhalten.

Wie implementiere ich einen einfachen Fortschrittsanzeiger für PDF OCR?

Um eine einfache Fortschrittsverfolgung mit IronOCR zu implementieren, erstellen Sie eine IronTesseract-Instanz, abonnieren Sie das OcrProgress-Ereignis mit einem Lambda-Ausdruck oder Event-Handler und rufen Sie dann die Read-Methode mit Ihrer PDF-Datei auf. Das Ereignis wird in regelmäßigen Abständen ausgelöst und liefert Informationen zur prozentualen Vollständigkeit und zu den verarbeiteten Seiten.

Ist die Fortschrittsverfolgung bei der Verarbeitung großer Dokumente sinnvoll?

Die Fortschrittsverfolgung ist bei der Verarbeitung großer Dokumente oder Dateistapel mit IronOCR unerlässlich. Sie ist besonders wertvoll für PDF-OCR-Vorgänge und mehrseitige TIFF-Dateien und ermöglicht es Ihnen, den Verarbeitungsstatus zu überwachen, Fertigstellungszeiten abzuschätzen und dem Benutzer während langwieriger Vorgänge Feedback zu geben.

Chaknith Bin
Software Ingenieur
Chaknith arbeitet an IronXL und IronBarcode. Er hat umfassende Expertise in C# und .NET und hilft, die Software zu verbessern und Kunden zu unterstützen. Seine Einblicke aus Benutzerinteraktionen tragen zu besseren Produkten, Dokumentationen und einem insgesamt besseren Erlebnis bei.
Bereit anzufangen?
Nuget Downloads 5,246,844 | Version: 2025.12 gerade veröffentlicht