Dados OCR de palavras e caracteres em C# (coordenadas, confiança, caixas delimitadoras)

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

Após executar o OCR em um documento, o texto extraído por si só geralmente não é suficiente. Para localizar valores específicos em uma página, excluir detecções de baixa qualidade ou reconstruir a ordem de leitura natural em layouts de várias colunas, você precisa de coordenadas por palavra, números de página, índices de região e pontuações de confiança.

As coleções Words e Characters em AdvancedOcrResultBase expõem esses dados. Tanto ReadDocumentAdvanced() para documentos com reconhecimento de layout quanto ReadPhoto() para entrada de câmera retornam a mesma granularidade disponível por meio da coleção padrão OcrResult.Words.

Este guia aborda cinco padrões comuns: iteração de dados de palavras, reconstrução da ordem de leitura, filtragem por confiança, trabalho no nível do caractere e recorte da imagem de origem a partir de uma caixa delimitadora.

Inicie um teste gratuito de 30 dias para experimentar essas coleções em seu pipeline.

NuGet Instalar com NuGet

PM >  Install-Package IronOcr

Confira o IronOCR no NuGet para uma instalação rápida. Com mais de 10 milhões de downloads, ele está transformando o desenvolvimento de PDFs com C#. Você também pode baixar o arquivo DLL ou o instalador para Windows .

Início rápido: Ler dados de palavras e caracteres de um resultado de OCR

Chame ReadDocumentAdvanced (ou ReadPhoto) e repita result.Words para obter todas as palavras reconhecidas com suas coordenadas, número da página e pontuação de confiança em poucas linhas.

  1. Instale IronOCR com o Gerenciador de Pacotes NuGet

    PM > Install-Package IronOcr
  2. Copie e execute este trecho de código.

    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. Implante para testar em seu ambiente de produção.

    Comece a usar IronOCR em seu projeto hoje com uma avaliação gratuita

    arrow pointer


Como iterar palavras com coordenadas e confiança?

A coleção Words retorna todas as palavras detectadas em todas as páginas. Cada entrada (um AdvancedWord ou AdvancedCharacter, ambos herdando de AdvancedOcrElement) expõe o texto, as coordenadas de pixel, as dimensões, a página à qual pertence, o índice da região que identifica qual bloco de texto detectado a contém e uma pontuação de confiança para essa região.

: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

PontasPageNumber é baseado em 1: a página um é 1, não 0. Isso difere da maioria das coleções .NET , que usam indexação baseada em zero. RegionIndex segue a convenção padrão baseada em 0.

Para passar coordenadas para APIs de desenho ou recorte, use a propriedade BoundingBox. Ele agrupa posição e tamanho em um único IronSoftware.Drawing.Rectangle.

Como reconstruir a ordem de leitura?

Em layouts de várias colunas, a ordem de iteração da coleção Words não corresponde à ordem de leitura visual na página. As palavras são agrupadas por região detectada, portanto, colunas e células da tabela podem ser retornadas fora de sequência.

Para reconstruir uma ordem natural de cima para baixo e da esquerda para a direita, ordene a coleção primeiro pela coordenada Y e, em seguida, pela coordenada X dentro de cada linha. Uma pequena tolerância em Y agrupa palavras que estão na mesma linha 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

Ajuste lineThreshold para corresponder ao seu documento: 10–15 pixels funcionam para texto padrão de 12pt a 300 DPI. Títulos maiores ou entradas manuscritas exigem uma tolerância maior. Esse padrão é especialmente útil em páginas com várias colunas e dentro de células de tabelas, onde o mecanismo detecta cada coluna ou célula como sua própria região.

Como filtrar palavras de baixa confiança?

Para excluir detecções de baixa qualidade antes que elas cheguem ao seu banco de dados, índice de pesquisa ou extração subsequente, filtre a coleção por RegionConfidence. A pontuação varia de 0,0 a 1,0, sendo que valores mais altos indicam maior confiança no texto detectado.

: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

Para digitalizações com qualidade mista (impressão nítida em algumas áreas, seções degradadas em outras), isso impede que resultados de baixa confiabilidade cheguem aos sistemas subsequentes. Para aumentar os níveis de confiança na origem, os filtros de pré-processamento de imagem (Desvio de Inclinação, Redução de Ruído, Binarização) melhoram a qualidade antes da aplicação do limiar.

Como iterar no nível do personagem?

Para sobreposições de verificação OCR , comparação em nível de caractere com a verdade fundamental ou análise espacial precisa em campos de formulário, use a coleção Characters. É um reflexo de Words, mas se resolve em caracteres individuais.

: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

