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 para .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
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";
Imports IronOcr
' Apply license key before any OCR calls (production only)
IronOcr.License.LicenseKey = "YOUR-LICENSE-KEY"
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 mecanismo), 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);
Imports IronOcr
Dim ocr As New IronTesseract()
Using input As New OcrInput()
input.LoadImage("sample-document.png")
Dim result As OcrResult = ocr.Read(input)
Console.WriteLine(result.Text)
End Using
Saída de Reconhecimento Óptico de Caracteres
IronTesseract encapsula o mecanismo Tesseract 5 com configurações padrão compatíveis com .NET e gerenciamento automático de modelos. OcrInput.LoadImage aceita arquivos PNG, JPEG, BMP, GIF, TIFF e WebP, portanto, raramente é necessário converter formatos antes de passar uma imagem para o mecanismo.
A propriedade OcrResult.Text retorna uma string simples de todos os caracteres reconhecidos, unidos por novas linhas. Para um acesso mais completo — caixas delimitadoras 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áginaresult.Words[n].Texteresult.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 aplicativos 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 lida com eles com LoadImageFrames, o que permite escolher exatamente quais frames (páginas) processar -- útil quando você precisa apenas de um subconjunto de um arquivo grande.
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);
}
Imports IronOcr
Dim ocr As New IronTesseract()
Using input As New OcrInput()
Dim pageIndices As Integer() = {0, 1, 2}
input.LoadImageFrames("scanned-documents.tiff", pageIndices)
' Correct skew and remove noise before reading
input.Deskew()
input.DeNoise()
Dim result As OcrResult = ocr.Read(input)
For Each page In result.Pages
Console.WriteLine($"Page {page.PageNumber}:")
Console.WriteLine(page.Text)
Next
End Using
Saída de OCR de Arquivo TIFF de Múltiplas Páginas
Deskew rotaciona a imagem para corrigir qualquer inclinação introduzida por scanners de mesa. DeNoise remove manchas e artefatos JPEG que confundem o mecanismo Tesseract. Juntos, esses dois filtros de pré-processamento melhoram significativamente a precisão do reconhecimento em digitalizações de baixa qualidade.
Filtros adicionais OcrInput disponíveis para material de origem difícil:
input.Sharpen()-- aumenta o contraste das bordas em imagens desfocadasinput.Binarize()-- converte para preto e branco para documentos com qualidade de faxinput.Scale(200)-- amplia imagens pequenas para melhor separação de caracteresinput.Rotate(90)-- corrige a orientação rotacionada do documento
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 NuGet do idioma correspondente e defina a propriedade Language na instância 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
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);
Imports IronOcr
Imports IronOcr.Languages
Dim ocr As New IronTesseract()
ocr.Language = OcrLanguage.German
' For bilingual documents (e.g. Canadian forms, EU directives)
ocr.AddSecondaryLanguage(OcrLanguage.French)
Using input As New OcrInput()
input.LoadImage("german-invoice.png")
Dim result As OcrResult = ocr.Read(input)
Console.WriteLine(result.Text)
End Using
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 mecanismo combina modelos de linguagem primários e secundários durante o reconhecimento quando você liga para 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}");
}
Imports IronOcr
Dim ocr As New IronTesseract()
ocr.Language = OcrLanguage.English
Try
Using input As New OcrInput()
input.LoadImage("document.png")
input.DeNoise()
input.Deskew()
Dim result As OcrResult = ocr.Read(input)
If result.Text.Length > 0 Then
Console.WriteLine("Recognised text:")
Console.WriteLine(result.Text)
Else
Console.WriteLine("No text was detected in the image.")
End If
End Using
Catch ex As Exception
Console.WriteLine($"OCR error: {ex.Message}")
End Try
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, multicoluna e palavra únicaocr.Configuration.ReadBarCodes = false-- desativa a detecção de código de barras se você estiver processando documentos somente de texto e desejar maior velocidade de processamento.ocr.Configuration.TesseractVersion = TesseractVersion.Tesseract5-- garante que você utilize 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);
Imports IronOcr
Imports IronSoftware.Drawing
Dim ocr As New IronTesseract()
Using input As New OcrInput()
Dim region As New CropRectangle(x:=50, y:=200, width:=600, height:=100)
input.LoadImage("form.png", region)
Dim result As OcrResult = ocr.Read(input)
Console.WriteLine(result.Text)
End Using
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}");
Imports IronOcr
Dim ocr As New IronTesseract()
Using input As New OcrInput()
input.Title = "Quarterly Report Q1 2026"
input.LoadImage("page1.png")
input.LoadImage("page2.png")
input.LoadImage("page3.png")
Dim result As OcrResult = ocr.Read(input)
result.SaveAsSearchablePdf("searchable-output.pdf")
Console.WriteLine("Searchable PDF created.")
Console.WriteLine($"Pages processed: {result.Pages.Count}")
End Using
Documento PDF Pesquisável de Saída
SaveAsSearchablePdf gera um arquivo compatível com PDF/A onde cada palavra reconhecida é colocada nas coordenadas exatas de 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 PNL subsequentes, 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 em OcrResult:
result.SaveAsHocrFile("output.hocr")-- XML hOCR com dados posicionaisresult.ToXDocument()-- XDocument consultável por LINQ para processamento programáticoresult.Pages[0].Text-- texto simples por página para pipelines de streaming
Para aplicações que já funcionam com o IronPDF , você pode integrar o OcrResult diretamente nos fluxos de trabalho de geração de PDF, combinando a extração de OCR com a 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}");
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
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 para .NET?
Desenvolvedores avaliando bibliotecas de OCR para .NET tipicamente consideram IronOCR, Tesseract.NET e serviços em nuvem como Google Cloud Vision ou Visão Computacional do Azure. A tabela abaixo resume as principais diferenças:
| Critério | IronOCR | Tesseract.NET | Visão Computacional do Azure |
|---|---|---|---|
| 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 para .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. Visão Computacional do Azure 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:
- Documentação do IronOCR -- referência completa da API e guias de recursos
- Tutorial de filtro de imagem -- guia detalhado de todos os filtros de pré-processamento
- Guia de leitura de códigos de barras -- Códigos QR e códigos de barras lineares junto com texto
- Como fazer OCR de uma região -- reconhecimento baseado em corte para formulários e IDs
- Referência de idiomas -- lista completa de mais de 125 idiomas suportados
- Referência da API -- todas as classes, métodos e propriedades
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 avaliação gratuita remove as marcas d'água de saída durante o período de avaliação, e a equipe de suporte da Iron Software está disponível para dúvidas técnicas em qualquer nível de assinatura.
!{--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.



