Wort- und Zeichen-OCR-Daten in C# (Koordinaten, Konfidenz, Begrenzungsrahmen)

This article was translated from English: Does it need improvement?
Translated
View the article in English

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.

NuGet Mit NuGet installieren

PM >  Install-Package IronOcr

Schauen Sie sich IronOCR auf NuGet für eine schnelle Installation an. Mit über 10 Millionen Downloads transformiert es die PDF-Entwicklung mit C#. Sie können auch das DLL oder den Windows Installer herunterladen.

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.

  1. Installieren Sie IronOCR mit NuGet Package Manager

    PM > Install-Package IronOcr
  2. 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}");
  3. Bereitstellen zum Testen in Ihrer Live-Umgebung

    Beginnen Sie noch heute, IronOCR in Ihrem Projekt zu verwenden, mit einer kostenlosen Testversion

    arrow pointer


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
$vbLabelText   $csharpLabel

TippsPageNumber 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
$vbLabelText   $csharpLabel

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
$vbLabelText   $csharpLabel

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
$vbLabelText   $csharpLabel

Hinweis:Sowohl 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
$vbLabelText   $csharpLabel

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:

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.

Darrius Serrant
Full-Stack-Software-Ingenieur (WebOps)

Darrius Serrant hat einen Bachelor-Abschluss in Informatik von der University of Miami und arbeitet als Full-Stack-WebOps-Marketing-Ingenieur bei Iron Software. Seit seiner Jugend vom Programmieren angezogen, sah er die Informatik als sowohl mysteriös als auch zugänglich, was es zum perfekten Medium für Kreativität und Problemlösung ...

Weiterlesen
Bereit anzufangen?
Nuget Downloads 6,136,090 | Version: 2026.7 gerade veröffentlicht
Still Scrolling Icon

Scrollst du immer noch?

Sie brauchen schnell einen Beweis? PM > Install-Package IronOcr
Führen Sie ein Beispiel aus und beobachten Sie, wie Ihr Bild zu durchsuchbarem Text wird.