ObserveAmbos Words e Characters são computados preguiçosamente e armazenados em cache. O primeiro acesso inicia o cálculo; Acessos subsequentes retornam o resultado em cache, portanto, iterar uma segunda vez não custa nada.

Como recortar a imagem original usando uma caixa delimitadora?

Para extrair a região visual de uma palavra para verificação, anotação ou construção de dados de treinamento rotulados, passe a propriedade BoundingBox para AnyBitmap.CropRegion(). A caixa delimitadora corresponde diretamente à posição da palavra na imagem de origem.

: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

Esse padrão é escalável para operações em massa: iterar por cada palavra, recortar cada caixa e exportar um conjunto de dados rotulados para treinamento de fontes personalizadas ou pipelines de aprendizado de máquina subsequentes. As coordenadas refletem a imagem após o pré-processamento; Se filtros como EnhanceResolution alterarem as dimensões, a caixa delimitadora corresponderá à imagem processada, e não à original no disco.

Próximos passos

O pipeline avançado fornece o mesmo nível de detalhamento espacial que IronTesseract.Read(), com inteligência de layout adicional. Tópicos relacionados:

Inicie seu teste gratuito de 30 dias ou veja as opções de licenciamento .

Perguntas frequentes

O que é OCR e por que é importante?

OCR, ou Reconhecimento Óptico de Caracteres, é uma tecnologia que converte diferentes tipos de documentos, como documentos de papel escaneados, PDFs ou imagens capturadas por uma câmera digital, em dados editáveis e pesquisáveis. OCR é importante porque automatiza a extração de dados, reduz a inserção manual de dados, e torna a informação facilmente acessível e editável.

Como o IronOCR aprimora o processo de OCR?

O IronOCR melhora o processo de OCR fornecendo capacidades de reconhecimento de texto precisas e de alta velocidade. Ele suporta múltiplos idiomas e inclui recursos como pré-processamento de imagem para melhorar a precisão do reconhecimento de texto.

O IronOCR consegue lidar com documentos de várias páginas?

Sim, o IronOCR pode processar documentos de várias páginas de forma eficiente, extraindo texto de cada página e permitindo que os usuários trabalhem com o documento inteiro como uma unidade coesa.

Quais formatos de arquivo o IronOCR suporta?

O IronOCR suporta uma ampla gama de formatos de arquivo, incluindo PDF, TIFF, JPEG, PNG e BMP, permitindo flexibilidade nos tipos de documentos que pode processar.

O IronOCR é adequado para reconhecer texto em imagens de baixa qualidade?

Sim, o IronOCR inclui recursos avançados de pré-processamento de imagem que melhoram a qualidade de imagens de baixa resolução ou má qualidade, aumentando a precisão do reconhecimento de texto.

O IronOCR suporta vários idiomas?

O IronOCR suporta múltiplos idiomas, tornando-se uma ferramenta versátil para aplicações globais que requerem reconhecimento de texto em diferentes idiomas.

O IronOCR pode ser integrado em aplicações existentes?

O IronOCR é projetado para ser facilmente integrado em aplicações existentes usando C#, permitindo que os desenvolvedores adicionem funcionalidades de OCR ao seu software com esforço mínimo.

Quais são os benefícios de usar o IronOCR para gestão de documentos?

Usar o IronOCR para gestão de documentos simplifica o fluxo de trabalho convertendo documentos escaneados em texto pesquisável e editável, reduzindo a necessidade de inserção manual de dados e melhorando a acessibilidade dos documentos.

Como o IronOCR pode melhorar a precisão dos dados?

O IronOCR melhora a precisão dos dados através de seus algoritmos avançados de reconhecimento e recursos de correção de imagem, assegurando que o processo de extração de texto seja tanto confiável quanto preciso.

Há uma avaliação gratuita disponível para o IronOCR?

Sim, o Iron Software oferece uma avaliação gratuita do IronOCR, permitindo que os usuários testem seus recursos e capacidades antes de tomar uma decisão de compra.

Darrius Serrant
Engenheiro de Software Full Stack (WebOps)

Darrius Serrant é bacharel em Ciência da Computação pela Universidade de Miami e trabalha como Engenheiro de Marketing WebOps Full Stack na Iron Software. Atraído por programação desde jovem, ele via a computação como algo misterioso e acessível ao mesmo tempo, tornando-a o meio ...

Leia mais
Pronto para começar?
Nuget Baixar 5,887,215 | Versão: 2026.5 just released
Still Scrolling Icon

Ainda está rolando a tela?

Quer provas rápidas? PM > Install-Package IronOcr
executar um exemplo Veja sua imagem se transformar em texto pesquisável.