Ir para o conteúdo do rodapé
UTILIZANDO O IRONOCR

Tutorial do CodeProject sobre OCR em C#: Extrair texto de imagens com IronOCR

O reconhecimento óptico de caracteres (OCR) em C# permite extrair texto legível por máquina de documentos digitalizados, arquivos de imagem e arquivos TIFF dentro de aplicações .NET. Com o IronOCR, uma biblioteca OCR nativa for .NET, você instala um pacote NuGet e começa a ler texto de imagens em poucas linhas de código -- sem serviço externo, sem dependência de tempo de execução, sem taxa por chamada de API.

Inicie seu teste gratuito do IronOCR para acompanhar os exemplos de código abaixo.

Como Você Instala o IronOCR em um Projeto .NET?

A maneira mais rápida de adicionar OCR a um projeto .NET 10 é através do Gerenciador de Pacotes NuGet. Abra um terminal no diretório do seu projeto e execute o comando CLI do dotnet, ou use o Console do Gerenciador de Pacotes dentro do Visual Studio:

# .NET CLI
dotnet add package IronOcr

# Package Manager Console
Install-Package IronOcr
# .NET CLI
dotnet add package IronOcr

# Package Manager Console
Install-Package IronOcr
SHELL

Após a instalação, o gerenciador de pacotes NuGet baixa todas as assemblies necessárias e configura as referências automaticamente. IronOCR tem como alvo .NET Framework 4.6.2+, .NET Core 3.1+ e .NET 5 até .NET 10, de modo que funciona em aplicativos de console, serviços ASP.NET Core, aplicações WPF e Funções do Azure.

Você não precisa registrar uma chave de licença para testar localmente -- uma marca d'água de teste aparecerá na saída até que uma licença seja aplicada. Adicione a diretiva using e, quando estiver pronto para produção, passe sua chave uma vez na inicialização:

using IronOcr;

// Apply license key before any OCR calls (production only)
IronOcr.License.LicenseKey = "YOUR-LICENSE-KEY";
using IronOcr;

// Apply license key before any OCR calls (production only)
IronOcr.License.LicenseKey = "YOUR-LICENSE-KEY";
$vbLabelText   $csharpLabel

Veja a página de licenciamento do IronOCR para detalhes de preços e ativação.

Como Extrair Texto de um Arquivo de Imagem?

O fluxo de trabalho principal do OCR envolve três objetos: IronTesseract (o motor), OcrInput (o contêiner de entrada) e OcrResult (a saída). O exemplo abaixo lê um PNG e imprime o texto reconhecido no console.

using IronOcr;

var ocr = new IronTesseract();

using var input = new OcrInput();
input.LoadImage("sample-document.png");

OcrResult result = ocr.Read(input);
Console.WriteLine(result.Text);
using IronOcr;

var ocr = new IronTesseract();

using var input = new OcrInput();
input.LoadImage("sample-document.png");

OcrResult result = ocr.Read(input);
Console.WriteLine(result.Text);
$vbLabelText   $csharpLabel

Saída de Reconhecimento Óptico de Caracteres

OCR no tutorial do CodeProject em C#: Extrair texto de imagens com IronOCR: Imagem 1 - Captura de tela da saída do OCR

IronTesseract envolve o motor Tesseract 5 com padrões compatíveis com .NET e gestão automática de modelos. OcrInput.LoadImage aceita arquivos PNG, JPEG, BMP, GIF, TIFF e WebP, então raramente é necessário converter formatos antes de passar uma imagem para o motor.

A propriedade OcrResult.Text retorna uma string simples de todos os caracteres reconhecidos unidos por quebras de linha. Para um acesso mais rico -- caixas de delimitação de palavras, pontuações de confiança, texto por parágrafo -- navegue pelas coleções result.Pages, result.Paragraphs, result.Words e result.Characters.

Propriedades chave que vale a pena conhecer:

  • result.Pages[0].Text -- texto de uma única página
  • result.Words[n].Text e result.Words[n].Confidence -- precisão por palavra (0.0 -- 1.0)
  • result.Pages[0].Paragraphs -- segmentação de parágrafos para extração estruturada

Você também pode chamar ocr.ReadAsync(input) para manter a thread da interface do usuário livre em aplicações de desktop ou web.

Como Processar Documentos Escaneados e Arquivos TIFF?

Arquivos TIFF de múltiplas páginas são comuns em fluxos de trabalho de digitalização de documentos. O IronOCR os trata com LoadImageFrames, que permite escolher exatamente quais frames (páginas) processar -- útil quando você só precisa de um subconjunto de um grande arquivo.

