C#'da WORD ve Karakter OCR Verileri (Koordinatlar, Güven Aralığı, Sınırlayıcı Kutular)
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.
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.
-
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 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}"); -
Canlı ortamınızda test için dağıtım yapın
Ücretsiz deneme ile bugün projenizde IronOCR kullanmaya başlayın
Minimal İş Akışı (3 adım)
- NuGet'ten C# OCR kütüphanesini indirin
- Giriş veriniz üzerinde
ReadDocumentAdvancedveyaReadPhotoile gelişmiş OCR çalıştırın - Koordinatlar, güven aralığı ve sınırlayıcı kutular için
result.WORDveyaresult.Characters
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())
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
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
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
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
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:
- Tablo çıkarma kılavuzu: yapılandırılmış hücre verileri için
ReadDocumentAdvancedüzerindekiTablesözelliğini ele alır. - OCR sonuçlarını okuma: standart iş akışı için WORD verileri.
- Görüntü kalitesi düzeltme: güvenlilik puanlarını artıran ön işleme filtreleri.
- OCR eğitimi: yeni kullanıcılar için baştan sona kurulum.
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.

