Données OCR de mots et de caractères en C# (coordonnées, confiance, cadres de sélection)

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

Après avoir appliqué l'OCR à un document, le texte extrait seul ne suffit souvent pas. Pour localiser des valeurs spécifiques sur une page, exclure les détections de mauvaise qualité ou reconstituer l'ordre de lecture naturel sur des mises en page à plusieurs colonnes, vous avez besoin de coordonnées par mot, de numéros de page, d'indices de région et de scores de confiance.

Les collections Words et Characters sur AdvancedOcrResultBase exposent ces données. Tant ReadDocumentAdvanced() pour les documents tenant compte de la mise en page que ReadPhoto() pour les entrées de caméra renvoient la même granularité que celle disponible via la collection standard OcrResult.Words.

Ce guide présente cinq modèles courants : itération des données WORD, reconstruction de l'ordre de lecture, filtrage par niveau de confiance, traitement au niveau des caractères et recadrage de l'image source à partir d'un cadre de sélection.

Commencez un essai gratuit de 30 jours pour tester ces collections dans votre pipeline.

NuGet Installer avec NuGet

PM >  Install-Package IronOcr

Consultez IronOCR sur NuGet pour une installation rapide. Avec plus de 10 millions de téléchargements, il transforme le développement PDF avec C#. Vous pouvez également télécharger le DLL ou l'installateur Windows.

Guide de démarrage rapide : Lire des données de WORD et de caractères à partir d'un résultat OCR

Appelez ReadDocumentAdvanced (ou ReadPhoto) et itérez result.Words pour obtenir en quelques lignes chaque WORD reconnu avec ses coordonnées, son numéro de page et son score de confiance.

  1. Installez IronOCR avec le Gestionnaire de Packages NuGet

    PM > Install-Package IronOcr
  2. Copiez et exécutez cet extrait de code.

    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. Déployez pour tester sur votre environnement de production.

    Commencez à utiliser IronOCR dans votre projet dès aujourd'hui avec un essai gratuit

    arrow pointer


Comment itérer des mots avec des coordonnées et un niveau de confiance ?

La collection Words renvoie tous les mots détectés sur chaque page. Chaque entrée (un AdvancedWord ou AdvancedCharacter, tous deux héritant de AdvancedOcrElement) expose le texte, les coordonnées en pixels, les dimensions, la page à laquelle elle appartient, l'index de région identifiant le bloc de texte détecté qui la contient, ainsi qu'un score de confiance pour cette région.

: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} | " +
        $"Region {word.RegionIndex} | " +
        $"'{word.Text}' | " +
        $"Position: ({word.X}, {word.Y}) | " +
        $"Size: {word.Width}x{word.Height} | " +
        $"Confidence: {word.RegionConfidence: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} | " &
            $"Region {word.RegionIndex} | " &
            $"'{word.Text}' | " &
            $"Position: ({word.X}, {word.Y}) | " &
            $"Size: {word.Width}x{word.Height} | " &
            $"Confidence: {word.RegionConfidence:P1}"
        )
    Next
End Using

' ToString() override for diagnostic logging
Console.WriteLine(result.Words.First().ToString())
$vbLabelText   $csharpLabel

ConseilsPageNumber est basé sur 1 : la première page est 1, et non 0. Cela diffère de la plupart des collections .NET, qui utilisent un indexage à partir de zéro. RegionIndex suit la convention standard basée sur 0.

Pour transmettre des coordonnées aux API de dessin ou de recadrage, utilisez la propriété BoundingBox. Elle regroupe la position et la taille en un seul IronSoftware.Drawing.Rectangle.

Comment reconstituer l'ordre de lecture ?

Dans les mises en page à plusieurs colonnes, l'ordre d'itération de la collection Words ne correspond pas à l'ordre de lecture visuel sur la page. Les mots sont regroupés par région détectée, ce qui signifie que les colonnes et les cellules du tableau peuvent être renvoyées dans un ordre différent de celui d'origine.

Pour recréer un ordre naturel de haut en bas et de gauche à droite, triez d'abord la collection par coordonnée Y, puis par X au sein de chaque ligne. Une petite tolérance Y regroupe les WORDs situés sur la même ligne de base.

: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

Ajustez lineThreshold en fonction de votre document : une valeur de 10 à 15 pixels convient pour un texte standard de 12 points à 300 ppp. Les titres plus longs ou les saisies manuscrites nécessitent une plus grande tolérance. Ce modèle est particulièrement utile sur les pages à plusieurs colonnes et à l'intérieur des cellules de tableau, où le moteur détecte chaque colonne ou cellule comme une région distincte.

Comment filtrez-vous les mots à faible confiance ?

Pour exclure les détections de mauvaise qualité avant qu'elles n'atteignent votre base de données, votre index de recherche ou l'extraction en aval, filtrez la collecte par RegionConfidence. Le score varie de 0,0 à 1,0, les valeurs les plus élevées indiquant un niveau de confiance plus élevé dans le texte détecté.

: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.RegionConfidence >= threshold)
    .ToList();

var lowConfidenceWords = result.Words
    .Where(w => w.RegionConfidence < 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.RegionConfidence:P1}"
    );
}
Imports IronOcr
Imports System.Linq

Dim ocr As New IronTesseract()
Using input As 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.RegionConfidence >= threshold) _
        .ToList()

    Dim lowConfidenceWords = result.Words _
        .Where(Function(w) w.RegionConfidence < 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.RegionConfidence:P1}"
        )
    Next
End Using
$vbLabelText   $csharpLabel