using IronOcr;

var ocr = new IronTesseract();

using var input = new OcrInput();
int[] pageIndices = { 0, 1, 2 };
input.LoadImageFrames("scanned-documents.tiff", pageIndices);

// Correct skew and remove noise before reading
input.Deskew();
input.DeNoise();

OcrResult result = ocr.Read(input);

foreach (var page in result.Pages)
{
    Console.WriteLine($"Page {page.PageNumber}:");
    Console.WriteLine(page.Text);
}
using IronOcr;

var ocr = new IronTesseract();

using var input = new OcrInput();
int[] pageIndices = { 0, 1, 2 };
input.LoadImageFrames("scanned-documents.tiff", pageIndices);

// Correct skew and remove noise before reading
input.Deskew();
input.DeNoise();

OcrResult result = ocr.Read(input);

foreach (var page in result.Pages)
{
    Console.WriteLine($"Page {page.PageNumber}:");
    Console.WriteLine(page.Text);
}
$vbLabelText   $csharpLabel

Saída de OCR de Arquivo TIFF de Múltiplas Páginas

OCR no tutorial do CodeProject em C#: Extrair texto de imagens com IronOCR: Imagem 2 - Saída de OCR para TIFF de múltiplas páginas

Deskew gira a imagem para corrigir qualquer inclinação introduzida por scanners de mesa. DeNoise remove manchas e artefatos JPEG que confundem o motor Tesseract. Juntos, esses dois filtros de pré-processamento melhoram significativamente a precisão de reconhecimento em digitalizações de baixa qualidade.

Filtros OcrInput adicionais disponíveis para materiais de origem difíceis:

  • input.Sharpen() -- aumenta o contraste de bordas para imagens desfocadas
  • input.Binarize() -- converte para preto e branco para documentos com qualidade de fax
  • input.Scale(200) -- aumenta o tamanho de pequenas imagens para melhor separação de caracteres
  • input.Rotate(90) -- corrige orientações de documentos rotacionados

Veja o guia de filtros de imagem IronOCR para uma lista completa de opções de pré-processamento e quando aplicá-las.

Como Configurar o Suporte a Idiomas para OCR?

Por padrão, IronOCR lê texto em inglês. Para processar documentos em outros idiomas, instale o pacote de idioma NuGet correspondente e defina a propriedade Language na instância de IronTesseract.

dotnet add package IronOcr.Languages.German
dotnet add package IronOcr.Languages.French
dotnet add package IronOcr.Languages.Japanese
dotnet add package IronOcr.Languages.German
dotnet add package IronOcr.Languages.French
dotnet add package IronOcr.Languages.Japanese
SHELL

Depois configure o motor e, para documentos bilíngues, adicione um idioma secundário:

using IronOcr;
using IronOcr.Languages;

var ocr = new IronTesseract();
ocr.Language = OcrLanguage.German;

// For bilingual documents (e.g. Canadian forms, EU directives)
ocr.AddSecondaryLanguage(OcrLanguage.French);

using var input = new OcrInput();
input.LoadImage("german-invoice.png");

OcrResult result = ocr.Read(input);
Console.WriteLine(result.Text);
using IronOcr;
using IronOcr.Languages;

var ocr = new IronTesseract();
ocr.Language = OcrLanguage.German;

// For bilingual documents (e.g. Canadian forms, EU directives)
ocr.AddSecondaryLanguage(OcrLanguage.French);

using var input = new OcrInput();
input.LoadImage("german-invoice.png");

OcrResult result = ocr.Read(input);
Console.WriteLine(result.Text);
$vbLabelText   $csharpLabel

IronOCR suporta mais de 125 idiomas, cada um distribuído como um pacote NuGet leve separado. Isso mantém seu binário de produção pequeno -- somente os dados de idioma que sua aplicação realmente precisa estão incluídos. O motor mistura modelos de linguagem primária e secundária durante o reconhecimento quando você chama AddSecondaryLanguage.

Como Lidar com Erros de OCR e Melhorar Resultados de Reconhecimento?

Aplicações de produção precisam de tratamento de erros em torno do pipeline OCR. Problemas de qualidade de imagem, arquivos ausentes ou formatos não suportados podem causar exceções. Envolver a chamada em um bloco try/catch fornece um caminho limpo para recuperação.

using IronOcr;

var ocr = new IronTesseract();
ocr.Language = OcrLanguage.English;

