Ileri Izleme Kullanımı IronOCR ile C#'ta İlerle Kolayın
IronOCR, geliştiricilerin okuma ilerlemesini takip etmelerini saglayan olay tabanli bir ilerleme izleme sistemi saglar. Bu, tamamlanma yuzdesi, islenen sayfalar ve zaman metriklerini gerçek zamanli raporlayan OcrProgress olayi vasitasiyla olur.
Hizli Begin: OcrProgress'u Abone Olun ve PDF Okuma
Bu örnek, IronOCR ile OCR ilerlemesini nasıl izleyeceginizi göstermektedir: yerlesik OcrProgress olayina kaydolun ve bir PDF okurken yuzde, tamamlanan sayfalar ve toplam sayfalar dahil olmak üzere aninda geri bildirim alin. Başlamak icin sadece birkaç satir gerek.
-
NuGet Paket Yöneticisi ile https://www.nuget.org/packages/IronOcr yükleyin
PM > Install-Package IronOcr -
Bu kod parçasını kopyalayıp çalıştırın.
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")); -
Canlı ortamınızda test etmek için dağıtın
Bugün projenizde IronOCR kullanmaya başlayın ücretsiz deneme ile
Minimal Is Akisi (5 adimda)
- Okuma süreçlerini izlemek icin C# kutuphanesini indirin
OcrProgressolayına abone olun- Etkinlik tarafından gecilen nesneyi kullanarak ilerleme bilgilerini alın
- Yuzde ve toplam sure açısından ilerleme elde edin
- Başlangic ve bitis zamanlarının yanisira toplam sayfa sayısını alın
OCR Uygulamanızda İlerleme Izleme Uygulaması Nasi?
Buyuk belgeler veya dosya derlemeleri OCR ile işlerken ilerliş takibi çok onemlidir. OcrProgress olayi, okuma surecinde ilerleme güncellemeleri almak icin abone olunabilir. PDF OCR işlemleri ve çok sayfalı TIFF dosyaları ile calisirken bu özellik oldukca kullanislidir.
Olay, OCR is hala etmek hakkında başlangic zamani, toplam sayfa sayisi, yuzde olarak ilerleme, sure ve bitis zamani gibi bilgiler iceren bir nesne gecirir. Bu fonksiyonellik, asenkron işlemlerle sorunsuz bir sekilde calisir ve çok işleme hızı icin birleştirilebilir.
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)
Olaydan Hangi Ilerleme Bilgilerine Erişebilirim?
OcrProgress olayı, OCR performansını izlemeye ve optimize etmeye yardimci olan kapsamli ilerleme verileri sunar. Her özellik, işlemleri izleme konusunda belirli bir amaca hizmet eder:
ProgressPercent: Sayfalarin tamamlanma yuzdesi olarak OCR iscinin ilerlemesi, 0 ile 100 arasinda degisir. GUI uygulamalarindaki ilerleme cubuklarini güncellemek icin kullanisli.TotalPages: OCR motoru tarafindan islenen toplam sayfa sayisi. Tahmini tamamlanma surelerini hesaplamak icin temel.PagesComplete: OCR okumasinin tamamen tamamlandigi sayfa sayisi. Bu sayı, sayfalar işlendiğinde yavaşır artar.Duration: OCR isinin toplam surusu, tüm işlemin tamamlanmasi icin gereken sureyi gösterir. TimeSpan formatında ölçülmüş ve her seferinde olay tetiklendiğinde güncellenir.StartTimeUTC: OCR isinin başladigi tarih ve saat, Koordinatli Evrensel Zaman (UTC) formatinda temsil edilir.EndTimeUTC: OCR isinin UTC formatinda %100 tamamlandigi tarih ve saat. İşlem devam ederken bu özellik bos kalır ve işlem tamamlanır tamamlanmaz dolar.
Gelişmiş Ilerleme İzleme Yonetimi
Uretim uygulamaları icin, daha gelişmiş ilerleme izleme uygulayin. Bu örnek, hata isi ve ayrıntılı kaydetme içerir:
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
UI Uygulamaları ile İlerleme Izleme Entegrasyonu
Windows Forms veya WPF ile masaüstü uygulamaları geliştirirken, kullanıcı deneyimi için ilerleme takibi çok önemli hale gelir. İlerleme olayı, UI elemanlarını güvenli bir şekilde güncelleyebilir:
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
Büyük Belgeler ve Zaman Aşımı ile Çalışma
Geniş kapsamlı belgeleri işlerken, ilerleme takibi daha da değerli hale gelir. Daha iyi kontrol için bunu zaman aşımı ayarları ve durdurma belirteçleri ile birleştirin:
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
İlerleme Takibi İçin En İyi Uygulamalar
-
Güncelleme Sikligi:
OcrProgressolayi işleme sirasinda sikca tetiklenir. Kullanıcı arayüzünüzü veya loglarınızı fazla yormamak için güncellemeleri filtrelemeyi düşünün. -
Performans Etkisi: İlerleme takibinin performans üzerinde minimum yükü vardır, ancak aşırı loglama veya UI güncellemeleri OCR işlemini yavaşlatabilir.
-
Bellek Yönetimi: büyük TIFF dosyaları veya PDF'ler için, optimal performansı sağlamak adına ilerleme ile birlikte bellek kullanımını izleyin.
-
Hata Yönetimi: OCR işleminin kesintiye uğramasını önlemek için her zaman ilerleme olay işleyicilerinizde hata yönetimini dahil edin.
- Thread Guvenligi: Kullanıcı arayuzu ogelerini ilerleme olayindan güncellerken,
InvokeveyaBeginInvokeyöntemlerini kullanarak dogru thread senkronizasyonunu saglayin.
Sonuç
IronOCR'deki ilerleme takibi, OCR operasyonlarına temel görüş sağlar ve geliştiricilerin kullanıcıları işleme durumu hakkında bilgilendiren yanıt veren uygulamalar oluşturmasına olanak tanır. OcrProgress olayindan etkili sekilde yararlanarak, tek sayfalik belgelerden genis PDF dosyalarina kadar her seyi guvenle yoneten profesyonel uygulamalar geliştirebilirsiniz.
OCR uygulamalarınızı daha da geliştirmek için görüntü filtreleri ve sonuç nesneleri üzerine rehberlerimizi keşfedin.
Sıkça Sorulan Sorular
Gerçek zamanlı OCR ilerlemesini nasıl izlerim?
IronOCR, OcrProgress olayı aracılığıyla olay tabanlı bir ilerleme takip sistemi sağlar. IronTesseract örneğinizde bu olaya sadece abone olun ve OCR işlemleri sırasında tamamlanma yüzdesi, işlenen sayfalar ve zaman ölçütleri dahil olmak üzere gerçek zamanlı güncellemeler alın.
OcrProgress olayı hangi bilgileri sağlar?
IronOCR'daki OcrProgress olayı, ProgressPercent (0-100%), TotalPages sayısı, PagesComplete sayısı, başlangıç ve bitiş zamanları ve toplam süre dahil olmak üzere kapsamlı veriler sağlar. Bu bilgiler, GUI uygulamalarındaki ilerleme çubuklarını güncellemek ve OCR performansını izlemek için özellikle kullanışlıdır.
Async OCR işlemleriyle ilerleme izleme kullanabilir miyim?
Evet, IronOCR'un ilerleme takip işlevi, async işlemlerle sorunsuz bir şekilde çalışır. Asenkron işlemlerle ve hatta çoklu iş parçacığı ile birleştirerek performansı artırabilir, aynı zamanda OcrProgress olayı aracılığıyla gerçek zamanlı ilerleme güncellemeleri alabilirsiniz.
PDF OCR için basit bir ilerleme izleyici nasıl uygularım?
IronOCR ile temel ilerleme takibi gerçekleştirmek için bir IronTesseract örneği oluşturun, OcrProgress olayına bir lambda ifadesi veya olay işleyici ile abone olun, ardından PDF'inizle birlikte Read yöntemini çağırın. Olay periyodik olarak çalışacak, yüzdelik tamamlanma ve işlenen sayfa bilgilerini sağlayacaktır.
Büyük belge işlemleri için ilerleme izleme faydalı mıdır?
IronOCR ile büyük belgeleri veya dosya gruplarını işlerken ilerleme takibi önemlidir. İlerleme takibi, işleme durumunu izlemek, tamamlanma sürelerini tahmin etmek ve uzun işlemler sırasında kullanıcıya geri bildirim sağlamak için özellikle PDF OCR işlemleri ve çok sayfalı TIFF dosyaları için değerlidir.

