OCR Software Fortschritt überwachen – Texterkennung Echtzeit-Tracking in C
IronOCR bietet ein ereignisbasiertes Fortschrittsverfolgungssystem für OCR-Operationen, das Entwicklern ermöglicht, den Texterkennung Fortschritt über das Ereignis OcrProgress zu überwachen. Das System meldet den Fertigstellungsgrad, die verarbeiteten Seiten und Zeitmetriken in Echtzeit während der Bild zu Text Verarbeitung.
Schnellstart: Abonnieren Sie OcrProgress und lesen Sie das PDF
Dieses Beispiel zeigt, wie man den OCR-Fortschritt mit IronOCR überwacht: Abonnieren Sie das integrierte Ereignis OcrProgress und erhalten Sie sofortiges Feedback, einschließlich Prozentsatz, abgeschlossener Seiten und Gesamtseiten beim Lesen einer PDF-Datei. Für den Anfang werden nur ein paar Zeilen benötigt.
-
Installieren Sie IronOCR mit NuGet Package Manager
PM > Install-Package IronOcr -
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")); -
Bereitstellen zum Testen in Ihrer Live-Umgebung
Beginnen Sie noch heute, IronOCR in Ihrem Projekt zu verwenden, mit einer kostenlosen Testversion
Minimaler Arbeitsablauf (5 Schritte)
- Laden Sie eine C#-Bibliothek zum Verfolgen des Lesefortschritts herunter.
- Abonnieren Sie die **`OcrProgress`** Veranstaltung
- Verwenden Sie die vom Ereignis übergebene Instanz, um Fortschrittsinformationen abzurufen
- Erhalten Sie Fortschritte in Prozent und Gesamtdauer
- Start- und Endzeitpunkt sowie die Gesamtseitenzahl abrufen.
Wie implementiere ich Fortschrittsverfolgung in meiner OCR-Anwendung?
Die Fortschrittsverfolgung ist bei der Verarbeitung großer Dokumente oder Dateistapel mit OCR unerlässlich. Das Ereignis OcrProgress kann abonniert werden, um Fortschrittsaktualisierungen zum Leseprozess 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)
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:
ProgressPercent: Fortschritt des OCR-Auftrags als Prozentsatz der abgeschlossenen Seiten, von 0 bis 100. Nützlich zum Aktualisieren von Fortschrittsanzeigen in GUI-Anwendungen.TotalPages: Gesamtzahl der vom OCR-System verarbeiteten Seiten. Wichtig für die Berechnung der voraussichtlichen Bearbeitungszeiten.PagesComplete: Anzahl der Seiten, deren OCR-Lesung vollständig abgeschlossen wurde. Die Anzahl der zu übersetzenden Seiten wird schrittweise erhöht.Duration: Gesamtdauer des OCR-Auftrags, die die Zeit angibt, 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 des Starts des OCR-Auftrags, dargestellt im Format der koordinierten Weltzeit (UTC).EndTimeUTC: Datum und Uhrzeit, zu der der OCR-Auftrag zu 100 % abgeschlossen wurde (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;
}
}
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
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");
}
}
}
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
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");
}
}
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
Best Practices für die Fortschrittsverfolgung
-
Häufigkeit der Aktualisierungen : Das Ereignis
OcrProgresswird 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. -
Auswirkungen auf die Leistung: Die Fortschrittsverfolgung hat einen minimalen Leistungsaufwand, aber übermäßige Protokollierung oder UI-Aktualisierungen können den OCR-Prozess verlangsamen.
-
Speichermanagement: Überwachen Sie bei großen TIFF-Dateien oder PDFs die Speichernutzung parallel zum Fortschritt, um eine optimale Leistung zu gewährleisten.
-
Fehlerbehandlung: Nehmen Sie immer eine Fehlerbehandlung in Ihre Fortschrittsereignishandler auf, um zu verhindern, dass Ausnahmen den OCR-Prozess unterbrechen.
- Thread-Sicherheit : Stellen Sie beim Aktualisieren von UI-Elementen aus dem Fortschrittsereignis eine ordnungsgemäße Thread-Synchronisierung mithilfe der Methoden
InvokeoderBeginInvokesicher.
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 OcrProgress Ereignisses können Sie professionelle Anwendungen erstellen, die alles von einseitigen Dokumenten bis hin zu umfangreichen PDF-Dateien 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.