try
{
    using var input = new OcrInput();
    input.LoadImage("document.png");
    input.DeNoise();
    input.Deskew();

    OcrResult result = ocr.Read(input);

    if (result.Text.Length > 0)
    {
        Console.WriteLine("Recognised text:");
        Console.WriteLine(result.Text);
    }
    else
    {
        Console.WriteLine("No text was detected in the image.");
    }
}
catch (Exception ex)
{
    Console.WriteLine($"OCR error: {ex.Message}");
}
using IronOcr;

var ocr = new IronTesseract();
ocr.Language = OcrLanguage.English;

try
{
    using var input = new OcrInput();
    input.LoadImage("document.png");
    input.DeNoise();
    input.Deskew();

    OcrResult result = ocr.Read(input);

    if (result.Text.Length > 0)
    {
        Console.WriteLine("Recognised text:");
        Console.WriteLine(result.Text);
    }
    else
    {
        Console.WriteLine("No text was detected in the image.");
    }
}
catch (Exception ex)
{
    Console.WriteLine($"OCR error: {ex.Message}");
}
$vbLabelText   $csharpLabel

Algumas configurações adicionais que ajudam quando a precisão é menor que a esperada:

  • ocr.Configuration.PageSegmentationMode = TesseractPageSegmentationMode.Auto -- permite que o Tesseract escolha automaticamente entre layouts de coluna única, múltiplas colunas e palavra única
  • ocr.Configuration.ReadBarCodes = false -- desativa a detecção de código de barras se você estiver processando documentos apenas de texto e desejar um processamento mais rápido
  • ocr.Configuration.TesseractVersion = TesseractVersion.Tesseract5 -- garante que você use o motor mais rápido disponível

Para formulários estruturados onde os campos aparecem em posições previsíveis, use OCR baseado em região para ler apenas as áreas que importam:

using IronOcr;
using IronSoftware.Drawing;

var ocr = new IronTesseract();

using var input = new OcrInput();
var region = new CropRectangle(x: 50, y: 200, width: 600, height: 100);
input.LoadImage("form.png", region);

OcrResult result = ocr.Read(input);
Console.WriteLine(result.Text);
using IronOcr;
using IronSoftware.Drawing;

var ocr = new IronTesseract();

using var input = new OcrInput();
var region = new CropRectangle(x: 50, y: 200, width: 600, height: 100);
input.LoadImage("form.png", region);

OcrResult result = ocr.Read(input);
Console.WriteLine(result.Text);
$vbLabelText   $csharpLabel

Limitar o reconhecimento a um retângulo de corte reduz o tempo de processamento em até 90% em imagens grandes. Esta técnica é bem adequada para extração de números de faturas, leitura de campos de formulários e digitalização de documentos de identidade. Mais detalhes estão disponíveis no guia de como fazer OCR de região.

Como criar um PDF pesquisável a partir de texto reconhecido?

Converter arquivos de imagem digitalizada em PDFs pesquisáveis é um dos casos de uso de maior valor do OCR. O arquivo resultante preserva a aparência visual original enquanto incorpora uma camada de texto invisível que visualizadores de PDF, motores de busca e leitores de tela podem indexar.

using IronOcr;

var ocr = new IronTesseract();

using var input = new OcrInput();
input.Title = "Quarterly Report Q1 2026";
input.LoadImage("page1.png");
input.LoadImage("page2.png");
input.LoadImage("page3.png");

OcrResult result = ocr.Read(input);
result.SaveAsSearchablePdf("searchable-output.pdf");

Console.WriteLine("Searchable PDF created.");
Console.WriteLine($"Pages processed: {result.Pages.Count}");
using IronOcr;

var ocr = new IronTesseract();

using var input = new OcrInput();
input.Title = "Quarterly Report Q1 2026";
input.LoadImage("page1.png");
input.LoadImage("page2.png");
input.LoadImage("page3.png");

OcrResult result = ocr.Read(input);
result.SaveAsSearchablePdf("searchable-output.pdf");

Console.WriteLine("Searchable PDF created.");
Console.WriteLine($"Pages processed: {result.Pages.Count}");
$vbLabelText   $csharpLabel

Documento PDF Pesquisável de Saída

OCR no tutorial do CodeProject em C#: Extrair texto de imagens com IronOCR: Imagem 3 - PDF pesquisável criado a partir de imagens de entrada

O SaveAsSearchablePdf escreve um arquivo compatível com PDF/A onde cada palavra reconhecida é colocada nas coordenadas exatas do pixel da imagem original. Adobe Acrobat, Preview no macOS e Foxit Reader suportam busca de texto completo nesses arquivos imediatamente após a geração.

