Erkennung von gepunkteten Rahmentabellen mit ReadDocumentAdvanced

Curtis Chau
Curtis Chau
Updated: 29. Juni 2026

ReadDocumentAdvanced extrahiert Tabellendaten Zelle für Zelle, kann jedoch keine Tabellen erkennen, deren Ränder gepunktet oder gestrichelt sind (zum Beispiel border: 1px dotted black). Der Text auf der Seite kann noch lesbar sein, dennoch schlägt der Zugriff auf das Tabellenobjekt fehl, da die Engine die Tabelle nie erkennt.

Wenn Sie ReadDocumentAdvanced auf ein Dokument mit einer gepunkteten Randtabelle aufrufen und dann deren Zellen lesen, wird Folgendes ausgelöst:

Unhandled exception. System.InvalidOperationException: Sequence contains no elements
Text

Die Lücken zwischen den Punkten brechen den Rand in diskontinuierliche Segmente, sodass die OCR-Engine keinen kontinuierlichen Kontur sehen kann, um ihn als Tabellenrand zu behandeln. Da kein Tables erkannt wurde, hat Tables.First() nichts zurückzugeben.

Lösung

Wenden Sie den Dilate()-Filter an, bevor Sie mit der Verarbeitung beginnen. Durch die Erweiterung werden die dunklen Pixel im Bild vergrößert, sodass die Lücken zwischen den Punkten geschlossen werden und der Rand als eine solide Linie gelesen wird. Die Engine kann dann das Tabellenobjekt erkennen und seine Zellen zurückgeben.

1. Tabellenerkennung aktivieren und Eingabe laden

Schalten Sie ReadDataTables ein, damit die Engine strukturierten Tabellenausgaben erzeugt, laden Sie dann Ihr Bild.

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

Eingabentabelle mit gepunkteten Rändern, die von der OCR nicht erkannt wird

2. Vor dem Lesen erweitern

Rufen Sie Dilate() für die Eingabe auf, um den gepunkteten Rand in eine kontinuierliche Kontur zu überführen, und führen Sie dann ReadDocumentAdvanced aus.

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

Dilate() konvertiert die visuellen gepunkteten Linien in feste Ränder, die die Engine nachverfolgen kann, sodass res.Tables nun gefüllt ist und der Zelltext sauber gelesen wird. Der SaveAsImages-Aufruf ist optional; es lässt Sie das vergrößerte Bild inspizieren, um zu bestätigen, dass die Ränder wie erwartet geschlossen sind.

Tabelle nach Dilate() mit gepunkteten Rändern in feste Linien überführt

Curtis Chau hat einen Bachelor-Abschluss in Informatik von der Carleton University und ist spezialisiert auf Frontend-Entwicklung mit Expertise in Node.js, TypeScript, JavaScript und React. Leidenschaftlich widmet er sich der Erstellung intuitiver und ästhetisch ansprechender Benutzerschnittstellen und arbeitet gerne mit modernen Frameworks sowie der Erstellung gut strukturierter, optisch ansprechender Handbücher.

Weiterlesen

Bereit anzufangen?

Nuget Downloads 6,357,159Version:2026.11gerade veröffentlicht