C# dilinde OcrProgress Takibi Nasıl Kullanılır

IronOCR ile C#'ta İlerleme Takibini Nasıl Kullanılır

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

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.

  1. IronOCR aşağıdaki NuGet Paket Yöneticisi ile yükleyin

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

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

    arrow pointer


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)
$vbLabelText   $csharpLabel
Konsol çıktısı, 95%'ten 100%'e kadar tamamlama ilerleyişini zaman damgaları ve süre bilgileriyle gösteriyor

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. TimeSpan biç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
$vbLabelText   $csharpLabel

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

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

İlerleme Takibi için En İyi Uygulamalar

  1. Güncelleme Sıklığı: OcrProgress olayı, 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.

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

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

  4. Hata Yönetimi: OCR sürecini aksatabilecek istisnaları önlemek için ilerleme durumu olay işleyicilerinizde daima hata yönetimi kullanın.

  5. İş Parçacığı Güvenliği: İlerleme olayından UI öğelerini güncellerken, Invoke veya BeginInvoke yö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.

Curtis Chau
Teknik Yazar

Curtis Chau, Bilgisayar Bilimleri alanında Lisans Derecesine (Carleton Üniversitesi) sahip ve Node.js, TypeScript, JavaScript ve React konularında uzmanlaşmış ön uç geliştirmeyle ilgileniyor. Sezgisel ve estetik açıdan hoş kullanıcı arayüzleri oluşturma tutkunu, Curtis modern çerçevelerle çalışmayı ve iyi yapı...

Daha Fazla Oku
Başlamaya Hazır mısınız?
Nuget İndirmeler 5,896,332 | Sürüm: 2026.5 just released
Still Scrolling Icon

Hâlâ Kaydırıyor Musunuz?

Hızlıca kanıt ister misiniz? PM > Install-Package IronOcr
örnek çalıştır görüntünüzün aranabilir metin haline gelmesini izleyin.