Para visualizadores de documentos baseados na web ou pipelines de NLP a jusante, use result.SaveAsHocrFile("output.hocr") em vez disso. O formato hOCR é um padrão XML aberto que codifica caixas delimitadoras por palavra junto com o texto, permitindo destaque no lado do cliente ao buscar e acessibilidade em nível de palavra.

Formatos de saída adicionais disponíveis a partir de OcrResult:

  • result.SaveAsHocrFile("output.hocr") -- XML hOCR com dados posicionais
  • result.ToXDocument() -- XDocument consultável via LINQ para processamento programático
  • result.Pages[0].Text -- texto simples por página para pipelines de streaming

Para aplicações que já funcionam com IronPDF, você pode canalizar OcrResult diretamente em fluxos de trabalho de geração de PDF, combinando extração de OCR com edição de PDF em um único processo .NET.

Como ler códigos de barras junto com texto?

IronOCR pode ler códigos de barras e QR incorporados na mesma imagem que o texto impresso, eliminando a necessidade de executar uma biblioteca de código de barras separada. Habilite o recurso com uma propriedade de configuração:

using IronOcr;

var ocr = new IronTesseract();
ocr.Configuration.ReadBarCodes = true;

using var input = new OcrInput();
input.LoadImage("shipping-label.png");

OcrResult result = ocr.Read(input);

Console.WriteLine("Text:");
Console.WriteLine(result.Text);

Console.WriteLine("Barcodes:");
foreach (var barcode in result.Barcodes)
{
    Console.WriteLine($"  {barcode.Format}: {barcode.Value}");
}
using IronOcr;

var ocr = new IronTesseract();
ocr.Configuration.ReadBarCodes = true;

using var input = new OcrInput();
input.LoadImage("shipping-label.png");

OcrResult result = ocr.Read(input);

Console.WriteLine("Text:");
Console.WriteLine(result.Text);

Console.WriteLine("Barcodes:");
foreach (var barcode in result.Barcodes)
{
    Console.WriteLine($"  {barcode.Format}: {barcode.Value}");
}
$vbLabelText   $csharpLabel

Os formatos de código de barras suportados incluem Code 128, Code 39, EAN-13, EAN-8, UPC-A, UPC-E, PDF417, Data Matrix e QR Code. Detalhes completos estão no guia de leitura de códigos de barras do IronOCR.

Esta capacidade é particularmente útil em aplicações de logística, saúde e varejo, onde etiquetas de envio, pulseiras de pacientes e etiquetas de produtos contêm tanto texto legível por humanos quanto códigos de barras legíveis por máquinas.

Como você compara IronOCR com outras opções de OCR for .NET?

Desenvolvedores avaliando bibliotecas de OCR for .NET tipicamente consideram IronOCR, Tesseract.NET e serviços em nuvem como Google Cloud Vision ou Azure Computer Vision. A tabela abaixo resume as principais diferenças:

Comparação das opções de OCR for .NET em critérios chave para desenvolvedores
Critério IronOCR Tesseract.NET Azure Computer Vision
Implantação No local ou na nuvem, sem chamadas externas No local Apenas na nuvem, requer internet
Instalação Pacote único NuGet Vários pacotes + binários nativos SDK + assinatura Azure
Pacotes de idiomas 125+ via pacotes NuGet Download manual do tessdata Gerenciado pelo Azure
Saída PDF pesquisável Integrado em uma chamada de método Não incluído Não incluído
Pré-processamento de imagens 12+ filtros integrados Pré-processamento manual necessário Automático (lado do servidor)
Modelo de preços Licença perpétua única Código aberto (Apache 2.0) Faturamento por chamada

Tesseract, mantido pelo Google como um projeto de código aberto, alimenta tanto o IronOCR quanto o Tesseract.NET por trás. IronOCR adiciona empacotamento idiossincrático for .NET, gerenciamento automático de modelos e os recursos de saída de produção (PDF pesquisável, exportação hOCR) que as ligações Tesseract puras não possuem. Azure Computer Vision oferece precisão de nuvem de última geração, mas introduz latência de rede e custos por chamada que são inadequados para fluxos de trabalho de alto volume ou offline.

Para cenários onde regulamentos de privacidade de dados proíbem o envio de documentos para serviços externos -- registros de saúde, documentos legais, extratos financeiros -- uma biblioteca no local como IronOCR é a escolha apropriada.

Quais são os seus próximos passos?

Agora você tem os blocos de construção para adicionar OCR a qualquer aplicação .NET 10: instalação via NuGet, extração básica de imagem para texto, processamento de TIFF de várias páginas, configuração de idiomas, tratamento de erros, leitura baseada em região, detecção de código de barras e geração de PDFs pesquisáveis.

