Wort- und Zeichen-OCR-Daten in C# (Koordinaten, Konfidenz, Begrenzungsrahmen)
Nach der OCR-Bearbeitung eines Dokuments reicht der extrahierte Text allein oft nicht aus. Um bestimmte Werte auf einer Seite zu finden, Erkennungen von geringer Qualität auszuschließen oder die natürliche Lesereihenfolge bei mehrspaltigen Layouts wiederherzustellen, benötigen Sie Wortkoordinaten, Seitenzahlen, Bereichsindizes und Konfidenzwerte.
Die Sammlungen Words und Characters auf AdvancedOcrResultBase stellen diese Daten bereit. Sowohl ReadDocumentAdvanced() für layoutbewusste Dokumente als auch ReadPhoto() für Kameraeingaben liefern dieselbe Granularität, die über die Standard-OcrResult.Words-Sammlung verfügbar ist.
Dieser Leitfaden behandelt fünf gängige Muster: Iterieren von WORD-Daten, Rekonstruieren der Lesereihenfolge, Filtern nach Konfidenz, Arbeiten auf Zeichenebene und Zuschneiden des Quellbildes aus einem Begrenzungsrahmen.
Starten Sie eine kostenlose 30-Tage-Testversion, um diese Sammlungen in Ihrer Pipeline zu testen.
Schnellstart: Lesen von WORD- und Zeichendaten aus einem OCR-Ergebnis
Rufen Sie ReadDocumentAdvanced (oder ReadPhoto) auf und iterieren Sie result.Words, um in wenigen Zeilen jedes erkannte WORD mit seinen Koordinaten, der Seitenzahl und dem Konfidenzwert zu erhalten.
-
Installieren Sie IronOCR mit NuGet Package Manager
-
Kopieren Sie diesen Codeausschnitt und führen Sie ihn aus.
var result = new IronTesseract().ReadDocumentAdvanced(new OcrInput("scan.png")); foreach (var word in result.Words) Console.WriteLine($"{word.Text} @ ({word.X},{word.Y}) conf:{word.RegionConfidence:P0}"); -
Bereitstellen zum Testen in Ihrer Live-Umgebung
Beginnen Sie noch heute, IronOCR in Ihrem Projekt zu verwenden, mit einer kostenlosen Testversion
Minimaler Arbeitsablauf (3 Schritte)
- Laden Sie die C#-OCR-Bibliothek von NuGet herunter
- Führen Sie eine erweiterte OCR durch mit
ReadDocumentAdvancedoderReadPhotoauf Ihrer Eingabe - Iterieren
result.Wordsoderresult.Charactersfür Koordinaten, Konfidenz und Begrenzungsrahmen
Wie iteriert man Wörter mit Koordinaten und Konfidenz?
Die Words-Sammlung gibt jedes erkannte WORD auf jeder Seite zurück. Jeder Eintrag (ein AdvancedWord oder AdvancedCharacter, beide abgeleitet von AdvancedOcrElement) enthält den Text, die Pixelkoordinaten, die Abmessungen, die Seite, zu der er gehört, den Bereichsindex, der angibt, welcher erkannte Textblock ihn enthält, sowie einen Konfidenzwert für diesen Bereich.
:path=/static-assets/ocr/content-code-examples/how-to/read-document-advanced-iterate-words.cs
using IronOcr;
var ocr = new IronTesseract();
using var input = new OcrInput();
input.LoadImage("receipt.png");
var result = ocr.ReadDocumentAdvanced(input);
foreach (var word in result.Words)
{
Console.WriteLine(
$"Page {word.PageNumber} | " +
$"'{word.Text}' | " +
$"Position: ({word.X}, {word.Y}) | " +
$"Size: {word.Width}x{word.Height} | " +
$"Confidence: {word.Confidence:P1}"
);
}
// ToString() override for diagnostic logging
Console.WriteLine(result.Words.First().ToString());
Imports IronOcr
Dim ocr As New IronTesseract()
Using input As New OcrInput()
input.LoadImage("receipt.png")
Dim result = ocr.ReadDocumentAdvanced(input)
For Each word In result.Words
Console.WriteLine(
$"Page {word.PageNumber} | " &
$"'{word.Text}' | " &
$"Position: ({word.X}, {word.Y}) | " &
$"Size: {word.Width}x{word.Height} | " &
$"Confidence: {word.Confidence:P1}"
)
Next
' ToString() override for diagnostic logging
Console.WriteLine(result.Words.First().ToString())
End Using
PageNumber ist 1-basiert: Seite eins ist 1, nicht 0. Dies unterscheidet sich von den meisten .NET-Sammlungen, die eine nullbasierte Indizierung verwenden. RegionIndex folgt der Standardkonvention mit 0 als Startpunkt.Um Koordinaten an Zeichen- oder Zuschneide-APIs zu übergeben, verwenden Sie die Eigenschaft BoundingBox. Sie fasst Position und Größe in einem einzigen IronSoftware.Drawing.Rectangle zusammen.
Wie stellt man die Lesereihenfolge wieder her?
Bei mehrspaltigen Layouts stimmt die Reihenfolge der Iteration der Words-Sammlung nicht mit der visuellen Lesereihenfolge auf der Seite überein. Wörter werden nach erkannten Regionen gruppiert, sodass Spalten und Tabellenzellen möglicherweise nicht in der richtigen Reihenfolge ausgegeben werden.
Um eine natürliche Reihenfolge von oben nach unten und von links nach rechts wiederherzustellen, sortieren Sie die Sammlung zunächst nach der Y-Koordinate und dann innerhalb jeder Zeile nach der X-Koordinate. Eine geringe Y-Toleranz gruppiert Wörter, die auf derselben Grundlinie liegen.
:path=/static-assets/ocr/content-code-examples/how-to/read-document-advanced-reading-order.cs
using IronOcr;
using System.Linq;
var ocr = new IronTesseract();
using var input = new OcrInput();
input.LoadImage("multi-column-doc.png");
var result = ocr.ReadDocumentAdvanced(input);
int targetPage = 1;
int lineThreshold = 10; // pixel tolerance for grouping same-line words
// Sort by line (Y), then left-to-right (X)
var pageWords = result.Words
.Where(w => w.PageNumber == targetPage)
.OrderBy(w => w.Y / lineThreshold)
.ThenBy(w => w.X)
.ToList();
foreach (var word in pageWords)
{
Console.Write($"{word.Text} ");
}
Console.WriteLine();
Imports IronOcr
Imports System.Linq
Dim ocr As New IronTesseract()
Using input As New OcrInput()
input.LoadImage("multi-column-doc.png")
Dim result = ocr.ReadDocumentAdvanced(input)
Dim targetPage As Integer = 1
Dim lineThreshold As Integer = 10 ' pixel tolerance for grouping same-line words
' Sort by line (Y), then left-to-right (X)
Dim pageWords = result.Words _
.Where(Function(w) w.PageNumber = targetPage) _
.OrderBy(Function(w) w.Y \ lineThreshold) _
.ThenBy(Function(w) w.X) _
.ToList()
For Each word In pageWords
Console.Write($"{word.Text} ")
Next
Console.WriteLine()
End Using
Passen Sie lineThreshold an Ihr Dokument an: 10–15 Pixel eignen sich für Standardtext in 12 pt bei 300 DPI. Bei größeren Überschriften oder handschriftlichen Eingaben ist eine größere Toleranz angebracht. Dieses Muster ist besonders nützlich auf mehrspaltigen Seiten und innerhalb von Tabellenzellen, wo die Engine jede Spalte oder Zelle als eigenen Bereich erkennt.
Wie filtert man Wörter mit geringer Konfidenz heraus?
Um Erkennungen von geringer Qualität auszuschließen, bevor sie Ihre Datenbank, Ihren Suchindex oder die nachgelagerte Extraktion erreichen, filtern Sie die Sammlung nach RegionConfidence. Die Bewertung reicht von 0,0 bis 1,0, wobei höhere Werte ein größeres Vertrauen in den erkannten Text anzeigen.
:path=/static-assets/ocr/content-code-examples/how-to/read-document-advanced-confidence-filter.cs
using IronOcr;
using System.Linq;
var ocr = new IronTesseract();
using var input = new OcrInput();
input.LoadImage("noisy-scan.png");
var result = ocr.ReadDocumentAdvanced(input);
double threshold = 0.75;
var highConfidenceWords = result.Words
.Where(w => w.Confidence >= threshold)
.ToList();
var lowConfidenceWords = result.Words
.Where(w => w.Confidence < threshold)
.ToList();
Console.WriteLine($"Accepted: {highConfidenceWords.Count} words");
Console.WriteLine($"Rejected: {lowConfidenceWords.Count} words");
// Log rejected words for manual review
foreach (var word in lowConfidenceWords)
{
Console.WriteLine(
$" LOW CONF: '{word.Text}' at ({word.X},{word.Y}) — {word.Confidence:P1}"
);
}
Imports IronOcr
Imports System.Linq
Dim ocr = New IronTesseract()
Using input = New OcrInput()
input.LoadImage("noisy-scan.png")
Dim result = ocr.ReadDocumentAdvanced(input)
Dim threshold As Double = 0.75
Dim highConfidenceWords = result.Words _
.Where(Function(w) w.Confidence >= threshold) _
.ToList()
Dim lowConfidenceWords = result.Words _
.Where(Function(w) w.Confidence < threshold) _
.ToList()
Console.WriteLine($"Accepted: {highConfidenceWords.Count} words")
Console.WriteLine($"Rejected: {lowConfidenceWords.Count} words")
' Log rejected words for manual review
For Each word In lowConfidenceWords
Console.WriteLine(
$" LOW CONF: '{word.Text}' at ({word.X},{word.Y}) — {word.Confidence:P1}"
)
Next
End Using
Bei Scans mit unterschiedlicher Qualität (an einigen Stellen klarer Print, an anderen Stellen verschlechterte Abschnitte) verhindert dies, dass Ergebnisse mit geringer Zuverlässigkeit in nachgelagerte Systeme gelangen. Um die Konfidenzwerte im Ausgangstext zu erhöhen, verbessern die Bildvorverarbeitungsfilter (Deskew, DeNoise, Binarize) die Qualität, bevor der Schwellenwert angewendet wird.
Wie iteriert man auf Zeichenebene?
Verwenden Sie für OCR-Verifizierungsüberlagerungen, Zeichenvergleiche mit der Referenzdatenbank oder präzise räumliche Analysen von Formularfeldern die Sammlung Characters. Sie spiegelt Words wider, wird jedoch in einzelne Zeichen aufgelöst.
:path=/static-assets/ocr/content-code-examples/how-to/read-document-advanced-characters.cs
using IronOcr;
var ocr = new IronTesseract();
using var input = new OcrInput();
input.LoadImage("form-field.png");
var result = ocr.ReadDocumentAdvanced(input);
foreach (var ch in result.Characters)
{
Console.WriteLine(
$"'{ch.Text}' | " +
$"Box: ({ch.X}, {ch.Y}, {ch.Width}, {ch.Height}) | " +
$"Page {ch.PageNumber}"
);
}
// ToString() override provides diagnostic-friendly output
Console.WriteLine(result.Characters.First().ToString());
Imports IronOcr
Dim ocr = New IronTesseract()
Using input = New OcrInput()
input.LoadImage("form-field.png")
Dim result = ocr.ReadDocumentAdvanced(input)
For Each ch In result.Characters
Console.WriteLine($"'{ch.Text}' | Box: ({ch.X}, {ch.Y}, {ch.Width}, {ch.Height}) | Page {ch.PageNumber}")
Next
' ToString() override provides diagnostic-friendly output
Console.WriteLine(result.Characters.First().ToString())
End Using
Words als auch Characters werden verzögert berechnet und zwischengespeichert. Der erste Zugriff löst die Berechnung aus; (Bei nachfolgenden Zugriffen wird das zwischengespeicherte Ergebnis zurückgegeben, sodass eine zweite Iteration keine Kosten verursacht.Wie schneidet man das Originalbild mithilfe einer BoundingBox zu?
Um den visuellen Bereich eines WORDs zur Überprüfung, Annotation oder zum Erstellen von beschrifteten Trainingsdaten zu extrahieren, übergeben Sie die Eigenschaft BoundingBox an AnyBitmap.CropRegion(). Der Begrenzungsrahmen entspricht direkt der Position des WORDs im Quellbild.
:path=/static-assets/ocr/content-code-examples/how-to/read-document-advanced-crop-boundingbox.cs
using IronOcr;
using IronSoftware.Drawing;
var ocr = new IronTesseract();
using var input = new OcrInput();
input.LoadImage("invoice.png");
var result = ocr.ReadDocumentAdvanced(input);
// Load the original image for cropping
var originalImage = AnyBitmap.FromFile("invoice.png");
// Find a specific word and crop its region
var targetWord = result.Words.FirstOrDefault(w => w.Text == "Total");
if (targetWord != null)
{
Rectangle cropRect = targetWord.BoundingBox;
AnyBitmap croppedRegion = originalImage.Clone(cropRect);
croppedRegion.SaveAs("total-region.png");
Console.WriteLine(
$"Cropped '{targetWord.Text}' from " +
$"({cropRect.X}, {cropRect.Y}, {cropRect.Width}, {cropRect.Height})"
);
}
Imports IronOcr
Imports IronSoftware.Drawing
Dim ocr As New IronTesseract()
Using input As New OcrInput()
input.LoadImage("invoice.png")
Dim result = ocr.ReadDocumentAdvanced(input)
' Load the original image for cropping
Dim originalImage = AnyBitmap.FromFile("invoice.png")
' Find a specific word and crop its region
Dim targetWord = result.Words.FirstOrDefault(Function(w) w.Text = "Total")
If targetWord IsNot Nothing Then
Dim cropRect As Rectangle = targetWord.BoundingBox
Dim croppedRegion As AnyBitmap = originalImage.Clone(cropRect)
croppedRegion.SaveAs("total-region.png")
Console.WriteLine(
$"Cropped '{targetWord.Text}' from " &
$"({cropRect.X}, {cropRect.Y}, {cropRect.Width}, {cropRect.Height})"
)
End If
End Using
Dieses Muster lässt sich auf Massenoperationen skalieren: jedes WORD durchlaufen, jedes Feld zuschneiden und einen beschrifteten Datensatz für das Training benutzerdefinierter Schriftarten oder nachgelagerte ML-Pipelines exportieren. Die Koordinaten beziehen sich auf das Bild nach der Vorverarbeitung; Wenn Filter wie EnhanceResolution die Abmessungen geändert haben, passt der Begrenzungsrahmen zum verarbeiteten Bild, nicht zum Original auf der Festplatte.
Nächste Schritte
Die erweiterte Pipeline bietet dieselben räumlichen Details wie IronTesseract.Read(), zusätzlich mit intelligenter Layout-Unterstützung. Verwandte Themen:
- Anleitung zur Tabellenextraktion: behandelt die Eigenschaft
TablesaufReadDocumentAdvancedfür strukturierte Zelldaten. - Lesen von OCR-Ergebnissen: Wortdaten für die Standard-Pipeline.
- Bildqualitätskorrektur: Vorverarbeitungsfilter, die die Konfidenzwerte erhöhen.
- OCR-Tutorial: Komplette Einrichtung für neue Benutzer.
Starten Sie Ihre kostenlose 30-Tage-Testversion oder sehen Sie sich die Lizenzoptionen an.
Häufig gestellte Fragen
Was ist Erweiterte OCR in C#?
Erweiterte OCR in C# bezieht sich auf den Prozess der Verwendung von Optical Character Recognition, um detaillierte Wort- und Zeichendaten einschließlich Koordinaten, Vertrauensniveaus und Begrenzungsrahmen mithilfe der erweiterten Pipeline von IronOCR zu extrahieren.
Wie kann ich Wortdaten mit IronOCR abrufen?
Sie können Wortdaten in IronOCR abrufen, indem Sie die AdvancedWord-Sammlung durchgehen, die detaillierte Informationen über die Position jedes Wortes und den Vertrauenswert im gescannten Dokument bereitstellt.
Welche Bedeutung haben Begrenzungsrahmen in der OCR?
Begrenzungsrahmen sind in der OCR entscheidend, da sie den genauen Ort und die Dimensionen der erkannten Textelemente auf dem gescannten Bild definieren und so eine präzise Textextraktion und Bildmanipulation ermöglichen.
Kann ich OCR-Ergebnisse nach Vertrauenswert filtern?
Ja, mit IronOCR können Sie OCR-Ergebnisse nach Vertrauenswert filtern, um sicherzustellen, dass nur Text mit hoher Erkennungsgenauigkeit für eine weitere Verarbeitung in Betracht gezogen wird.
Wie rekonstruiere ich die Leserichtung in OCR-Ergebnissen?
Die Leserichtung in OCR-Ergebnissen kann rekonstruiert werden, indem die Reihenfolge der von IronOCR bereitgestellten AdvancedWord- und AdvancedCharacter-Objekte analysiert wird, die den natürlichen Lesefluss des Dokuments widerspiegeln.
Ist es möglich, Quellbilder mit IronOCR zuzuschneiden?
Mit IronOCR können Sie Quellbilder basierend auf der Analyse von Textdaten zuschneiden, die die Begrenzungsrahmen und Koordinaten der erkannten Wörter und Zeichen umfassen.
Was sind die AdvancedWord- und AdvancedCharacter-Sammlungen?
Die AdvancedWord- und AdvancedCharacter-Sammlungen in IronOCR sind Datenstrukturen, die detaillierte Informationen über jedes erkannte Wort und Zeichen speichern, einschließlich ihrer Koordinaten, Vertrauenswerte und Begrenzungsrahmen.
Wie handhabt IronOCR die Zeichenerkennung?
IronOCR handhabt die Zeichenerkennung, indem es eine erweiterte Pipeline nutzt, die die Merkmale jedes Zeichens analysiert und detaillierte Daten wie dessen Position, Größe und Erkennungsvertrauen bereitstellt.
Welche Arten von Dokumenten können mit IronOCR bearbeitet werden?
IronOCR kann eine breite Palette von Dokumenttypen bearbeiten, einschließlich PDFs, gescannter Bilder und Fotos, und dabei Textdaten mit hoher Genauigkeit und Detailtreue extrahieren.
Gibt es eine kostenlose Testversion von IronOCR?
Ja, Iron Software bietet eine kostenlose Testversion von IronOCR an, die es den Benutzern ermöglicht, die Funktionen und Fähigkeiten zu testen, bevor sie eine Kaufentscheidung treffen.

