C#'da WORD ve Karakter OCR Verileri (Koordinatlar, Güven Aralığı, Sınırlayıcı Kutular)

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

Bir belge üzerinde OCR işlemi uygulandıktan sonra, yalnızca çıkarılan metin genellikle yeterli olmaz. Bir sayfada belirli değerleri bulmak, düşük kaliteli algılamaları hariç tutmak veya çok sütunlu düzenlerde doğal okuma sırasını yeniden oluşturmak için WORD başına koordinatlara, sayfa numaralarına, bölge dizinlerine ve güvenlilik puanlarına ihtiyacınız vardır.

Words ve Characters koleksiyonları, AdvancedOcrResultBase üzerinde bu veriyi ortaya çıkarır. //ironsoftware.com/csharp/ocr/how-to/read-table-in-document/' hepsi için ReadDocumentAdvanced() düzen farkındalığı olan belgeler ve ReadPhoto() için kamera girişi, standart OcrResult.Words koleksiyonu aracılığıyla mevcut aynı ayrıntı seviyesini döndürür.

Bu kılavuz, beş yaygın kalıbı ele almaktadır: WORD verilerini yineleme, okuma sırasını yeniden oluşturma, güvenilirliğe göre filtreleme, karakter düzeyinde çalışma ve kaynak görüntüyü sınırlayıcı kutudan kırpma.

30 günlük ücretsiz deneme sürümünü başlatarak bu koleksiyonları iş akışınızda test edin.

NuGet NuGet ile yükleyin

PM >  Install-Package IronOcr

NuGet'te hızlı kurulum için https://www.nuget.org/packages/IronOcr'i kontrol edin. 10 milyonun üzerinde indirme ile, C# ile PDF geliştirmeyi dönüştürüyor. DLL veya Windows yükleyici'yi de indirebilirsiniz.

Hızlı Başlangıç: OCR Sonuçlarından WORD ve Karakter Verilerini Okuma

ReadDocumentAdvanced (veya ReadPhoto) çağırın ve result.Words üzerinde yineleme yaparak her tanınan kelimeyi koordinatlarıyla, sayfa numarası ve güven skoru ile birkaç satırda alın.

  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 result = new IronTesseract().ReadDocumentAdvanced(new OcrInput("scan.png"));
    foreach (var word in result.Words)
        Console.WriteLine($"{word.Text} @ ({word.X},{word.Y}) conf:{word.RegionConfidence:P0}");
  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


Koordinatlar ve Güven Düzeyi ile WORDları Nasıl Tekrarlayabilirsiniz?