Para se aprofundar, explore esses recursos do IronOCR:

Para perguntas sobre licenciamento ou implantar o IronOCR em um ambiente de produção, visite a página de licenciamento do IronOCR. Uma licença de teste gratuita remove marcas d'água de saída durante o seu período de avaliação, e a equipe de suporte da Iron Software está disponível para perguntas técnicas em qualquer nível.

!{--010011000100100101000010010100100100000101010010010110010101111101000111010001010101010100010111110101001101010100010000010101001001010100010001010100010001011111010101110100100 101010100010010000101111101010000010100100111101000100010101010100001101010100010111110101010001010010010010010010010100000101001100010111110100001001001100010011110100001101001011--}

Perguntas frequentes

O que é OCR e como ele beneficia os desenvolvedores de C#?

O OCR, ou Reconhecimento Óptico de Caracteres, converte documentos como papéis digitalizados, PDFs ou imagens em dados editáveis ​​e pesquisáveis. Para desenvolvedores C#, o OCR simplifica o processamento de documentos, permitindo que os aplicativos extraiam texto de imagens e documentos digitalizados, aprimorando a acessibilidade e a usabilidade dos dados.

Como implementar OCR em um projeto C#?

Você implementa OCR em um projeto C# instalando o pacote NuGet IronOCR , criando uma instância do IronTesseract, carregando uma imagem em OcrInput e chamando o método Read. O OcrResult retornado contém o texto extraído e os dados de posicionamento de cada palavra.

Quais formatos de imagem são suportados pelo IronOCR?

O IronOCR suporta os formatos de imagem PNG, JPEG, BMP, GIF, TIFF e WebP. Isso permite que você trabalhe com os tipos de imagem mais comuns sem precisar converter os arquivos antes do processamento.

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

Sim, o IronOCR consegue lidar com arquivos TIFF de várias páginas. Use LoadImageFrames com um array de índices de página para processar frames específicos e itere sobre result.Pages para acessar o texto de cada página.

É possível extrair texto de uma área específica de uma imagem usando o IronOCR?

Sim, passe um CropRectangle para LoadImage para restringir o OCR a uma região definida. Isso reduz significativamente o tempo de processamento e é útil para extrair campos específicos de formulários, faturas e documentos de identidade.

O IronOCR suporta diferentes idiomas para extração de texto?

O IronOCR suporta mais de 125 idiomas, cada um disponível como um pacote NuGet separado. Defina a propriedade Language no IronTesseract e chame AddSecondaryLanguage para documentos bilíngues.

Quais são as vantagens do IronOCR em comparação com o Tesseract .NET puro?

O IronOCR adiciona empacotamento idiomático do .NET, gerenciamento automático de modelos de linguagem, filtros de pré-processamento de imagem integrados, saída em PDF pesquisável e exportação hOCR ao mecanismo Tesseract, tudo acessível por meio de um único pacote NuGet sem gerenciamento manual de binários nativos.

Como o IronOCR melhora a precisão do reconhecimento de texto?

O IronOCR oferece filtros de pré-processamento — correção de desalinhamento (shiftew), redução de ruído (denoise), nitidez (nitidez), binarização (binarize), escala (scale) e rotação (rotate) — que corrigem defeitos comuns de digitalização antes que o mecanismo Tesseract processe a imagem, melhorando a precisão do reconhecimento em materiais de origem de baixa qualidade.

O IronOCR consegue ler códigos de barras e códigos QR?

Sim, defina ocr.Configuration.ReadBarCodes = true para detectar códigos de barras e códigos QR juntamente com texto na mesma imagem. Os resultados estão disponíveis em OcrResult.Barcodes com o tipo de formato e o valor decodificado.

Quais são os casos de uso comuns do IronOCR em aplicações C#?

O IronOCR é utilizado em sistemas de gestão documental, extração de dados de faturas e recibos, geração de PDFs pesquisáveis ​​a partir de arquivos digitalizados, leitura de campos de formulários, processamento de etiquetas de envio, digitalização de registros de saúde e ferramentas de acessibilidade.

Kannaopat Udonpant
Engenheiro de Software
Antes de se tornar Engenheiro de Software, Kannapat concluiu um doutorado em Recursos Ambientais pela Universidade de Hokkaido, no Japão. Durante o doutorado, Kannapat também integrou o Laboratório de Robótica Veicular, que faz parte do Departamento de Engenharia de Bioprodução. Em 2022, ele utilizou suas habilidades ...
Leia mais

Iron Support Team

We're online 24 hours, 5 days a week.
Chat
Email
Call Me