# Configuração OCR para Leitura Avançada
IronOCR oferece métodos avançados de leitura de digitalizações, 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 como esses métodos processam texto, IronOCR expõe a classe `TesseractConfiguration`, dando aos desenvolvedores controle total sobre a lista branca de caracteres, lista negra, detecção de código de barras, leitura de tabelas de dados, e mais.
Este artigo cobre as propriedades `TesseractConfiguration` disponíveis para leitura avançada e exemplos práticos para configurar o OCR em cenários do mundo real.
*as-heading:2(Início rápido: Restringir 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.
```cs
:title=Apply a Character Whitelist in One Line
var result = new IronTesseract() { Configuration = new TesseractConfiguration { WhiteListCharacters = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789- " } }.Read(new OcrInput("image.png")); Console.WriteLine(result.Text);
```
<div class="hsg-featured-snippet">
<h2>Como Configurar OCR para Leitura Avançada</h2>
<ol>
<li><a class="js-modal-open" data-modal-id="trial-license-after-download" href="https://nuget.org/packages/IronOcr/">Instale o IronOCR do NuGet</a></li>
<li>Instale o pacote <a href="https://www.nuget.org/packages/IronOcr.Extensions.AdvancedScan">IronOcr.Extensions.AdvancedScan</a></li>
<li>Configure as propriedades de <code>TesseractConfiguration</code> como <code>WhiteListCharacters</code> e <code>ReadBarCodes</code></li>
<li>Carregue a imagem de entrada com <code>OcrInput</code></li>
<li>Leia a imagem usando um método avançado como <code>ReadPhoto</code>, <code>ReadLicensePlate</code>, ou <code>ReadPassport</code></li>
</ol>
</div>
<br class="clear" />
## Propriedades do TesseractConfiguration
A classe `TesseractConfiguration` fornece as seguintes propriedades para personalizar o comportamento do OCR. Estas são definidas por meio de `IronTesseract.Configuration`.
<table class="table" style="text-align: left;">
<tr style="background-color: rgb(241 249 251);">
<th style="text-align: left;">Propriedade</th>
<th style="text-align: left;">Tipo</th>
<th style="text-align: left;">Descrição</th>
</tr>
<tr>
<td><code>WhiteListCharacters</code></td>
<td>string</td>
<td>Apenas caracteres presentes nesta string serão reconhecidos na saída de OCR. Todos os outros caracteres são excluídos.</td>
</tr>
<tr>
<td><code>BlackListCharacters</code></td>
<td>string</td>
<td>Os caracteres nesta string são ativamente ignorados e removidos da saída de OCR.</td>
</tr>
<tr>
<td><code>ReadBarCodes</code></td>
<td>bool</td>
<td>Habilita ou desabilita a detecção de códigos de barras no documento durante o processamento de OCR.</td>
</tr>
<tr>
<td><code>ReadDataTables</code></td>
<td>bool</td>
<td>Habilita ou desabilita a detecção da estrutura da tabela no documento usando Tesseract.</td>
</tr>
<tr>
<td><code>PageSegmentationMode</code></td>
<td>Modo de segmentação de página Tesseract</td>
<td>Determina como o Tesseract segmenta a imagem de entrada. Opções incluem <code>AutoOsd</code>, <code>Auto</code>, <code>SingleBlock</code>, <code>SingleLine</code>, <code>SingleWord</code>, e mais.</td>
</tr>
<tr>
<td><code>RenderSearchablePdf</code></td>
<td>bool</td>
<td>Quando ativado, a saída de OCR pode ser salva como um PDF pesquisável com uma camada de texto invisível.</td>
</tr>
<tr>
<td><code>RenderHocr</code></td>
<td>bool</td>
<td>Quando ativado, a saída de OCR inclui dados hOCR para processamento ou exportação adicional.</td>
</tr>
<tr>
<td><code>TesseractVariables</code></td>
<td>Dictionary<string, object></td>
<td>Fornece acesso direto às variáveis de configuração de baixo nível do Tesseract para um controle preciso.</td>
</tr>
</table>
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` é restringir a saída do OCR apenas aos caracteres que podem aparecer em uma placa de licença: letras maiúsculas, dígitos, hifens 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, símbolos especiais (`@`, `$`, `#`, `|`, `*`), e pontuação.
<div class="content-img-align-center">
<div class="center-image-wrapper" style="width=50%">
<img src="/static-assets/ocr/how-to/ocr-configurations-for-advanced-reading/advanced-input.webp" alt="Registro de veículo com caracteres mistos para demonstração de lista branca de OCR" class="img-responsive add-shadow" />
</div>
</div>
`BlackListCharacters` complementa a lista branca, excluindo ativamente símbolos de ruído conhecidos como `, and `*`.
```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);
```
### Saída
<div class="content-img-align-center">
<div class="center-image-wrapper" style="width=50%">
<img src="/static-assets/ocr/how-to/ocr-configurations-for-advanced-reading/advanced-output-english.webp" alt="Saída de OCR mostrando apenas caracteres de placa de licença permitidos" class="img-responsive add-shadow" />
</div>
</div>
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 sobrevivem.
- **"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 (`~`), sublinhado, acento circunflexo (`^`), e todos os caracteres minúsculos são removidos.
A mesma abordagem `WhiteListCharacters` e `BlackListCharacters` funciona para qualquer tipo de documento, não apenas placas de licença. 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. Esses recursos são controlados por meio de `TesseractConfiguration`:
```cs
IronTesseract ocr = new IronTesseract();
ocr.Configuration = new TesseractConfiguration
{
// Enable barcode detection within documents
ReadBarCodes = true,
// Enable table structure detection
ReadDataTables = true,
};
```
- **ReadBarCodes**: Quando definido para `true`, IronOCR examina o documento em busca de códigos de barras além do texto. Defina para `false` para ignorar a detecção de códigos de barras e acelerar o processamento quando não se esperam códigos de barras.
- **ReadDataTables**: Quando definido para `true`, Tesseract tenta detectar e preservar estruturas de tabelas no documento. Isso é útil para faturas, relatórios e outros documentos tabulares.
Essas opções podem ser combinadas com `WhiteListCharacters` e `BlackListCharacters` para 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 cobre como selecionar o `PageSegmentationMode` correto para o tipo de documento.
## Controlando o Modo de Segmentação de Página
`PageSegmentationMode` indica a 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 faixa que contém uma única linha, `SingleLine` elimina a análise em múltiplos blocos e melhora tanto a velocidade quanto a precisão.
### Entrada
`single-line-label.png` é um rótulo de envio estreito com exatamente uma linha de texto em negrito Courier: `SHIPPING LABEL: TRK-2024-XR9-001`.
<div class="content-img-align-center">
<div class="center-image-wrapper" style="width=50%">
<img src="/static-assets/ocr/how-to/ocr-configurations-for-advanced-reading/single-line-label.webp" alt="Etiqueta de envio de linha única para modo de segmentação OCR SingleLine" class="img-responsive add-shadow" />
</div>
</div>
```cs
IronTesseract ocr = new IronTesseract();
ocr.Configuration = new TesseractConfiguration
{
PageSegmentationMode = TesseractPageSegmentationMode.SingleLine,
};
using OcrInput input = new OcrInput();
input.LoadImage("single-line-label.png");
OcrResult result = ocr.Read(input);
Console.WriteLine(result.Text);
```
Para uma página digitalizada com posicionamento irregular de texto, `SparseText` recupera mais conteúdo do que `Auto`.
### Entrada
`receipt-scan.png` é um recibo térmico da Corner Market com quatro itens de linha (café, muffin, suco, barra de granola), um separador pontilhado, 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.
<div class="content-img-align-center">
<div class="center-image-wrapper" style="width=50%">
<img src="/static-assets/ocr/how-to/ocr-configurations-for-advanced-reading/receipt-scan.webp" alt="Recibo térmico para o modo de segmentação de texto esparso por OCR" class="img-responsive add-shadow" />
</div>
</div>
```cs
IronTesseract ocr = new IronTesseract();
ocr.Configuration = new TesseractConfiguration
{
PageSegmentationMode = TesseractPageSegmentationMode.SparseText,
};
using OcrInput input = new OcrInput();
input.LoadImage("receipt-scan.png");
OcrResult result = ocr.Read(input);
Console.WriteLine(result.Text);
```
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 junto 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 única 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`.
<iframe loading="lazy" src="/static-assets/ocr/how-to/ocr-configurations-for-advanced-reading/scanned-document.pdf" width="100%" height="300px" style="margin-bottom: 1rem;"></iframe>
```cs
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");
```
### 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 é pesquisável e copiável.
<iframe loading="lazy" src="/static-assets/ocr/how-to/ocr-configurations-for-advanced-reading/searchable-output.pdf" width="100%" height="300px" style="margin-bottom: 1rem;"></iframe>
**`RenderHocr`** produz um documento hOCR, um arquivo HTML que codifica o conteúdo de texto junto 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 Q1 2024" e dois parágrafos de dados financeiros cobrindo receita, custos operacionais e impulsionadores de crescimento. O resultado é salvo como `output.html`.
<div class="content-img-align-center">
<div class="center-image-wrapper" style="width=50%">
<img src="/static-assets/ocr/how-to/ocr-configurations-for-advanced-reading/document-page.webp" alt="Entrada de página do documento para saída de caixa delimitadora hOCR" class="img-responsive add-shadow" />
</div>
</div>
```cs
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");
```
### Saída
`output.html` codifica cada palavra reconhecida com suas coordenadas de 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.
<iframe loading="lazy" src="/static-assets/ocr/how-to/ocr-configurations-for-advanced-reading/output.html" width="100%" height="200px" style="margin-bottom: 1rem;"></iframe>
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 restringir a saída a scripts específicos, como apenas Hiragana e Katakana para japonês.
[[i:( Certifique-se de que o pacote de idioma correspondente foi instalado (por exemplo, [IronOcr.Languages.Japanese](https://www.nuget.org/packages/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.
<div class="content-img-align-center">
<div class="center-image-wrapper" style="width=50%">
<img src="/static-assets/ocr/how-to/ocr-configurations-for-advanced-reading/advanced-input-jp.webp" alt="Configuração avançada de OCR para entrada em japonês" class="img-responsive add-shadow" />
</div>
</div>
Os intervalos de caracteres Unicode para Hiragana e Katakana são passados como literais de string em `WhiteListCharacters`, com os símbolos de ruído listados em `BlackListCharacters`.
[[w:( 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.)]]
```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");
```
### Saída
<div class="content-img-align-center">
<div class="center-image-wrapper" style="width=50%">
<img src="/static-assets/ocr/how-to/ocr-configurations-for-advanced-reading/jp-output.webp" alt="Configuração avançada de OCR para saída em japonês" class="img-responsive add-shadow" />
</div>
</div>
O resultado completo filtrado está disponível como um arquivo de texto: [jp-output.txt](/static-assets/ocr/how-to/ocr-configurations-for-advanced-reading/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 na 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:
- Leitura de tipos específicos de documentos, como [passaportes](https://ironsoftware.com/csharp/ocr/how-to/read-passport/) e [placas de veículos.](https://ironsoftware.com/csharp/ocr/how-to/read-license-plate/)
- [Leitura de código de barras e código QR](https://ironsoftware.com/csharp/ocr/how-to/barcodes/) como um caso de uso OCR independente
- [Exportação de hOCR e PDFs pesquisáveis](https://ironsoftware.com/csharp/ocr/how-to/html-hocr-export/) a partir de resultados processados
Para uso em produção, lembre-se de [obter uma licença](https://ironsoftware.com/csharp/ocr/licensing/) para remover marcas d'água e acessar a funcionalidade completa.
IronOCR oferece métodos avançados de leitura de digitalizações, 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 como esses métodos processam texto, IronOCR expõe a classe TesseractConfiguration, dando aos desenvolvedores controle total sobre a lista branca de caracteres, lista negra, detecção de código de barras, leitura de tabelas de dados, e mais.
Este artigo cobre 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: Restringir 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.
1Install IronOCR with NuGet Package Manager
PM > Install-Package IronOcr
Install-Package IronOcr
2Copie 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);
var result = new IronTesseract() { Configuration = new TesseractConfiguration { WhiteListCharacters = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789- " } }.Read(new OcrInput("image.png")); Console.WriteLine(result.Text);
C#
3Implante para testar em seu ambiente de produção.
Configure as propriedades de TesseractConfiguration como WhiteListCharacters e ReadBarCodes
Carregue a imagem de entrada com OcrInput
Leia a imagem usando um método avançado como ReadPhoto, ReadLicensePlate, ou ReadPassport
Propriedades do TesseractConfiguration
A classe TesseractConfiguration fornece as seguintes propriedades para personalizar o comportamento do OCR. Estas são definidas por meio de IronTesseract.Configuration.
Propriedade
Tipo
Descrição
WhiteListCharacters
string
Apenas caracteres presentes nesta string serão reconhecidos na saída de OCR. Todos os outros caracteres são excluídos.
BlackListCharacters
string
Os caracteres nesta string são ativamente ignorados e removidos da saída de OCR.
ReadBarCodes
bool
Habilita ou desabilita a detecção de códigos de barras no documento durante o processamento de OCR.
ReadDataTables
bool
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
bool
Quando ativado, a saída de OCR pode ser salva como um PDF pesquisável com uma camada de texto invisível.
RenderHocr
bool
Quando ativado, a saída de OCR inclui dados hOCR para processamento ou exportação adicional.
TesseractVariables
Dictionary<string, object>
Fornece acesso direto às variáveis de configuração de baixo nível do Tesseract para um controle preciso.
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 é restringir a saída do OCR apenas aos caracteres que podem aparecer em uma placa de licença: letras maiúsculas, dígitos, hifens 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, símbolos especiais (@, $, #, |, *), e pontuação.
BlackListCharacters complementa a lista branca, excluindo ativamente símbolos de ruído conhecidos como , and *`.
using IronOcr;// Initialize the Tesseract OCR engineIronTesseract ocr = new IronTesseract();ocr.Configuration = new TesseractConfiguration{ // Whitelist only characters that appear on license platesWhiteListCharacters = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789- ", // Blacklist common noise charactersBlackListCharacters = "`~@#$%&*",};var ocrInput = new OcrInput();// Load the input imageocrInput.LoadImage("advanced-input.png");// Perform OCR on the input image with ReadPhoto methodvar results = ocr.ReadPhoto(ocrInput);// Print the filtered text result to the consoleConsole.WriteLine(results.Text);
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);
ImportsIronOcr' Initialize the Tesseract OCR engineDim ocr As New IronTesseract()ocr.Configuration = New TesseractConfigurationWith { ' Whitelist only characters that appear on license plates .WhiteListCharacters = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789- ", ' Blacklist common noise characters .BlackListCharacters = "`~@#$%&*"}Dim ocrInput As New OcrInput()' Load the input imageocrInput.LoadImage("advanced-input.png")' Perform OCR on the input image with ReadPhoto methodDim results = ocr.ReadPhoto(ocrInput)' Print the filtered text result to the consoleConsole.WriteLine(results.Text)
Imports IronOcr
' Initialize the Tesseract OCR engine
Dim ocr As New IronTesseract()
ocr.Configuration = New TesseractConfiguration With {
' Whitelist only characters that appear on license plates
.WhiteListCharacters = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789- ",
' Blacklist common noise characters
.BlackListCharacters = "`~@#$%&*"
}
Dim ocrInput As New OcrInput()
' Load the input image
ocrInput.LoadImage("advanced-input.png")
' Perform OCR on the input image with ReadPhoto method
Dim results = ocr.ReadPhoto(ocrInput)
' Print the filtered text result to the console
Console.WriteLine(results.Text)
Saída
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 sobrevivem.
"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 (~), sublinhado, acento circunflexo (^), e todos os caracteres minúsculos são removidos.
A mesma abordagem WhiteListCharacters e BlackListCharacters funciona para qualquer tipo de documento, não apenas placas de licença. 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. Esses recursos são controlados por meio de TesseractConfiguration:
IronTesseract ocr = new IronTesseract();ocr.Configuration = new TesseractConfiguration{ // Enable barcode detection within documentsReadBarCodes = true, // Enable table structure detectionReadDataTables = true,};
IronTesseract ocr = new IronTesseract();
ocr.Configuration = new TesseractConfiguration
{
// Enable barcode detection within documents
ReadBarCodes = true,
// Enable table structure detection
ReadDataTables = true,
};
Dim ocr As New IronTesseract()ocr.Configuration = New TesseractConfigurationWith { .ReadBarCodes = True, .ReadDataTables = True}
Dim ocr As New IronTesseract()
ocr.Configuration = New TesseractConfiguration With {
.ReadBarCodes = True,
.ReadDataTables = True
}
ReadBarCodes: Quando definido para true, IronOCR examina o documento em busca de códigos de barras além do texto. Defina para false para ignorar a detecção de códigos de barras e acelerar o processamento quando não se esperam códigos de barras.
ReadDataTables: Quando definido para true, Tesseract tenta detectar e preservar estruturas de tabelas no documento. Isso é útil para faturas, relatórios e outros documentos tabulares.
Essas opções podem ser combinadas com WhiteListCharacters e BlackListCharacters para 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 cobre como selecionar o PageSegmentationMode correto para o tipo de documento.
Controlando o Modo de Segmentação de Página
PageSegmentationMode indica a 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 faixa que contém uma única linha, SingleLine elimina a análise em múltiplos blocos e melhora tanto a velocidade quanto a precisão.
Entrada
single-line-label.png é um rótulo de envio estreito com exatamente uma linha de texto em negrito Courier: SHIPPING LABEL: TRK-2024-XR9-001.
IronTesseract ocr = new IronTesseract();ocr.Configuration = new TesseractConfiguration{PageSegmentationMode = TesseractPageSegmentationMode.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 = TesseractPageSegmentationMode.SingleLine,
};
using OcrInput input = new OcrInput();
input.LoadImage("single-line-label.png");
OcrResult result = ocr.Read(input);
Console.WriteLine(result.Text);
ImportsIronOcrDim ocr As New IronTesseract()ocr.Configuration = New TesseractConfigurationWith { .PageSegmentationMode = TesseractPageSegmentationMode.SingleLine}Using input As New OcrInput() input.LoadImage("single-line-label.png") Dim result AsOcrResult = ocr.Read(input)Console.WriteLine(result.Text)EndUsing
Imports IronOcr
Dim ocr As New IronTesseract()
ocr.Configuration = New TesseractConfiguration With {
.PageSegmentationMode = TesseractPageSegmentationMode.SingleLine
}
Using input As New OcrInput()
input.LoadImage("single-line-label.png")
Dim result As OcrResult = ocr.Read(input)
Console.WriteLine(result.Text)
End Using
Para uma página digitalizada com posicionamento irregular de texto, SparseText recupera mais conteúdo do que Auto.
Entrada
receipt-scan.png é um recibo térmico da Corner Market com quatro itens de linha (café, muffin, suco, barra de granola), um separador pontilhado, 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.
IronTesseract ocr = new IronTesseract();ocr.Configuration = new TesseractConfiguration{PageSegmentationMode = TesseractPageSegmentationMode.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 = TesseractPageSegmentationMode.SparseText,
};
using OcrInput input = new OcrInput();
input.LoadImage("receipt-scan.png");
OcrResult result = ocr.Read(input);
Console.WriteLine(result.Text);
ImportsIronTesseractDim ocr As New IronTesseract()ocr.Configuration = New TesseractConfigurationWith { .PageSegmentationMode = TesseractPageSegmentationMode.SparseText}Using input As New OcrInput() input.LoadImage("receipt-scan.png") Dim result AsOcrResult = ocr.Read(input)Console.WriteLine(result.Text)EndUsing
Imports IronTesseract
Dim ocr As New IronTesseract()
ocr.Configuration = New TesseractConfiguration With {
.PageSegmentationMode = TesseractPageSegmentationMode.SparseText
}
Using input As New OcrInput()
input.LoadImage("receipt-scan.png")
Dim result As OcrResult = ocr.Read(input)
Console.WriteLine(result.Text)
End Using
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 junto 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 única 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");
ImportsIronTesseractDim ocr As New IronTesseract()ocr.Configuration = New TesseractConfigurationWith { .RenderSearchablePdf = True}Using input As New OcrInput() input.LoadPdf("scanned-document.pdf") Dim result AsOcrResult = ocr.Read(input) result.SaveAsSearchablePdf("searchable-output.pdf")EndUsing
Imports IronTesseract
Dim ocr As New IronTesseract()
ocr.Configuration = New TesseractConfiguration With {
.RenderSearchablePdf = True
}
Using input As New OcrInput()
input.LoadPdf("scanned-document.pdf")
Dim result As OcrResult = ocr.Read(input)
result.SaveAsSearchablePdf("searchable-output.pdf")
End Using
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 é pesquisável e copiável.
RenderHocr produz um documento hOCR, um arquivo HTML que codifica o conteúdo de texto junto 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 Q1 2024" e dois parágrafos de dados financeiros cobrindo receita, custos operacionais e impulsionadores de crescimento. O resultado é salvo como 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");
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");
ImportsIronOcrDim ocr As New IronTesseract()ocr.Configuration = New TesseractConfigurationWith { .RenderHocr = True}Using input As New OcrInput() input.LoadImage("document-page.png") Dim result AsOcrResult = ocr.Read(input) result.SaveAsHocrFile("output.html")EndUsing
Imports IronOcr
Dim ocr As New IronTesseract()
ocr.Configuration = New TesseractConfiguration With {
.RenderHocr = True
}
Using input As New OcrInput()
input.LoadImage("document-page.png")
Dim result As OcrResult = ocr.Read(input)
result.SaveAsHocrFile("output.html")
End Using
Saída
output.html codifica cada palavra reconhecida com suas coordenadas de 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 restringir 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.
Os intervalos de caracteres Unicode para Hiragana e Katakana são passados como literais de string 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.
using IronOcr;using System.IO;IronTesseract ocr = new IronTesseract();ocr.Configuration = new TesseractConfiguration{ // Whitelist only Hiragana, Katakana, numbers, and common Japanese punctuationWhiteListCharacters = "あいうえおかきくけこさしすせそたちつてとなにぬねのはひふへほまみむめもやゆよらりるれろわをん" + "アイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホマミムメモヤユヨラリルレロワヲン" + "0123456789、。?!()¥ー", // Blacklist common noise/symbols you want to ignoreBlackListCharacters = "★■§",};var ocrInput = new OcrInput();// Load Japanese input imageocrInput.LoadImage("jp.png");// Perform OCR on the input image with ReadPhoto methodvar 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");
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");
ImportsIronOcrImportsSystem.IODim ocr As New IronTesseract()ocr.Configuration = New TesseractConfigurationWith { .WhiteListCharacters = "あいうえおかきくけこさしすせそたちつてとなにぬねのはひふへほまみむめもやゆよらりるれろわをん" & "アイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホマミムメモヤユヨラリルレロワヲン" & "0123456789、。?!()¥ー", .BlackListCharacters = "★■§"}Dim ocrInput As New OcrInput()' Load Japanese input imageocrInput.LoadImage("jp.png")' Perform OCR on the input image with ReadPhoto methodDim 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")
Imports IronOcr
Imports System.IO
Dim ocr As New IronTesseract()
ocr.Configuration = New TesseractConfiguration With {
.WhiteListCharacters = "あいうえおかきくけこさしすせそたちつてとなにぬねのはひふへほまみむめもやゆよらりるれろわをん" &
"アイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホマミムメモヤユヨラリルレロワヲン" &
"0123456789、。?!()¥ー",
.BlackListCharacters = "★■§"
}
Dim ocrInput As New OcrInput()
' Load Japanese input image
ocrInput.LoadImage("jp.png")
' Perform OCR on the input image with ReadPhoto method
Dim 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")
Saída
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 na 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.
Perguntas frequentes
O que é TesseractConfiguration no IronOCR?
A opção TesseractConfiguration no IronOCR permite que os usuários personalizem as configurações de OCR, habilitando recursos avançados de leitura, como listas de caracteres permitidos, leitura de código de barras e suporte multilíngue.
Como posso configurar uma lista de caracteres permitidos no IronOCR?
No IronOCR, você pode configurar uma lista de caracteres permitidos usando o TesseractConfiguration, o que permite especificar quais caracteres o mecanismo de OCR deve reconhecer, útil para tarefas como a leitura de placas de veículos.
O IronOCR consegue ler códigos de barras e tabelas de dados?
Sim, o IronOCR pode ser configurado para ler códigos de barras e tabelas de dados ajustando configurações específicas nas propriedades do TesseractConfiguration para uma extração precisa de dados OCR.
O IronOCR oferece suporte a idiomas internacionais como chinês, japonês e coreano?
O IronOCR oferece suporte a idiomas internacionais, incluindo chinês, japonês e coreano, por meio de suas opções multilíngues de configuração do Tesseract.
Quais são os benefícios de usar configurações avançadas de OCR no IronOCR?
A utilização de configurações avançadas de OCR no IronOCR permite um reconhecimento de texto mais preciso e eficiente, suportando tarefas especializadas como o reconhecimento de texto em idiomas específicos e a extração de dados estruturados.
É possível otimizar o IronOCR para tarefas específicas de OCR?
Sim, o IronOCR pode ser otimizado para tarefas específicas de OCR configurando opções como listas de caracteres permitidos e habilitando o reconhecimento de código de barras ou tabelas, melhorando o desempenho para aplicações específicas.
Como faço para ativar o suporte multilíngue no IronOCR?
Para habilitar o suporte multilíngue no IronOCR, você pode ajustar as configurações de idioma no TesseractConfiguration, permitindo que o mecanismo de OCR reconheça textos em vários idiomas.
O que são listas de caracteres permitidos e como elas são usadas no IronOCR?
As listas de caracteres permitidos no IronOCR são listas de caracteres específicos que o mecanismo de OCR está configurado para reconhecer, ideais para tarefas específicas, como a leitura de numerais ou padrões de texto específicos.
O IronOCR pode ser usado para ler formatos de dados estruturados?
Sim, o IronOCR pode ser configurado para ler e processar formatos de dados estruturados, como códigos de barras e tabelas, oferecendo recursos versáteis de OCR para diversas necessidades de extração de dados.
Quais configurações estão disponíveis no IronOCR para reconhecimento avançado de texto?
O IronOCR oferece configurações como listas de caracteres permitidos, suporte multilíngue e reconhecimento de código de barras para aprimorar os recursos avançados de reconhecimento de texto, adaptados a requisitos específicos.
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 bem estruturados e visualmente atraentes.