Configuração OCR para Leitura Avançada

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

O IronOCR oferece métodos avançados de leitura de digitalização, como ReadPassport, ReadLicensePlate e ReadPhoto, que vão além do OCR padrão. Esses métodos são alimentados pelo pacote IronOcr.Extensions.AdvancedScan. Para ajustar com precisão a forma como esses métodos processam o texto, o IronOCR expõe a classe TesseractConfiguration, dando aos desenvolvedores controle total sobre listas de permissão e bloqueio de caracteres, detecção de código de barras, leitura de tabelas de dados e muito mais.

Este artigo aborda as propriedades TesseractConfiguration disponíveis para leitura avançada e exemplos práticos para configurar o OCR em cenários do mundo real.

Início rápido: Recordair a saída do OCR a uma lista de caracteres permitidos

Defina WhiteListCharacters em TesseractConfiguration antes de chamar Read. Qualquer caractere que não esteja na lista de permissões é silenciosamente removido do resultado, eliminando ruídos sem qualquer pós-processamento.

  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() { Configuration = new TesseractConfiguration { WhiteListCharacters = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789- " } }.Read(new OcrInput("image.png")); Console.WriteLine(result.Text);
  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


Propriedades do TesseractConfiguration

A classe TesseractConfiguration fornece as seguintes propriedades para personalizar o comportamento do OCR. Essas configurações são definidas através de IronTesseract.Configuration.

Propriedade Tipo Descrição
WhiteListCharacters corda Apenas caracteres presentes nesta corda serão reconhecidos na saída de OCR. Todos os outros caracteres são excluídos.
BlackListCharacters corda Os caracteres nesta corda são ativamente ignorados e removidos da saída de OCR.
ReadBarCodes booleano Habilita ou desabilita a detecção de códigos de barras no documento durante o processamento de OCR.
ReadDataTables booleano Habilita ou desabilita a detecção da estrutura da tabela no documento usando Tesseract.
PageSegmentationMode Modo de segmentação de página Tesseract Determina como o Tesseract segmenta a imagem de entrada. Opções incluem AutoOsd, Auto, SingleBlock, SingleLine, SingleWord, e mais.
RenderSearchablePdf booleano Quando ativado, a saída de OCR pode ser salva como um PDF pesquisável com uma camada de texto invisível.
RenderHocr booleano Quando ativado, a saída de OCR inclui dados hOCR para processamento ou exportação adicional.
TesseractVariables Dictionary Fornece acesso direto a variáveis de configuração de baixo nível do Tesseract para controle detalhado. Veja a lista completa de variáveis do Tesseract.

O dicionário TesseractVariables vai ainda mais longe, expondo centenas de parâmetros subjacentes do mecanismo Tesseract para casos em que as propriedades de alto nível não são suficientes.

Os exemplos abaixo demonstram cada grupo de propriedades, começando com a lista de caracteres permitidos.

Configurando uma Lista Branca de Caracteres para Placas de Veículos

Um caso de uso comum para WhiteListCharacters é recordair a saída do OCR apenas aos caracteres que podem aparecer em uma placa de veículo: letras maiúsculas, dígitos, hífens e espaços. Isso elimina ruídos e melhora a precisão informando o motor para ignorar qualquer coisa fora do conjunto de caracteres esperado.

Entrada

O seguinte registro de veículo contém uma mistura de texto em maiúsculas, texto em minúsculas e símbolos especiais (@, $, #, |, *), e pontuação.

Registro de veículo com caracteres mistos para demonstração de lista branca de OCR

BlackListCharacters complementa a lista branca, excluindo ativamente símbolos de ruído conhecidos como `, and *.

:path=/static-assets/ocr/content-code-examples/how-to/ocr-configurations-for-advanced-reading.cs
using IronOcr;

// Initialize the Tesseract OCR engine
IronTesseract ocr = new IronTesseract();

ocr.Configuration = new TesseractConfiguration
{
    // Whitelist only characters that appear on license plates
    WhiteListCharacters = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789- ",

    // Blacklist common noise characters
    BlackListCharacters = "`~@#$%&*",
};

var ocrInput = new OcrInput();
// Load the input image
ocrInput.LoadImage("advanced-input.png");
// Perform OCR on the input image with ReadPhoto method
var results = ocr.ReadPhoto(ocrInput);

// Print the filtered text result to the console
Console.WriteLine(results.Text);
$vbLabelText   $csharpLabel

Saída

Saída de OCR mostrando apenas caracteres de placa de licença permitidos

O filtro de lista branca é claramente visível nos resultados:

  • "Placa: ABC-1234" se torna "P ABC-1234". A palavra em minúsculas "late:" é excluída, enquanto o número da placa é preservado exatamente.
  • "VIN: 1HGBH41JXMN109186" se torna "VIN 1HGBH41JXMN109186". O dois-pontos é removido, mas o VIN em maiúsculas e o número completo são mantidos.
  • "Proprietário: john.doe@email.com" se torna "O". Todo o e-mail em minúsculas e a pontuação são removidos.
  • "Região: CA-90210 |Zona #5" se torna "R CA-90210 Z 5". O pipe (|) and hash (#) são removidos, enquanto as letras maiúsculas e os números permanecem.
  • *"Taxa: $125.00 + imposto" se torna "F 12500"**. O símbolo do dólar, ponto decimal, sinal de mais e "imposto" em minúsculas são todos removidos.
  • "Ref: ~record_v2^final" se torna "R 2". O til (~), o sublinhado, o acento circunflexo (^) e todos os caracteres minúsculos são removidos.

A mesma abordagem com WhiteListCharacters e BlackListCharacters funciona para qualquer tipo de documento, não apenas para placas de veículos. A próxima seção mostra como estender uma leitura para detectar códigos de barras e estruturas de tabela na mesma passagem.

Configurando Leitura de Código de Barras e Tabelas de Dados

IronOCR pode detectar códigos de barras e tabelas estruturadas dentro de documentos juntamente com texto. Essas funcionalidades são controladas por meio de TesseractConfiguration:

IronTesseract ocr = new IronTesseract();

ocr.Configuration = new TesseractConfiguration
{
    // Enable barcode detection within documents
    ReadBarCodes = true,

    // Enable table structure detection
    ReadDataTables = true,
};
IronTesseract ocr = new IronTesseract();

ocr.Configuration = new TesseractConfiguration
{
    // Enable barcode detection within documents
    ReadBarCodes = true,

    // Enable table structure detection
    ReadDataTables = true,
};
$vbLabelText   $csharpLabel
  • ReadBarCodes : Quando definido como true, o IronOCR escaneia o documento em busca de códigos de barras, além do texto. Defina como false para ignorar a detecção de código de barras e acelerar o processamento quando códigos de barras não forem esperados.
  • ReadDataTables : Quando definido como true, o Tesseract tenta detectar e preservar as estruturas das tabelas no documento. Isso é útil para faturas, relatórios e outros documentos tabulares.

Essas opções podem ser combinadas com WhiteListCharacters e BlackListCharacters para um controle preciso sobre o que é extraído de documentos complexos.

Embora a filtragem e a detecção controlem o que é extraído, a interpretação do layout é uma preocupação à parte. A próxima seção aborda como selecionar o PageSegmentationMode correto para o tipo de documento.

Controlando o Modo de Segmentação de Página

PageSegmentationMode informa ao Tesseract como segmentar a imagem de entrada antes do reconhecimento. Escolher o modo errado para um determinado layout faz com que o mecanismo interprete o texto incorretamente ou o ignore completamente.

Modo Caso de uso
AutoOsd Análise automática de layout com detecção de orientação e script
Auto Análise automática de layout sem OSD (padrão)
SingleColumn Assume que a imagem é uma única coluna de texto
SingleBlock Assume que a imagem é um único bloco uniforme de texto
SingleLine Assume que a imagem é uma única linha de texto
SparseText Encontra o máximo de texto possível em qualquer ordem

Para um rótulo ou banner que contenha uma única linha, SingleLine elimina a análise de múltiplos blocos e melhora tanto a velocidade quanto a precisão.

Entrada

single-line-label.png é uma etiqueta de envio estreita com exatamente uma linha de texto em negrito da transportadora: SHIPPING LABEL: TRK-2024-XR9-001.

Etiqueta de envio de linha única para modo de segmentação OCR SingleLine
IronTesseract ocr = new IronTesseract();

ocr.Configuration = new TesseractConfiguration
{
    PageSegmentationMode = Modo de segmentação de página Tesseract.SingleLine,
};

using OcrInput input = new OcrInput();
input.LoadImage("single-line-label.png");

OcrResult result = ocr.Read(input);
Console.WriteLine(result.Text);
IronTesseract ocr = new IronTesseract();

ocr.Configuration = new TesseractConfiguration
{
    PageSegmentationMode = Modo de segmentação de página Tesseract.SingleLine,
};

using OcrInput input = new OcrInput();
input.LoadImage("single-line-label.png");

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

Para uma página digitalizada com posicionamento de texto irregular, SparseText recupera mais conteúdo do que Auto.

Entrada

receipt-scan.png é um recibo térmico do Corner Market com quatro itens (café, muffin, suco, barra de granola), um separador tracejado, subtotal, imposto e total. Este é o tipo de layout em que a segmentação por blocos fixos deixa de identificar entradas em diferentes posições horizontais.

Recibo térmico para o modo de segmentação de texto esparso por OCR
IronTesseract ocr = new IronTesseract();

ocr.Configuration = new TesseractConfiguration
{
    PageSegmentationMode = Modo de segmentação de página Tesseract.SparseText,
};

using OcrInput input = new OcrInput();
input.LoadImage("receipt-scan.png");

OcrResult result = ocr.Read(input);
Console.WriteLine(result.Text);
IronTesseract ocr = new IronTesseract();

ocr.Configuration = new TesseractConfiguration
{
    PageSegmentationMode = Modo de segmentação de página Tesseract.SparseText,
};

using OcrInput input = new OcrInput();
input.LoadImage("receipt-scan.png");

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

Com a segmentação do layout ajustada ao tipo de documento, o próximo passo é controlar o formato de saída para o processamento subsequente.

Gerando PDFs Pesquisáveis e Saída hOCR

RenderSearchablePdf e RenderHocr controlam os formatos de saída que o IronOCR produz juntamente com o resultado em texto simples.

RenderSearchablePdf incorpora uma camada de texto invisível sobre a imagem original, produzindo um PDF onde os usuários podem pesquisar e copiar texto enquanto a imagem digitalizada permanece visível. Este é o formato de saída padrão para fluxos de trabalho de arquivamento de documentos.

Entrada

scanned-document.pdf é uma carta comercial de uma página da IronOCR Solutions Ltd. (datada de 15 de março de 2024, referência DOC-2024-OCR-0315). O resultado é salvo como searchable-output.pdf.

IronTesseract ocr = new IronTesseract();

ocr.Configuration = new TesseractConfiguration
{
    RenderSearchablePdf = true,
};

using OcrInput input = new OcrInput();
input.LoadPdf("scanned-document.pdf");

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

ocr.Configuration = new TesseractConfiguration
{
    RenderSearchablePdf = true,
};

using OcrInput input = new OcrInput();
input.LoadPdf("scanned-document.pdf");

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

Saída

O resultado é um PDF que parece idêntico ao original, mas contém uma camada de texto oculta. Abra searchable-output.pdf e use Ctrl+F para verificar se o texto incorporado pode ser pesquisado e copiado.

RenderHocr produz um documento hOCR, um arquivo HTML que codifica o conteúdo do texto juntamente com as coordenadas da caixa delimitadora para cada palavra. Isso é útil quando ferramentas subsequentes precisam de posicionamento preciso de palavras, por exemplo, mecanismos de redação ou análise de layout de documentos.

Entrada

document-page.png é uma página de documento com o título "Resumo Trimestral - 1º Trimestre de 2024" e dois parágrafos de dados financeiros que abrangem receita, custos operacionais e fatores de crescimento. O resultado é salvo como output.html.

Entrada de página do documento para saída de caixa delimitadora hOCR
IronTesseract ocr = new IronTesseract();

ocr.Configuration = new TesseractConfiguration
{
    RenderHocr = true,
};

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

OcrResult result = ocr.Read(input);
result.SaveAsHocrFile("output.html");
IronTesseract ocr = new IronTesseract();

ocr.Configuration = new TesseractConfiguration
{
    RenderHocr = true,
};

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

OcrResult result = ocr.Read(input);
result.SaveAsHocrFile("output.html");
$vbLabelText   $csharpLabel

Saída

output.html codifica cada palavra reconhecida com as coordenadas da sua caixa delimitadora. Abra o arquivo em um navegador para inspecionar a estrutura hOCR ou passe-o para uma ferramenta subsequente para análise de layout ou redação.

Ambas as sinalizações podem ser ativadas ao mesmo tempo se você precisar de todos os três formatos de saída (texto simples, PDF pesquisável e hOCR) de uma única chamada de leitura.

Essas opções de saída funcionam independentemente do idioma que está sendo lido, incluindo alfabetos não latinos. A próxima seção mostra como aplicar a filtragem de caracteres a textos em japonês.

Filtragem de Caracteres Unicode para Documentos Internacionais

Para documentos internacionais em chinês, japonês ou coreano, as propriedades WhiteListCharacters e BlackListCharacters funcionam com caracteres Unicode. Isso permite recordair a saída a scripts específicos, como apenas Hiragana e Katakana para japonês.

Observe Certifique-se de que o pacote de idioma correspondente foi instalado (por exemplo, IronOcr.Languages.Japanese) antes de prosseguir.

Entrada

O documento contém um título (テスト), uma frase japonesa misturando Hiragana e Katakana com variantes de marca sonora (プ, で), uma linha de preço com símbolos de ruído na lista negra (★, ■) e Kanji (価格), e uma linha de memorando com outro símbolo na lista negra (§), mais Kanji (購入), variantes adicionais de marca sonora (プ, デ) e base Katakana (メモ,ール). A lista de permissões permite apenas Hiragana básico, Katakana básico, dígitos e pontuação japonesa comum; Os três símbolos de ruído estão explicitamente na lista negra.

Configuração avançada de OCR para entrada em japonês

Os intervalos de caracteres Unicode para Hiragana e Katakana são passados ​​como literais de corda em WhiteListCharacters, com os símbolos de ruído listados em BlackListCharacters.

Aviso O console pode não suportar a exibição de caracteres Unicode. Redirecionar a saída para um arquivo .txt é uma forma confiável de verificar os resultados ao lidar com tais caracteres.

:path=/static-assets/ocr/content-code-examples/how-to/ocr-configurations-for-advanced-reading-jp.cs
using IronOcr;
using System.IO;

IronTesseract ocr = new IronTesseract();

ocr.Configuration = new TesseractConfiguration
{
    // Whitelist only Hiragana, Katakana, numbers, and common Japanese punctuation
    WhiteListCharacters = "あいうえおかきくけこさしすせそたちつてとなにぬねのはひふへほまみむめもやゆよらりるれろわをん" +
                            "アイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホマミムメモヤユヨラリルレロワヲン" +
                            "0123456789、。?!()¥ー",

    // Blacklist common noise/symbols you want to ignore
    BlackListCharacters = "★■§",
};

var ocrInput = new OcrInput();

// Load Japanese input image
ocrInput.LoadImage("jp.png");

// Perform OCR on the input image with ReadPhoto method
var results = ocr.ReadPhoto(ocrInput);

// Write the text result directly to a file named "output.txt"
File.WriteAllText("output.txt", results.Text);

// You can add this line to confirm the file was saved:
Console.WriteLine("OCR results saved to output.txt");
$vbLabelText   $csharpLabel

Saída

Configuração avançada de OCR para saída em japonês

O resultado completo filtrado está disponível como um arquivo de texto: jp-output.txt .

Como a lista branca inclui apenas caracteres básicos de Hiragana e Katakana, variantes derivadas de marcas sonoras, como プ (pu) e デ (de), são descartadas. Caracteres kanji como 価格 (preço) e 購入 (compra) também são excluídos, pois não fazem parte da lista de caracteres permitidos. Símbolos da lista negra, como , e §, são removidos ativamente, independentemente da lista branca.

Para onde devo ir em seguida?

Agora que você entende como configurar o IronOCR para cenários de leitura avançados, explore:

Para uso em produção, lembre-se de obter uma licença para remover marcas d'água e acessar a funcionalidade completa.

Curtis Chau
Redator Técnico

Curtis Chau é bacharel em Ciência da Computação (Universidade Carleton) e se especializa em desenvolvimento front-end, com experiência em Node.js, TypeScript, JavaScript e React. Apaixonado por criar interfaces de usuário intuitivas e esteticamente agradáveis, Curtis gosta de trabalhar com frameworks modernos e criar manuais ...

Leia mais
Pronto para começar?
Nuget Downloads 5,556,263 | Versão: 2026.3 acaba de ser lançado
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.