ReadDocumentAdvanced ile Noktalı Kenar Tablosu Algılama
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")

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


