C#’ta OcrProgress Takibini nasil kullanirim

Ileri Izleme Kullanımı IronOCR ile C#'ta İlerle Kolayın

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

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.

  1. NuGet Paket Yöneticisi ile https://www.nuget.org/packages/IronOcr yükleyin

    PM > Install-Package IronOcr
  2. 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"));
  3. Canlı ortamınızda test etmek için dağıtın

    Bugün projenizde IronOCR kullanmaya başlayın ücretsiz deneme ile

    arrow pointer


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)
$vbLabelText   $csharpLabel
Konsol ciktisi 95%'ten 100%'e tamamlanmayla zaman damgaları ve süre verilmesiyle ilerleme takibi gösteriyor

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
$vbLabelText   $csharpLabel

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
$vbLabelText   $csharpLabel

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
$vbLabelText   $csharpLabel

İlerleme Takibi İçin En İyi Uygulamalar

  1. Güncelleme Sikligi: OcrProgress olayi 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.

  2. Performans Etkisi: İlerleme takibinin performans üzerinde minimum yükü vardır, ancak aşırı loglama veya UI güncellemeleri OCR işlemini yavaşlatabilir.

  3. 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.

  4. Hata Yönetimi: OCR işleminin kesintiye uğramasını önlemek için her zaman ilerleme olay işleyicilerinizde hata yönetimini dahil edin.

  5. Thread Guvenligi: Kullanıcı arayuzu ogelerini ilerleme olayindan güncellerken, Invoke veya BeginInvoke yö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.

Curtis Chau
Teknik Yazar

Curtis Chau, Bilgisayar Bilimleri alanında lisans derecesine sahiptir (Carleton Üniversitesi) ve Node.js, TypeScript, JavaScript ve React konularında uzmanlaşmış ön uç geliştirme üzerine uzmanlaşmıştır. Kullanıcı dostu ve estetik açıdan hoş arayüzler tasarlamaya tutkuyla bağlı olan Curtis, modern çerç...

Daha Fazlasını Oku
Başlamaya Hazır mısınız?
Nuget İndirmeler 5,585,834 | Sürüm: 2026.4 just released
Still Scrolling Icon

Hala Kaydiriyor musunuz?

Hızlı bir kanit mi istiyorsunuz? PM > Install-Package IronOcr
örnekleri çalıştır resminizin aranabilir metne donuşünü izleyin.