Words koleksiyonu her sayfa boyunca tespit edilen her kelimeyi döndürür. Her giriş (bir AdvancedWord veya AdvancedCharacter, her ikisi de AdvancedOcrElement'den türetilir) metni, piksel koordinatlarını, boyutlarını, ait olduğu sayfayı, hangi tespit edilen metin bloğunun onu içerdiğini tanımlayan bölge indeksini ve o bölge için bir güven skoru ortaya çıkarır.

:path=/static-assets/ocr/content-code-examples/how-to/read-document-advanced-iterate-words.cs
using IronOcr;

var ocr = new IronTesseract();
using var input = new OcrInput();
input.LoadImage("receipt.png");

var result = ocr.ReadDocumentAdvanced(input);

foreach (var word in result.Words)
{
    Console.WriteLine(
        $"Page {word.PageNumber} | " +
        $"'{word.Text}' | " +
        $"Position: ({word.X}, {word.Y}) | " +
        $"Size: {word.Width}x{word.Height} | " +
        $"Confidence: {word.Confidence:P1}"
    );
}

// ToString() override for diagnostic logging
Console.WriteLine(result.Words.First().ToString());
Imports IronOcr

Dim ocr As New IronTesseract()
Using input As New OcrInput()
    input.LoadImage("receipt.png")

    Dim result = ocr.ReadDocumentAdvanced(input)

    For Each word In result.Words
        Console.WriteLine(
            $"Page {word.PageNumber} | " &
            $"'{word.Text}' | " &
            $"Position: ({word.X}, {word.Y}) | " &
            $"Size: {word.Width}x{word.Height} | " &
            $"Confidence: {word.Confidence:P1}"
        )
    Next

    ' ToString() override for diagnostic logging
    Console.WriteLine(result.Words.First().ToString())
End Using
$vbLabelText   $csharpLabel

İpuçlarıPageNumber 1 tabanlıdır: birinci sayfa 1'dir, 0 değil. Bu, sıfır tabanlı indeksleme kullanan çoğu .NET koleksiyonundan farklıdır. RegionIndex standart 0-tabanlı konvansiyonu izler.

Koordinatları çizim veya kırpma API'lerine aktarmak için BoundingBox özelliğini kullanın. Pozisyonu ve boyutu tek bir IronSoftware.Drawing.Rectangle içinde toplar.

Okuma Sırasını Nasıl Yeniden Oluşturursunuz?

Çok sütunlu düzenlerde, Words koleksiyonunun yineleme sırası, sayfadaki görsel okuma sırasıyla eşleşmez. WORD'lar algılanan bölgeye göre gruplandırıldığından, sütunlar ve tablo hücreleri sırayla geri döndürülmeyebilir.

Doğal bir yukarıdan aşağıya, soldan sağa sıralamayı yeniden oluşturmak için, koleksiyonu önce Y koordinatına göre, ardından her satır içinde X koordinatına göre sıralayın. Küçük bir Y toleransı, aynı taban çizgisinde bulunan WORD kelimelerini gruplandırır.

:path=/static-assets/ocr/content-code-examples/how-to/read-document-advanced-reading-order.cs
using IronOcr;
using System.Linq;

var ocr = new IronTesseract();
using var input = new OcrInput();
input.LoadImage("multi-column-doc.png");

var result = ocr.ReadDocumentAdvanced(input);

int targetPage = 1;
int lineThreshold = 10; // pixel tolerance for grouping same-line words

// Sort by line (Y), then left-to-right (X)
var pageWords = result.Words
    .Where(w => w.PageNumber == targetPage)
    .OrderBy(w => w.Y / lineThreshold)
    .ThenBy(w => w.X)
    .ToList();

foreach (var word in pageWords)
{
    Console.Write($"{word.Text} ");
}
Console.WriteLine();
Imports IronOcr
Imports System.Linq

Dim ocr As New IronTesseract()
Using input As New OcrInput()
    input.LoadImage("multi-column-doc.png")

    Dim result = ocr.ReadDocumentAdvanced(input)

    Dim targetPage As Integer = 1
    Dim lineThreshold As Integer = 10 ' pixel tolerance for grouping same-line words

    ' Sort by line (Y), then left-to-right (X)
    Dim pageWords = result.Words _
        .Where(Function(w) w.PageNumber = targetPage) _
        .OrderBy(Function(w) w.Y \ lineThreshold) _
        .ThenBy(Function(w) w.X) _
        .ToList()

    For Each word In pageWords
        Console.Write($"{word.Text} ")
    Next
    Console.WriteLine()
End Using
$vbLabelText   $csharpLabel

Belgenizle eşleşmesi için lineThreshold ayarlayın: standart 12 punto metin için 10–15 piksel 300 DPI'da çalışır. Daha büyük başlıklar veya el yazısı girişleri için daha geniş bir tolerans gereklidir. Bu desen, motorun her sütunu veya hücreyi kendi bölgesi olarak algıladığı çok sütunlu sayfalarda ve tablo hücrelerinin içinde özellikle kullanışlıdır.

Güvenilirliği Düşük WORD'ları Nasıl Filtrelersiniz?

Düşük kaliteli tespitleri veritabanınıza, arama dizininize veya aşağı akış ekstraksiyonunuza ulaşmadan önce hariç tutmak için koleksiyonu RegionConfidence ile filtreleyin. Puan aralığı 0,0 ile 1,0 arasındadır; daha yüksek değerler, algılanan metne olan güvenin daha yüksek olduğunu gösterir.

:path=/static-assets/ocr/content-code-examples/how-to/read-document-advanced-confidence-filter.cs
using IronOcr;
using System.Linq;

var ocr = new IronTesseract();
using var input = new OcrInput();
input.LoadImage("noisy-scan.png");

var result = ocr.ReadDocumentAdvanced(input);

double threshold = 0.75;

var highConfidenceWords = result.Words
    .Where(w => w.Confidence >= threshold)
    .ToList();

var lowConfidenceWords = result.Words
    .Where(w => w.Confidence < threshold)
    .ToList();

Console.WriteLine($"Accepted: {highConfidenceWords.Count} words");
Console.WriteLine($"Rejected: {lowConfidenceWords.Count} words");

// Log rejected words for manual review
foreach (var word in lowConfidenceWords)
{
    Console.WriteLine(
        $"  LOW CONF: '{word.Text}' at ({word.X},{word.Y}) — {word.Confidence:P1}"
    );
}
Imports IronOcr
Imports System.Linq

Dim ocr = New IronTesseract()
Using input = New OcrInput()
    input.LoadImage("noisy-scan.png")

    Dim result = ocr.ReadDocumentAdvanced(input)

    Dim threshold As Double = 0.75

    Dim highConfidenceWords = result.Words _
        .Where(Function(w) w.Confidence >= threshold) _
        .ToList()

    Dim lowConfidenceWords = result.Words _
        .Where(Function(w) w.Confidence < threshold) _
        .ToList()

    Console.WriteLine($"Accepted: {highConfidenceWords.Count} words")
    Console.WriteLine($"Rejected: {lowConfidenceWords.Count} words")

    ' Log rejected words for manual review
    For Each word In lowConfidenceWords
        Console.WriteLine(
            $"  LOW CONF: '{word.Text}' at ({word.X},{word.Y}) — {word.Confidence:P1}"
        )
    Next
End Using
$vbLabelText   $csharpLabel

Kalitesi değişken olan taramalarda (bazı alanlarda net baskı, diğer alanlarda bozuk bölümler), bu durum güvenilirliği düşük çıktıların sonraki sistemlere ulaşmasını engeller. Kaynakta güven puanlarını yükseltmek için, görüntü ön işleme filtreleri (Deskew, DeNoise, Binarize) eşik uygulanmadan önce kaliteyi iyileştirir.

Karakter Düzeyinde Nasıl İterasyon Yapılır?

OCR doğrulama üzerleri için, doğruluk kontrolü zeminine karşı karakter düzeyinde fark yaratma veya form alanlarında hassas mekansal analiz için Characters koleksiyonunu kullanın. Words'i yansıtır ancak bireysel karakterlere kadar indirger.

:path=/static-assets/ocr/content-code-examples/how-to/read-document-advanced-characters.cs
using IronOcr;

var ocr = new IronTesseract();
using var input = new OcrInput();
input.LoadImage("form-field.png");

var result = ocr.ReadDocumentAdvanced(input);

foreach (var ch in result.Characters)
{
    Console.WriteLine(
        $"'{ch.Text}' | " +
        $"Box: ({ch.X}, {ch.Y}, {ch.Width}, {ch.Height}) | " +
        $"Page {ch.PageNumber}"
    );
}

// ToString() override provides diagnostic-friendly output
Console.WriteLine(result.Characters.First().ToString());
Imports IronOcr

Dim ocr = New IronTesseract()
Using input = New OcrInput()
    input.LoadImage("form-field.png")

    Dim result = ocr.ReadDocumentAdvanced(input)

    For Each ch In result.Characters
        Console.WriteLine($"'{ch.Text}' | Box: ({ch.X}, {ch.Y}, {ch.Width}, {ch.Height}) | Page {ch.PageNumber}")
    Next

    ' ToString() override provides diagnostic-friendly output
    Console.WriteLine(result.Characters.First().ToString())
End Using
$vbLabelText   $csharpLabel

Lütfen dikkate alınHem Words hem de Characters tembelce hesaplanır ve önbelleğe alınır. İlk erişim hesaplamayı tetikler; sonraki erişimlerde önbelleğe alınmış sonuç döndürülür, bu nedenle ikinci kez yineleme hiçbir maliyet gerektirmez.

BoundingBox Kullanarak Orijinal Görüntüyü Nasıl Kırpabilirsiniz?

Doğrulama, açıklama veya etiketli eğitim verileri oluşturmak için bir kelimenin görsel bölgesini çıkarmak amacıyla BoundingBox özelliğini AnyBitmap.CropRegion()'e geçirin. Sınırlayıcı kutu, WORD'un kaynak görüntüdeki konumuna doğrudan karşılık gelir.

:path=/static-assets/ocr/content-code-examples/how-to/read-document-advanced-crop-boundingbox.cs
using IronOcr;
using IronSoftware.Drawing;

var ocr = new IronTesseract();
using var input = new OcrInput();
input.LoadImage("invoice.png");

var result = ocr.ReadDocumentAdvanced(input);

// Load the original image for cropping
var originalImage = AnyBitmap.FromFile("invoice.png");

// Find a specific word and crop its region
var targetWord = result.Words.FirstOrDefault(w => w.Text == "Total");
if (targetWord != null)
{
    Rectangle cropRect = targetWord.BoundingBox;
    AnyBitmap croppedRegion = originalImage.Clone(cropRect);
    croppedRegion.SaveAs("total-region.png");

    Console.WriteLine(
        $"Cropped '{targetWord.Text}' from " +
        $"({cropRect.X}, {cropRect.Y}, {cropRect.Width}, {cropRect.Height})"
    );
}
Imports IronOcr
Imports IronSoftware.Drawing

Dim ocr As New IronTesseract()
Using input As New OcrInput()
    input.LoadImage("invoice.png")

    Dim result = ocr.ReadDocumentAdvanced(input)

    ' Load the original image for cropping
    Dim originalImage = AnyBitmap.FromFile("invoice.png")

    ' Find a specific word and crop its region
    Dim targetWord = result.Words.FirstOrDefault(Function(w) w.Text = "Total")
    If targetWord IsNot Nothing Then
        Dim cropRect As Rectangle = targetWord.BoundingBox
        Dim croppedRegion As AnyBitmap = originalImage.Clone(cropRect)
        croppedRegion.SaveAs("total-region.png")

        Console.WriteLine(
            $"Cropped '{targetWord.Text}' from " &
            $"({cropRect.X}, {cropRect.Y}, {cropRect.Width}, {cropRect.Height})"
        )
    End If
End Using
$vbLabelText   $csharpLabel

Bu model, toplu işlemler için ölçeklenebilir: her WORD'u yineleyin, her kutuyu kırpın ve özel yazı tipi eğitimi veya aşağı akış ML boru hatları için etiketli bir veri kümesi dışa aktarın. Koordinatlar, ön işleme sonrası görüntüyü yansıtmaktadır; eğer EnhanceResolution gibi filtreler boyutları değiştirdiyse, sınırlayıcı çerçeve işlenmiş görüntüyle eşleşir, disk üzerindeki orijinaliyle değil.

Sonraki Adımlar

Gelişmiş boru hattı, aynı uzamsal ayrıntıyı IronTesseract.Read() ile sağlar ve üzerine ek yerleşim zekası ekler. İlgili konular:

30 günlük ücretsiz deneme sürenizi başlatın veya lisans seçeneklerini görüntüleyin.

Sıkça Sorulan Sorular

C#'da Gelişmiş OCR nedir?

C#'da Gelişmiş OCR, Optical Character Recognition kullanarak ayrıntılı kelime ve karakter verilerini, koordinatlar, güven seviyeleri ve sınırlayıcı kutular dahil olmak üzere, IronOCR'un gelişmiş işleyen hattını kullanarak çıkartma işlemine atıfta bulunur.

IronOCR kullanarak kelime verilerine nasıl erişebilirim?

IronOCR'da AdvancedWord koleksiyonu üzerinden yineleme yaparak taranan belgede her kelimenin konumu ve güven skoru hakkında detaylı bilgileri sağlayan kelime verilerine erişebilirsiniz.

OCR'de sınırlayıcı kutuların önemi nedir?

Sınırlayıcı kutular, OCR'de tanınan metin öğelerinin taranmış imaj üzerindeki tam yerini ve boyutlarını tanımlar, böylece kesin metin çıkarımı ve imaj manipülasyonunu mümkün kıldığı için çok önemlidir.

OCR sonuçlarını güven skoruna göre filtreleyebilir miyim?

Evet, IronOCR kullanarak, yalnızca yüksek tanıma doğruluğuna sahip olan metnin daha ileri işlem için dikkate alınmasını sağlamak üzere OCR sonuçlarını güven skoruna göre filtreleyebilirsiniz.

OCR sonuçlarındaki okuma sırasını nasıl yeniden yapılandırabilirim?

IronOCR tarafından sağlanan AdvancedWord ve AdvancedCharacter nesnelerinin sırasını analiz ederek, OCR sonuçlarındaki okuma sırasını yeniden yapılandırmak mümkündür; bu, belgenin doğal okuma akışını yansıtır.

IronOCR kullanarak kaynak görüntüleri kırpmak mümkün mü?

IronOCR, tanınan kelimelerin ve karakterlerin sınırlayıcı kutuları ve koordinatlarını içeren metin verilerinin analizine dayalı olarak kaynak görüntüleri kırpmanızı sağlar.

AdvancedWord ve AdvancedCharacter koleksiyonları nelerdir?

IronOCR'deki AdvancedWord ve AdvancedCharacter koleksiyonları, her tanınan kelime ve karakter hakkında, koordinatları, güven seviyeleri ve sınırlayıcı kutuları dahil olmak üzere, detaylı bilgileri depolayan veri yapılarıdır.

IronOCR karakter tanımayı nasıl yönetir?

IronOCR, her karakterin özelliklerini analiz eden gelişmiş bir işleyen hattan yararlanarak pozisyonu, boyutu ve tanıma güveni gibi detaylı veriler sunarak karakter tanımayı yönetir.

IronOCR ile hangi tür belgeler işlenebilir?

IronOCR, PDF'ler, taranmış imajlar ve fotoğraflar dahil olmak üzere geniş bir belge yelpazesini işleyebilir ve yüksek doğruluk ve detayla metin verilerini çıkartabilir.

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.

Darrius Serrant
Tam Yığın Yazılım Mühendisi (WebOps)

Darrius Serrant, Miami Üniversitesi'nden Bilgisayar Bilimi alanında Lisans Derecesine sahip ve Iron Software'de Tam Yığın WebOps Pazarlama Mühendisi olarak çalışıyor. Genç yaşlardan itibaren kodlamaya çekildi, bilgisayar bilimi hem gizemli hem de erişilebilir olarak görüldü ve bu özellik, yaratıcılık ...

Daha Fazla Oku
Başlamaya Hazır mısınız?
Nuget İndirmeler 6,136,090 | Sürüm: 2026.7 yeni yayınlandı
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.