使用ReadDocumentAdvanced檢測點狀邊框表格
ReadDocumentAdvanced 一個接一個地提取表格資料,但無法檢測邊框為虛線或點線的表格(例如,border: 1px dotted black)。 頁面上的文字可能仍可讀取,但因為引擎從未識別表格,因此嘗試存取表格物件失敗。
當您在帶有點線邊框的文件上呼叫 ReadDocumentAdvanced 然後讀取其儲存格時,它會引發:
Unhandled exception. System.InvalidOperationException: Sequence contains no elements
點之間的空隙將邊框分割成不連續的段,因此OCR引擎看不到連續的輪廓作為表格邊界。 由於未檢測到 Tables.First() 無法返回任何內容。
解決方案
在處理之前應用 Dilate() 過濾器。 膨脹擴展了圖像中的暗像素,閉合了點之間的間隙,使邊框讀作一條實線。然後引擎可以檢測表格物件並返回其單元。
1. 啟用表格讀取並載入輸入
啟用 ReadDataTables 以便引擎構建結構化的表格輸出,然後載入您的圖像。
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. 在讀取前膨脹
在輸入上呼叫 Dilate() 以將點線邊框合併成一條連續的輪廓,然後運行 ReadDocumentAdvanced。
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() 將視覺上的點線轉換為引擎可以追蹤的實線邊框,因此 res.Tables 現在被填充,儲存格文字可以清楚讀取。 SaveAsImages 呼叫是可選的; 它讓您檢查膨脹後的圖像以確認邊框是否如預期閉合。


