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. 読み取る前に拡張します
点線境界を連続した輪郭にマージするために入力で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)
res.Tablesが現在は埋め込まれており、セルテキストがクリーンに読み取れます。 SaveAsImagesの呼び出しはオプションです; それは拡張された画像を検査し、期待通りに境界が閉じたかを確認することができます。


