IronOCR ile C#'ta İlerleme Takibini Nasıl Kullanılır
IronOCR, OCR işlemleri için olay tabanlı bir ilerleme izleme sistemi sunar ve geliştiricilerin, tamamlanma yüzdesini, işlenen sayfaları ve zaman ölçümlerini gerçek zamanlı olarak bildiren OcrProgress olayı aracılığıyla okuma ilerlemesini izlemelerine olanak tanır.
Hızlı Başlangıç: OcrProgress'e Abone Olun ve PDF Okuyun
Bu örnek, IronOCR ile OCR ilerlemesini nasıl izleyeceğinizi gösterir: yerleşik OcrProgress olayına abone olun ve bir PDF okunurken yüzde, tamamlanan sayfalar ve toplam sayfa sayısı dahil olmak üzere anlık geri bildirim alın. Başlamak için sadece birkaç satır yeterlidir.
-
IronOCR aşağıdaki NuGet Paket Yöneticisi ile yükleyin
PM > Install-Package IronOcr -
Bu kod parçacığını kopyalayın ve ç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 için dağıtım yapın
Ücretsiz deneme ile bugün projenizde IronOCR kullanmaya başlayın
Asgari İş Akışı (5 adım)
- Okuma ilerlemesini takip etmek için bir C# kütüphanesi indirin
- OcrProgress olayına abone olun
- Etkinlik tarafından geçirilen örneği kullanarak ilerleme bilgilerini alınız
- Yüzde cinsinden ilerleme ve toplam süreyi elde et
- Başlangıç ve bitiş zamanlarını, ayrıca toplam sayfa sayısını alın
OCR Uygulamamda İlerleme Takibini Nasıl Uygularım?
Geniş belgeleri veya dosya gruplarını OCR ile işlerken ilerlemenin takibi önemlidir. OcrProgress etkinliğine abone olarak okuma sürecindeki ilerleme güncellemelerini alabilirsiniz. Bu, özellikle PDF OCR işlemleri ve çok sayfalı TIFF dosyaları ile çalışırken kullanışlıdır.
Etkinlik, başlangıç saati, toplam sayfa sayısı, yüzde cinsinden ilerleme, süre ve bitiş saati gibi OCR işinin ilerlemesi hakkında bilgi içeren bir örnek geçirir. Async işlemleri ile sorunsuz çalışır ve performansı artırmak için çoklu iş parçacığı ile birleştirilebilir.
The following example uses this document as a sample: "Experiences in Biodiversity Research: A Field Course" by Thea B. Gessler, Iowa State Üniversitesi.
: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)
Etkinlikten Hangi İlerleme Bilgilerine Ulaşabilirim?
OcrProgress olayı, OCR performansını izlemeye ve optimize etmeye yardımcı olan kapsamlı ilerleme verileri sağlar. Her bir özellik, işlemi izlemek için belirli bir amaca hizmet eder:
ProgressPercent: Tamamlanan sayfaların yüzdesi olarak OCR işinin ilerleme durumu, 0 ile 100 arasında değişir. GUI uygulamalarında ilerleme çubuklarını güncellemek için kullanışlıdır.TotalPages: OCR motoru tarafından işlenen toplam sayfa sayısı. Tahmini tamamlanma sürelerini hesaplamak için gereklidir.PagesComplete: OCR okuma işleminin tamamen tamamlandığı sayfa sayısı. Bu sayı, sayfalar işlendiğinde kademeli olarak artar.Duration: OCR işinin toplam süresi; tüm sürecin tamamlanması için geçen süreyi gösterir.TimeSpanbiçiminde ölçülür ve olay her tetiklendiğinde güncellenir.StartTimeUTC: OCR işinin başladığı tarih ve saat, Koordineli Evrensel Zaman (UTC) biçiminde gösterilir.EndTimeUTC: OCR işinin %100 tamamlandığı tarih ve saat (UTC formatında). Bu özellik, OCR işlemi devam ederken boş (null) olur ve işlem tamamlandığında doldurulur.
Gelişmiş İlerleme Takibi Uygulaması
Üretim uygulamaları için daha sofistike ilerleme takibi uygulayın. Bu örnek, hata yönetimi ve ayrıntılı loglamayı 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
İlerleme Takibini UI Uygulamalarıyla Entegre Etme
Windows Forms veya WPF ile masaüstü uygulamaları geliştirirken, ilerleme takibi kullanıcı deneyimi için hayati önem taşır. İlerleme olayı, UI öğelerini 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 Belgelerle Çalışma ve Zaman Aşımı
Geniş belgeleri işlerken, ilerleme takibi çok daha değerli hale gelir. Timeout ayarları ile birleştirin ve daha iyi kontrol için abort tokenları kullanın:
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 için En İyi Uygulamalar
-
Güncelleme Sıklığı:
OcrProgressolayı, işleme sırasında sık sık tetiklenir. Arayüzünüzü veya günlüklerinizi bunaltmamak için güncellemeleri filtrelemeyi düşünün. -
Performans Etkisi: İlerleme takibinin performansa minimal etkisi vardır, ancak aşırı kayıt veya kullanıcı arayüzü güncellemeleri OCR sürecini yavaşlatabilir.
-
Bellek Yönetimi: Büyük TIFF dosyaları veya PDF'ler için, en iyi performansı sağlamak amacıyla ilerleme ile birlikte bellek kullanımını izleyin.
-
Hata Yönetimi: OCR sürecini aksatabilecek istisnaları önlemek için ilerleme durumu olay işleyicilerinizde daima hata yönetimi kullanın.
- İş Parçacığı Güvenliği: İlerleme olayından UI öğelerini güncellerken,
InvokeveyaBeginInvokeyöntemlerini kullanarak uygun iş parçacığı senkronizasyonunu sağlayın.
Sonuç
IronOCR'de ilerleme takibi, OCR işlemleri üzerinde önemli bir görünürlük sağlar ve geliştiricilerin kullanıcıları işlem durumu hakkında bilgilendiren duyarlı uygulamalar oluşturmasına olanak tanır. OcrProgress olayını etkili bir şekilde kullanarak, tek sayfalık belgelerden kapsamlı PDF dosyalarına kadar her şeyi güvenle işleyen Professional uygulamalar oluşturabilirsiniz.
Daha ileri düzey OCR teknikleri için, OCR uygulamalarınızı daha da geliştirmek amacıyla görüntü filtreleri ve sonuç nesneleri hakkındaki kılavuzlarımızı keşfedin.
Sıkça Sorulan Sorular
OCR ilerlemesini gerçek zamanlı olarak nasıl izlerim?
IronOCR, OcrProgress olayı aracılığıyla olaya dayalı bir ilerleme izleme sistemi sunar. Bu olaya IronTesseract örneğinizde abone olun ve tamamlanma yüzdesi, işlenen sayfalar ve OCR işlemleri sırasında zamanlama ölçümleri gibi gerçek zamanlı güncellemeler alacaksınız.
OcrProgress olayı hangi bilgileri sağlar?
IronOCR'daki OcrProgress olayı, Yüzde İlerlemesi (0-100%), Toplam Sayfa sayısı, Tamamlanan Sayfa sayısı, başlangıç ve bitiş zamanları ve toplam süre gibi kapsamlı veriler sağlar. Bu bilgi, özellikle GUI uygulamalarında ilerleme çubuklarının güncellenmesi ve OCR performansının izlenmesi için faydalıdır.
Asenkron OCR işlemleriyle ilerleme izleme kullanabilir miyim?
Evet, IronOCR'un ilerleme izleme işlevselliği, asenkron işlemlerle sorunsuz çalışır. Bunu asenkron işlem ve hatta çoklu iş parçacığı ile birleştirerek, OcrProgress olayı aracılığıyla gerçek zamanlı ilerleme güncellemeleri alırken performansı artırabilirsiniz.
PDF OCR için basit bir ilerleme izleyiciyi nasıl uygularım?
IronOCR ile temel ilerleme izleme uygulamak için bir IronTesseract örneği oluşturun, bir lambda ifadesi veya olay işleyici ile OcrProgress olayına abone olun, ardından PDF'nizi Read yöntemiyle çağırın. Olay periyodik olarak ateşlenecek ve tamamlanma yüzdesi ile işlenen sayfalar hakkında bilgi sağlayacaktır.
Büyük belge işleme için ilerleme izlemesi faydalı mıdır?
IronOCR ile büyük belgeleri veya dosya partilerini işlerken ilerleme izleme esastır. Özellikle PDF OCR işlemleri ve çok sayfalı TIFF dosyaları için değerlidir, işlem durumunu izlemenize, tamamlanma sürelerini tahmin etmenize ve uzun işlemler sırasında kullanıcı geri bildirimini sağlamanıza olanak tanır.
IronOCR birden fazla dili destekliyor mu?
IronOCR, birden çok dili destekler ve farklı dillerde metin tanımaya ihtiyaç duyan global uygulamalar için çok yönlü bir araçtır.
IronOCR mevcut uygulamalara entegre edilebilir mi?
IronOCR, C# kullanarak mevcut uygulamalara kolayca entegre edecek şekilde tasarlanmıştır, bu sayede geliştiriciler, yazılımlarına minimal çabayla OCR işlevselliği ekleyebilir.
IronOCR'yi belge yönetimi için kullanmanın faydaları nelerdir?
IronOCR'yi belge yönetimi için kullanmak, taranmış belgeleri aranabilir ve düzenlenebilir metne dönüştürerek iş akışını hızlandırır, manuel veri giriş ihtiyacını azaltır ve belge erişilebilirliğini artırır.
IronOCR veri doğruluğunu nasıl artırabilir?
IronOCR, gelişmiş tanıma algoritmaları ve görüntü düzeltme özellikleriyle veri doğruluğunu artırır, böylece metin çıkarım sürecinin hem güvenilir hem de kesin olmasını sağlar.
IronOCR için ücretsiz bir deneme mevcut mu?
Evet, Iron Software, IronOCR'nin özelliklerini ve yeteneklerini, bir satın alma kararı vermeden önce test edebilmek için ücretsiz bir deneme sunar.