Pour les numérisations de qualité variable (impression nette dans certaines zones, sections dégradées ailleurs), cela empêche les résultats peu fiables d'atteindre les systèmes en aval. Pour augmenter les scores de confiance au niveau de la source, les filtres de prétraitement d'image (Deskew, DeNoise, Binarize) améliorent la qualité avant l'application du seuil.

Comment procédez-vous à l'itération au niveau des caractères ?

Pour les superpositions de vérification OCR, la comparaison au niveau des caractères par rapport à la vérité de référence ou l'analyse spatiale précise des champs de formulaire, utilisez la collection Characters. Elle reflète Words mais se résout en caractères individuels.

: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

Veuillez noterWords et Characters sont tous deux calculés de manière différée et mis en cache. Le premier accès déclenche le calcul ; les accès suivants renvoient le résultat mis en cache, de sorte qu'une deuxième itération ne coûte rien.

Comment recadrer l'image d'origine à l'aide d'un BoundingBox ?

Pour extraire la région visuelle d'un WORD à des fins de vérification, d'annotation ou de création de données d'entraînement étiquetées, transmettez la propriété BoundingBox à AnyBitmap.CropRegion(). Le cadre de sélection correspond directement à la position du WORD dans l'image source.

: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.CropRegion(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.CropRegion(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

Ce modèle s'adapte aux opérations en masse : itérer sur chaque WORD, recadrer chaque boîte et exporter un ensemble de données étiquetées pour l'entraînement de polices personnalisées ou des pipelines d'apprentissage automatique en aval. Les coordonnées correspondent à l'image post-traitement ; Si des filtres tels que EnhanceResolution ont modifié les dimensions, le cadre de sélection correspond à l'image traitée, et non à l'original sur le disque.

Prochaines étapes

Le pipeline avancé offre le même niveau de détail spatial que IronTesseract.Read(), avec en plus des fonctionnalités avancées de mise en page. Sujets connexes :

Commencez votre essai de 30 jours gratuit ou consultez les options de licence.

Questions Fréquemment Posées

Qu'est-ce que l'OCR et pourquoi est-il important ?

L'OCR, ou reconnaissance optique de caractères, est une technologie qui convertit différents types de documents, tels que les documents papier numérisés, les PDFs ou les images capturées par un appareil photo numérique, en données modifiables et consultables. L'OCR est important car il automatise l'extraction de données, réduit la saisie manuelle de données, et rend l'information facilement accessible et modifiable.

Comment IronOCR améliore-t-il le processus d'OCR ?

IronOCR améliore le processus d'OCR en fournissant des capacités de reconnaissance de texte précises et rapides. Il prend en charge plusieurs langues et inclut des fonctionnalités telles que le prétraitement d'images pour améliorer l'exactitude de la reconnaissance de texte.

IronOCR peut-il gérer des documents multipages ?

Oui, IronOCR peut traiter des documents multi-pages efficacement, en extrayant le texte de chaque page et en permettant aux utilisateurs de travailler avec l'ensemble du document comme une unité cohérente.

Quels formats de fichiers IronOCR supporte-t-il ?

IronOCR prend en charge une large gamme de formats de fichier, y compris PDF, TIFF, JPEG, PNG, et BMP, ce qui donne de la flexibilité quant aux types de documents qu'il peut traiter.

IronOCR est-il adapté pour reconnaître le texte dans des images de faible qualité ?

Oui, IronOCR inclut des fonctionnalités avancées de prétraitement des images qui améliorent la qualité des images basse résolution ou de mauvaise qualité, augmentant l'exactitude de la reconnaissance de texte.

IronOCR prend-elle en charge plusieurs langues ?

IronOCR prend en charge plusieurs langues, ce qui en fait un outil polyvalent pour des applications globales nécessitant la reconnaissance de texte dans différentes langues.

IronOCR peut-il être intégré dans des applications existantes ?

IronOCR est conçu pour être facilement intégré dans les applications existantes en utilisant C#, permettant aux développeurs d'ajouter des fonctionnalités OCR à leur logiciel avec un minimum d'effort.

Quels sont les avantages d'utiliser IronOCR pour la gestion des documents ?

Utiliser IronOCR pour la gestion des documents rationalise le flux de travail en convertissant les documents numérisés en texte modifiable et consultable, réduisant le besoin de saisie manuelle des données et améliorant l'accessibilité des documents.

Comment IronOCR peut-il améliorer la précision des données ?

IronOCR améliore la précision des données grâce à ses algorithmes de reconnaissance avancés et ses fonctionnalités de correction d'image, garantissant que le processus d'extraction de texte est à la fois fiable et précis.

Y a-t-il un essai gratuit disponible pour IronOCR ?

Oui, Iron Software propose un essai gratuit d'IronOCR, permettant aux utilisateurs de tester ses fonctionnalités et capacités avant de prendre une décision d'achat.

Darrius Serrant
Ingénieur logiciel Full Stack (WebOps)

Darrius Serrant est titulaire d'un baccalauréat en informatique de l'université de Miami et travaille comme ingénieur marketing WebOps Full Stack chez Iron Software. Attiré par le codage dès son plus jeune âge, il a vu l'informatique comme à la fois mystérieuse et accessible, en faisant le ...

Lire la suite
Prêt à commencer?
Nuget Téléchargements 5,887,215 | Version : 2026.5 just released
Still Scrolling Icon

Vous faites encore défiler ?

Vous voulez une preuve rapidement ? PM > Install-Package IronOcr
lancez un échantillon regardez votre image se transformer en texte consultable.