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 verileri ortaya çıkarır. Hem düzen duyarlı belgeler için ReadDocumentAdvanced() hem de kamera girişi için ReadPhoto(), standart OcrResult.Words koleksiyonunda bulunanla aynı ayrıntı düzeyini 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) işlevini çağırın ve result.Words işlevini tekrarlayın; böylece birkaç satırda tanınan her WORD'un koordinatlarını, sayfa numarasını ve güvenlilik puanını elde edebilirsiniz.

  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 sayfada tespit edilen tüm WORD'ları döndürür. Her bir giriş (AdvancedWord veya AdvancedCharacter, her ikisi de AdvancedOcrElement'den miras alınmıştır), metni, piksel koordinatlarını, boyutları, ait olduğu sayfayı, hangi algılanan metin bloğunun onu içerdiğini belirten bölge indeksini ve o bölge için bir güvenlilik puanını gösterir.

: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} | " +
        $"Region {word.RegionIndex} | " +
        $"'{word.Text}' | " +
        $"Position: ({word.X}, {word.Y}) | " +
        $"Size: {word.Width}x{word.Height} | " +
        $"Confidence: {word.RegionConfidence: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} | " &
            $"Region {word.RegionIndex} | " &
            $"'{word.Text}' | " &
            $"Position: ({word.X}, {word.Y}) | " &
            $"Size: {word.Width}x{word.Height} | " &
            $"Confidence: {word.RegionConfidence:P1}"
        )
    Next
End Using

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

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

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

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

Çok sütunlu mizanpajlarda, Words koleksiyonunun yineleme sırası, sayfadaki görsel okuma sırasıyla eşleşmemektedir. 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

Belgenize uyacak şekilde lineThreshold değerini ayarlayın: 300 DPI'da standart 12pt metin için 10–15 piksel uygundur. 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 tespitlerin veritabanınıza, arama dizinine veya aşağı akış çıkarma işlemine ulaşmasını önlemek 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.RegionConfidence >= threshold)
    .ToList();

var lowConfidenceWords = result.Words
    .Where(w => w.RegionConfidence < 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.RegionConfidence:P1}"
    );
}
Imports IronOcr
Imports System.Linq

Dim ocr As New IronTesseract()
Using input As 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.RegionConfidence >= threshold) _
        .ToList()

    Dim lowConfidenceWords = result.Words _
        .Where(Function(w) w.RegionConfidence < 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.RegionConfidence: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 katmanları, gerçek verilerle karakter düzeyinde karşılaştırma veya form alanlarında hassas uzamsal analiz için Characters koleksiyonunu kullanın. Words ile aynıdır, ancak tek tek karakterlere ayrılır.

: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 tembel 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 ekleme veya etiketli eğitim verileri oluşturma amacıyla bir WORD'un görsel bölgesini çıkarmak için, BoundingBox özelliğini AnyBitmap.CropRegion()'ye aktarın. 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.CropRegion(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.CropRegion(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; EnhanceResolution gibi filtreler boyutları değiştirdiyse, sınırlayıcı kutu diskteki orijinal görüntüyle değil, işlenmiş görüntüyle eşleşir.

Sonraki Adımlar

Gelişmiş iş akışı, IronTesseract.Read() ile aynı uzamsal ayrıntıları sunarken, buna ek olarak ek düzen zekası da sağlar. İ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

OCR nedir ve neden önemlidir?

OCR veya Optik Karakter Tanıma, taranmış belgeler, PDF'ler veya dijital kamera ile çekilen görüntüler gibi farklı belge türlerini düzenlenebilir ve aranabilir verilere dönüştüren bir teknolojidir. OCR, veri çıkarımını otomatikleştirdiği, manuel veri girişini azalttığı ve bilgileri kolayca erişilebilir ve düzenlenebilir hale getirdiği için önemlidir.

IronOCR OCR sürecini nasıl geliştirir?

IronOCR, doğru ve yüksek hızlı metin tanıma yetenekleri sağlayarak OCR sürecini geliştirir. Birden çok dili destekler ve metin tanıma doğruluğunu artırmak için görüntü ön işleme gibi özellikler içerir.

IronOCR çok sayfalı belgeleri işleyebilir mi?

Evet, IronOCR çok sayfalı belgeleri verimli bir şekilde işleyebilir, her sayfadan metin çıkarabilir ve kullanıcıların bütün belgeyle bütünleşik bir birim olarak çalışmasına olanak tanır.

IronOCR hangi dosya formatlarını destekler?

IronOCR, PDF, TIFF, JPEG, PNG ve BMP gibi birçok dosya formatını destekler, bu da işlem yapabileceği belge türlerine esneklik sağlar.

IronOCR düşük kaliteli görüntülerde metin tanıma için uygun mudur?

Evet, IronOCR, düşük çözünürlüklü veya kalitesiz görüntülerin kalitesini artıran gelişmiş görüntü ön işleme özellikleri içerir ve metin tanıma doğruluğunu artırı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.

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 5,887,215 | 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.