ReadDocumentAdvanced ile Noktalı Kenar Tablosu Algılama

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

ReadDocumentAdvanced tablo verilerini hücre hücre çıkarır ancak sınırları noktalı veya kesikli olan tabloları algılayamaz (örneğin, border: 1px dotted black). Sayfadaki metin hala okunabilir olabilir, ama tablo nesnesine erişmek başarısız olur çünkü motor tabloyu asla tanımaz.

Noktalı sınır tablosu içeren bir belgede ReadDocumentAdvanced çağırdığınızda ve hücrelerini okuduğunuzda, şu hatayı verir:

Unhandled exception. System.InvalidOperationException: Sequence contains no elements

Noktalar arasındaki boşluklar, kenarlığı kesik segmente ayırır, bu nedenle OCR motoru, tablo sınırı olarak işlem görecek bir sürekli kontur göremez. Hiçbir Tables algılanmadığında, Tables.First() geri dönecek bir şey yoktur.

Çözüm

İşlemeden önce Dilate() filtresini uygulayın. Dilation, görüntüdeki karanlık pikselleri genişleterek noktalar arasındaki boşlukları kapatarak kenarların bir katı çizgi olarak okunmasını sağlar. Motor, daha sonra tablo nesnesini tespit edebilir ve hücrelerini döndürebilir.

1. Tablo okumayı etkinleştir ve girdiyi yükle

Motorun yapılandırılmış tablo çıktısı oluşturması için ReadDataTables'yi açın, sonra görüntünüzü yükleyin.

var ocr = new IronTesseract();
ocr.Configuration.ReadDataTables = true;
var input = new OcrInput();
input.Load("image-20250408-144240.png");
var ocr = new IronTesseract();
ocr.Configuration.ReadDataTables = true;
var input = new OcrInput();
input.Load("image-20250408-144240.png");
Imports IronTesseract

Dim ocr As New IronTesseract()
ocr.Configuration.ReadDataTables = True
Dim input As New OcrInput()
input.Load("image-20250408-144240.png")
$vbLabelText   $csharpLabel

OCR'nin algılayamadığı noktalı sınırlarla giriş tablosu

2. Okumadan önce şişir

Noktalı sınırı sürekli bir kontura birleştirmek için girdiye Dilate() çağrısı yapın, ardından ReadDocumentAdvanced çalıştırın.

input.Dilate();
input.SaveAsImages("export.png", AnyBitmap.ImageFormat.Png);
var res = ocr.ReadDocumentAdvanced(input);
Console.WriteLine(res.Tables.First().CellInfos.First().CellText);
input.Dilate();
input.SaveAsImages("export.png", AnyBitmap.ImageFormat.Png);
var res = ocr.ReadDocumentAdvanced(input);
Console.WriteLine(res.Tables.First().CellInfos.First().CellText);
Dim res = ocr.ReadDocumentAdvanced(input)
input.Dilate()
input.SaveAsImages("export.png", AnyBitmap.ImageFormat.Png)
Console.WriteLine(res.Tables.First().CellInfos.First().CellText)
$vbLabelText   $csharpLabel

Dilate() görsel noktalı çizgileri motorun izleyebileceği sağlam sınırlara dönüştürür, böylece res.Tables şimdi doludur ve hücre metni temiz bir şekilde okunur. SaveAsImages çağrısı opsiyoneldir; kenarların beklenen şekilde kapanıp kapanmadığını doğrulamak için genişletilmiş görüntüyü incelemenize olanak tanır.

Dilate() sonrası noktalar sağlam çizgilere birleşmiş halde tablo

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