# Configuración de OCR para Lectura Avanzada
IronOCR proporciona métodos avanzados de lectura de escaneo como `ReadPassport`, `ReadLicensePlate`, y `ReadPhoto` que van más allá del OCR estándar. Estos métodos son impulsados por el paquete `IronOcr.Extensions.AdvancedScan`. Para ajustar cómo estos métodos procesan el texto, IronOCR expone la clase `TesseractConfiguration`, dando a los desarrolladores control total sobre la lista blanca de caracteres, la lista negra, la detección de códigos de barras, la lectura de tablas de datos y más.
Este artículo cubre las propiedades `TesseractConfiguration` disponibles para la lectura avanzada y ejemplos prácticos para configurar OCR en escenarios del mundo real.
*as-heading:2(Inicio Rápido: Restringir la Salida de OCR a una Lista Blanca de Caracteres)*
Establezca `WhiteListCharacters` en `TesseractConfiguration` antes de llamar a `Read`. Cualquier carácter que no esté en la lista blanca se elimina silenciosamente del resultado, eliminando el ruido sin necesidad de procesamiento posterior.
```cs
:title=Apply a Character Whitelist in One Line
var input = new OcrInput(); input.LoadImage("image.png"); var result = new IronTesseract() { Configuration = new TesseractConfiguration { WhiteListCharacters = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789- " } }.Read(input); Console.WriteLine(result.Text);
```
<div class="hsg-featured-snippet">
<h2>Cómo Configurar OCR para una Lectura Avanzada</h2>
<ol>
<li><a class="js-modal-open" data-modal-id="trial-license-after-download" href="https://nuget.org/packages/IronOcr/">Instalar IronOCR desde NuGet</a></li>
<li>Instalar el paquete <a href="https://www.nuget.org/packages/IronOcr.Extensions.AdvancedScan">IronOcr.Extensions.AdvancedScan</a></li>
<li>Configure propiedades de <code>TesseractConfiguration</code> como <code>WhiteListCharacters</code> y <code>ReadBarCodes</code></li>
<li>Cargue la imagen de entrada con <code>OcrInput</code></li>
<li>Lea la imagen usando un método avanzado como <code>ReadPhoto</code>, <code>ReadLicensePlate</code> o <code>ReadPassport</code></li>
</ol>
</div>
<br class="clear" />
## Propiedades de TesseractConfiguration
La clase `TesseractConfiguration` proporciona las siguientes propiedades para personalizar el comportamiento del OCR. Estos se configuran a través de `IronTesseract.Configuration`.
<table class="table" style="text-align: left;">
<tr style="background-color: rgb(241 249 251);">
<th style="text-align: left;">Propiedad</th>
<th style="text-align: left;">Tipo</th>
<th style="text-align: left;">Descripción</th>
</tr>
<tr>
<td><code>WhiteListCharacters</code></td>
<td>string</td>
<td>Solo los caracteres presentes en esta cadena serán reconocidos en la salida de OCR. Todos los demás caracteres son excluidos.</td>
</tr>
<tr>
<td><code>BlackListCharacters</code></td>
<td>string</td>
<td>Los caracteres en esta cadena son ignorados activamente y eliminados de la salida de OCR.</td>
</tr>
<tr>
<td><code>ReadBarCodes</code></td>
<td>bool</td>
<td>Habilita o deshabilita la detección de códigos de barras dentro del documento durante el procesamiento de OCR.</td>
</tr>
<tr>
<td><code>ReadDataTables</code></td>
<td>bool</td>
<td>Habilita o deshabilita la detección de estructura de tablas dentro del documento usando Tesseract.</td>
</tr>
<tr>
<td><code>PageSegmentationMode</code></td>
<td>TesseractPageSegmentationMode</td>
<td>Determina cómo Tesseract segmenta la imagen de entrada. Las opciones incluyen <code>AutoOsd</code>, <code>Auto</code>, <code>SingleBlock</code>, <code>SingleLine</code>, <code>SingleWord</code>, y más.</td>
</tr>
<tr>
<td><code>RenderSearchablePdf</code></td>
<td>bool</td>
<td>Cuando está habilitado, la salida de OCR puede guardarse como un PDF buscable con una capa de texto invisible.</td>
</tr>
<tr>
<td><code>RenderHocr</code></td>
<td>bool</td>
<td>Cuando está habilitado, la salida de OCR incluye datos hOCR para un procesamiento adicional o exportación.</td>
</tr>
<tr>
<td><code>TesseractVariables</code></td>
<td>Dictionary<string, object></td>
<td>Proporciona acceso directo a las variables de configuración de Tesseract a bajo nivel para un control detallado.</td>
</tr>
</table>
El diccionario `TesseractVariables` va aún más allá, exponiendo cientos de parámetros subyacentes del motor Tesseract para casos donde las propiedades de alto nivel no son suficientes.
Los ejemplos a continuación demuestran cada grupo de propiedades, comenzando con la lista blanca de caracteres.
## Configurar una lista blanca de caracteres para matrículas
Un caso de uso común para `WhiteListCharacters` es restringir la salida de OCR solo a los caracteres que pueden aparecer en una placa de matrícula: letras mayúsculas, dígitos, guiones y espacios. Esto elimina el ruido y mejora la precisión al indicar al motor que ignore cualquier cosa fuera del conjunto de caracteres esperado.
### Entrada
El siguiente registro de matrícula contiene una mezcla de texto en mayúsculas, texto en minúsculas, símbolos especiales (`@`, `$`, `#`, `|`, `~`, `^`, `*`), y puntuación.
<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 matrícula de vehículo con caracteres mixtos para demostración de lista blanca de OCR" class="img-responsive add-shadow" />
</div>
</div>
`BlackListCharacters` complementa la lista blanca excluyendo activamente los símbolos de ruido conocidos como ` ``, `~`, `@`, `#`, `$`, `%`, `&` y `*`.
```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);
```
### Resultado
<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="Salida de OCR que muestra solo los caracteres de la matrícula incluidos en la lista blanca" class="img-responsive add-shadow" />
</div>
</div>
El filtrado de la lista blanca es claramente visible en los resultados:
- **"Placa: ABC-1234"** se convierte en **"P ABC-1234"**. La palabra en minúsculas "late:" se elimina, mientras que el número de placa se conserva exactamente.
- **"VIN: 1HGBH41JXMN109186"** se convierte en **"VIN 1HGBH41JXMN109186"**. El colon se elimina, pero el VIN en mayúsculas y el número completo se mantienen.
- **"Propietario: john.doe@email.com"** se convierte en **"O"**. Todo el correo electrónico en minúsculas y la puntuación se eliminan.
- **"Región: CA-90210| Zona #5"** se convierte en **"R CA-90210 Z 5"**. La tubería (`|`) y el hash (`#`) se eliminan, mientras que las letras mayúsculas y los números sobreviven.
- **"Tasa: $125.00 + impuesto\*"** se convierte en **"F 12500"**. El signo de dólar, el punto decimal, el signo más y "impuesto" en minúsculas se eliminan.
- **"Ref: ~record_v2^final"** se convierte en **"R 2"**. La tilde (`~`), el guion bajo, el acento circunflejo (`^`) y todos los caracteres en minúsculas se eliminan.
El mismo enfoque `WhiteListCharacters` y `BlackListCharacters` funciona para cualquier tipo de documento, no solo para placas de matrícula. La siguiente sección muestra cómo extender una lectura para detectar códigos de barras y estructuras de tablas en la misma pasada.
## Configurando la lectura de códigos de barras y tablas de datos
IronOCR puede detectar códigos de barras y tablas estructuradas dentro de documentos junto con texto. Estas características se controlan a través 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**: Cuando se establece en `true`, IronOCR escanea el documento en busca de códigos de barras además de texto. Establecer en `false` para omitir la detección de códigos de barras y acelerar el procesamiento cuando no se esperan códigos de barras.
- **ReadDataTables**: Cuando se establece en `true`, Tesseract intenta detectar y preservar las estructuras de tablas en el documento. Esto es útil para facturas, informes y otros documentos tabulares.
Estas opciones se pueden combinar con `WhiteListCharacters` y `BlackListCharacters` para un control preciso sobre lo que se extrae de documentos complejos.
Mientras que el filtrado y la detección controla lo que se extrae, la interpretación del diseño es una preocupación separada. La siguiente sección cubre cómo seleccionar el `PageSegmentationMode` correcto para el tipo de documento.
## Controlando el modo de segmentación de página
`PageSegmentationMode` le dice a Tesseract cómo segmentar la imagen de entrada antes del reconocimiento. Elegir el modo incorrecto para un diseño determinado hace que el motor lea mal o pase por alto texto por completo.
| Modo | Caso práctico|
|---|---|
| `AutoOsd` | Análisis de diseño automático con detección de orientación y guión |
| `Auto` | Análisis de diseño automático sin OSD (por defecto) |
| `SingleColumn` | Asume que la imagen es una sola columna de texto |
| `SingleBlock` | Asume que la imagen es un solo bloque uniforme de texto |
| `SingleLine` | Asume que la imagen es una sola línea de texto |
| `SparseText` | Busca tanto texto como sea posible en cualquier orden |
Para una etiqueta o pancarta que contiene una sola línea, `SingleLine` elimina el análisis de múltiples bloques y mejora tanto la velocidad como la precisión.
### Entrada
`single-line-label.png` es una etiqueta de envío estrecha con exactamente una línea de texto en negrita 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 envío de una sola línea para el modo de segmentación 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 una página escaneada con colocación irregular de texto, `SparseText` recupera más contenido que `Auto`.
### Entrada
`receipt-scan.png` es un recibo térmico de Corner Market con cuatro artículos en la lista (café, muffin, jugo, barra de granola), un separador punteado, subtotal, impuestos y total. Este es el tipo de diseño donde la segmentación de bloque fijo omite entradas en diferentes posiciones horizontales.
<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 modo de segmentación OCR SparseText" 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);
```
Con la segmentación de diseño ajustada al tipo de documento, el siguiente paso es controlar el formato de salida para el procesamiento posterior.
## Generando PDFs buscables y salida hOCR
`RenderSearchablePdf` y `RenderHocr` controlan los formatos de salida que IronOCR produce junto con el resultado de texto plano.
**`RenderSearchablePdf`** incrusta una capa de texto invisible sobre la imagen original, produciendo un PDF donde los usuarios pueden buscar y copiar texto mientras la imagen escaneada sigue siendo visible. Este es el formato de salida estándar para flujos de trabajo de archivo de documentos.
### Entrada
`scanned-document.pdf` es una carta comercial de una sola página de IronOCR Solutions Ltd. (con fecha del 15 de marzo de 2024, referencia DOC-2024-OCR-0315). El resultado se guarda 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");
```
### Resultado
La salida es un PDF que parece idéntico a la entrada pero contiene una capa de texto oculta. Abre `searchable-output.pdf` y utiliza Ctrl+F para verificar que el texto incrustado sea buscable y copiable.
<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`** produce un documento hOCR, un archivo HTML que codifica el contenido del texto junto con las coordenadas de la caja delimitadora para cada palabra. Esto es útil cuando las herramientas posteriores necesitan una posición precisa de las palabras, por ejemplo, motores de redacción o análisis de diseño de documentos.
### Entrada
`document-page.png` es una página de documento con el encabezado "Resumen trimestral Q1 2024" y dos párrafos de datos financieros que cubren ingresos, costos operativos y factores de crecimiento. El resultado se guarda 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 de documento para salida de cuadro delimitador 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");
```
### Resultado
`output.html` codifica cada palabra reconocida con sus coordenadas de la caja delimitadora. Abra el archivo en un navegador para inspeccionar la estructura de hOCR, o páselo a una herramienta posterior para análisis de diseño o redacción.
<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>
Ambos indicadores se pueden habilitar al mismo tiempo si necesita los tres formatos de salida (texto plano, PDF buscable y hOCR) de una sola llamada de lectura.
Estos indicadores de salida funcionan independientemente del idioma que se lee, incluidos los guiones no latinos. La siguiente sección muestra cómo aplicar el filtrado de caracteres a texto en japonés.
## Filtrado de caracteres Unicode para documentos internacionales
Para documentos internacionales en chino, japonés o coreano, las propiedades `WhiteListCharacters` y `BlackListCharacters` funcionan con caracteres Unicode. Esto le permite restringir la salida a scripts específicos, como solo Hiragana y Katakana para japonés.
[[i:( Asegúrese de que el paquete de idioma correspondiente esté instalado (por ejemplo, [IronOcr.Languages.Japanese](https://www.nuget.org/packages/IronOcr.Languages.Japanese)) antes de continuar.)]]
### Entrada
El documento contiene un título (テスト), una oración japonesa que mezcla hiragana y katakana con variantes de marcas de voz (プ, で), una línea de precio con símbolos de ruido en lista negra (★, ■) y kanji (価格), y una línea de memo con otro símbolo en lista negra (§), más kanji (購入), variantes de marcas de voz adicionales (プ, デ), y katakana base (メモ, ール). La lista blanca solo pasa hiragana base, katakana base, dígitos y puntuación japonesa común; los tres símbolos de ruido están explícitamente en 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="Configuración avanzada de OCR entrada en japonés" class="img-responsive add-shadow" />
</div>
</div>
Los rangos de caracteres Unicode para Hiragana y Katakana se pasan como literales de cadena en `WhiteListCharacters`, con los símbolos de ruido listados en `BlackListCharacters`.
[[w:(La consola puede no soportar mostrar caracteres Unicode. Redirigir la salida a un archivo .txt es una forma confiable de verificar los resultados al tratar con tales 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");
```
### Resultado
<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="Configuración avanzada de OCR salida en japonés" class="img-responsive add-shadow" />
</div>
</div>
La salida filtrada completa está disponible como un archivo de texto: [jp-output.txt](/static-assets/ocr/how-to/ocr-configurations-for-advanced-reading/jp-output.txt).
Debido a que la lista blanca incluye solo caracteres hiragana y katakana base, las variantes de marcas de voz derivadas como プ (pu) y デ (de) se eliminan. Los caracteres kanji como 価格 (precio) y 購入 (compra) también se excluyen ya que están fuera del conjunto de caracteres en lista blanca. Los símbolos incluidos en la lista negra como `★`, `■` y `§` se eliminan activamente independientemente de la lista blanca.
## ¿Qué paso debo dar a continuación?
Ahora que comprende cómo configurar IronOCR para escenarios de lectura avanzada, explore:
- Leer tipos específicos de documentos como [pasaportes](https://ironsoftware.com/csharp/ocr/how-to/read-passport/) y [matrículas](https://ironsoftware.com/csharp/ocr/how-to/read-license-plate/)
- Lectura de [código de barras y códigos QR](https://ironsoftware.com/csharp/ocr/how-to/barcodes/) como un caso de uso OCR independiente
- [Exportación de hOCR y PDFs buscables](https://ironsoftware.com/csharp/ocr/how-to/html-hocr-export/) a partir de resultados procesados
Para el uso en producción, recuerde [obtener una licencia](https://ironsoftware.com/csharp/ocr/licensing/) para eliminar las marcas de agua y acceder a la funcionalidad completa.
IronOCR proporciona métodos avanzados de lectura de escaneo como ReadPassport, ReadLicensePlate, y ReadPhoto que van más allá del OCR estándar. Estos métodos son impulsados por el paquete IronOcr.Extensions.AdvancedScan. Para ajustar cómo estos métodos procesan el texto, IronOCR expone la clase TesseractConfiguration, dando a los desarrolladores control total sobre la lista blanca de caracteres, la lista negra, la detección de códigos de barras, la lectura de tablas de datos y más.
Este artículo cubre las propiedades TesseractConfiguration disponibles para la lectura avanzada y ejemplos prácticos para configurar OCR en escenarios del mundo real.
Inicio Rápido: Restringir la Salida de OCR a una Lista Blanca de Caracteres
Establezca WhiteListCharacters en TesseractConfiguration antes de llamar a Read. Cualquier carácter que no esté en la lista blanca se elimina silenciosamente del resultado, eliminando el ruido sin necesidad de procesamiento posterior.
1Install IronOCR with NuGet Package Manager
PM > Install-Package IronOcr
Install-Package IronOcr
2Copie y ejecute este fragmento de código.
var input = new OcrInput(); input.LoadImage("image.png"); var result = new IronTesseract() { Configuration = new TesseractConfiguration { WhiteListCharacters = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789- " } }.Read(input); Console.WriteLine(result.Text);
var input = new OcrInput(); input.LoadImage("image.png"); var result = new IronTesseract() { Configuration = new TesseractConfiguration { WhiteListCharacters = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789- " } }.Read(input); Console.WriteLine(result.Text);
C#
3Despliegue para probar en su entorno real
Comienza a usar IronOCR en tu proyecto hoy mismo con una prueba gratuita
Configure propiedades de TesseractConfiguration como WhiteListCharacters y ReadBarCodes
Cargue la imagen de entrada con OcrInput
Lea la imagen usando un método avanzado como ReadPhoto, ReadLicensePlate o ReadPassport
Propiedades de TesseractConfiguration
La clase TesseractConfiguration proporciona las siguientes propiedades para personalizar el comportamiento del OCR. Estos se configuran a través de IronTesseract.Configuration.
Propiedad
Tipo
Descripción
WhiteListCharacters
string
Solo los caracteres presentes en esta cadena serán reconocidos en la salida de OCR. Todos los demás caracteres son excluidos.
BlackListCharacters
string
Los caracteres en esta cadena son ignorados activamente y eliminados de la salida de OCR.
ReadBarCodes
bool
Habilita o deshabilita la detección de códigos de barras dentro del documento durante el procesamiento de OCR.
ReadDataTables
bool
Habilita o deshabilita la detección de estructura de tablas dentro del documento usando Tesseract.
PageSegmentationMode
TesseractPageSegmentationMode
Determina cómo Tesseract segmenta la imagen de entrada. Las opciones incluyen AutoOsd, Auto, SingleBlock, SingleLine, SingleWord, y más.
RenderSearchablePdf
bool
Cuando está habilitado, la salida de OCR puede guardarse como un PDF buscable con una capa de texto invisible.
RenderHocr
bool
Cuando está habilitado, la salida de OCR incluye datos hOCR para un procesamiento adicional o exportación.
TesseractVariables
Dictionary<string, object>
Proporciona acceso directo a las variables de configuración de Tesseract a bajo nivel para un control detallado.
El diccionario TesseractVariables va aún más allá, exponiendo cientos de parámetros subyacentes del motor Tesseract para casos donde las propiedades de alto nivel no son suficientes.
Los ejemplos a continuación demuestran cada grupo de propiedades, comenzando con la lista blanca de caracteres.
Configurar una lista blanca de caracteres para matrículas
Un caso de uso común para WhiteListCharacters es restringir la salida de OCR solo a los caracteres que pueden aparecer en una placa de matrícula: letras mayúsculas, dígitos, guiones y espacios. Esto elimina el ruido y mejora la precisión al indicar al motor que ignore cualquier cosa fuera del conjunto de caracteres esperado.
Entrada
El siguiente registro de matrícula contiene una mezcla de texto en mayúsculas, texto en minúsculas, símbolos especiales (@, $, #, |, ~, ^, *), y puntuación.
BlackListCharacters complementa la lista blanca excluyendo activamente los símbolos de ruido conocidos como ``,~, @, #, $, %, &y*`.
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)
Resultado
El filtrado de la lista blanca es claramente visible en los resultados:
"Placa: ABC-1234" se convierte en "P ABC-1234". La palabra en minúsculas "late:" se elimina, mientras que el número de placa se conserva exactamente.
"VIN: 1HGBH41JXMN109186" se convierte en "VIN 1HGBH41JXMN109186". El colon se elimina, pero el VIN en mayúsculas y el número completo se mantienen.
"Propietario: john.doe@email.com" se convierte en "O". Todo el correo electrónico en minúsculas y la puntuación se eliminan.
"Región: CA-90210| Zona #5" se convierte en "R CA-90210 Z 5". La tubería (|) y el hash (#) se eliminan, mientras que las letras mayúsculas y los números sobreviven.
"Tasa: $125.00 + impuesto*" se convierte en "F 12500". El signo de dólar, el punto decimal, el signo más y "impuesto" en minúsculas se eliminan.
"Ref: ~record_v2^final" se convierte en "R 2". La tilde (~), el guion bajo, el acento circunflejo (^) y todos los caracteres en minúsculas se eliminan.
El mismo enfoque WhiteListCharacters y BlackListCharacters funciona para cualquier tipo de documento, no solo para placas de matrícula. La siguiente sección muestra cómo extender una lectura para detectar códigos de barras y estructuras de tablas en la misma pasada.
Configurando la lectura de códigos de barras y tablas de datos
IronOCR puede detectar códigos de barras y tablas estructuradas dentro de documentos junto con texto. Estas características se controlan a través 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: Cuando se establece en true, IronOCR escanea el documento en busca de códigos de barras además de texto. Establecer en false para omitir la detección de códigos de barras y acelerar el procesamiento cuando no se esperan códigos de barras.
ReadDataTables: Cuando se establece en true, Tesseract intenta detectar y preservar las estructuras de tablas en el documento. Esto es útil para facturas, informes y otros documentos tabulares.
Estas opciones se pueden combinar con WhiteListCharacters y BlackListCharacters para un control preciso sobre lo que se extrae de documentos complejos.
Mientras que el filtrado y la detección controla lo que se extrae, la interpretación del diseño es una preocupación separada. La siguiente sección cubre cómo seleccionar el PageSegmentationMode correcto para el tipo de documento.
Controlando el modo de segmentación de página
PageSegmentationMode le dice a Tesseract cómo segmentar la imagen de entrada antes del reconocimiento. Elegir el modo incorrecto para un diseño determinado hace que el motor lea mal o pase por alto texto por completo.
Modo
Caso práctico
AutoOsd
Análisis de diseño automático con detección de orientación y guión
Auto
Análisis de diseño automático sin OSD (por defecto)
SingleColumn
Asume que la imagen es una sola columna de texto
SingleBlock
Asume que la imagen es un solo bloque uniforme de texto
SingleLine
Asume que la imagen es una sola línea de texto
SparseText
Busca tanto texto como sea posible en cualquier orden
Para una etiqueta o pancarta que contiene una sola línea, SingleLine elimina el análisis de múltiples bloques y mejora tanto la velocidad como la precisión.
Entrada
single-line-label.png es una etiqueta de envío estrecha con exactamente una línea de texto en negrita 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 una página escaneada con colocación irregular de texto, SparseText recupera más contenido que Auto.
Entrada
receipt-scan.png es un recibo térmico de Corner Market con cuatro artículos en la lista (café, muffin, jugo, barra de granola), un separador punteado, subtotal, impuestos y total. Este es el tipo de diseño donde la segmentación de bloque fijo omite entradas en diferentes posiciones horizontales.
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
Con la segmentación de diseño ajustada al tipo de documento, el siguiente paso es controlar el formato de salida para el procesamiento posterior.
Generando PDFs buscables y salida hOCR
RenderSearchablePdf y RenderHocr controlan los formatos de salida que IronOCR produce junto con el resultado de texto plano.
RenderSearchablePdf incrusta una capa de texto invisible sobre la imagen original, produciendo un PDF donde los usuarios pueden buscar y copiar texto mientras la imagen escaneada sigue siendo visible. Este es el formato de salida estándar para flujos de trabajo de archivo de documentos.
Entrada
scanned-document.pdf es una carta comercial de una sola página de IronOCR Solutions Ltd. (con fecha del 15 de marzo de 2024, referencia DOC-2024-OCR-0315). El resultado se guarda 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
Resultado
La salida es un PDF que parece idéntico a la entrada pero contiene una capa de texto oculta. Abre searchable-output.pdf y utiliza Ctrl+F para verificar que el texto incrustado sea buscable y copiable.
RenderHocr produce un documento hOCR, un archivo HTML que codifica el contenido del texto junto con las coordenadas de la caja delimitadora para cada palabra. Esto es útil cuando las herramientas posteriores necesitan una posición precisa de las palabras, por ejemplo, motores de redacción o análisis de diseño de documentos.
Entrada
document-page.png es una página de documento con el encabezado "Resumen trimestral Q1 2024" y dos párrafos de datos financieros que cubren ingresos, costos operativos y factores de crecimiento. El resultado se guarda 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
Resultado
output.html codifica cada palabra reconocida con sus coordenadas de la caja delimitadora. Abra el archivo en un navegador para inspeccionar la estructura de hOCR, o páselo a una herramienta posterior para análisis de diseño o redacción.
Ambos indicadores se pueden habilitar al mismo tiempo si necesita los tres formatos de salida (texto plano, PDF buscable y hOCR) de una sola llamada de lectura.
Estos indicadores de salida funcionan independientemente del idioma que se lee, incluidos los guiones no latinos. La siguiente sección muestra cómo aplicar el filtrado de caracteres a texto en japonés.
Filtrado de caracteres Unicode para documentos internacionales
Para documentos internacionales en chino, japonés o coreano, las propiedades WhiteListCharacters y BlackListCharacters funcionan con caracteres Unicode. Esto le permite restringir la salida a scripts específicos, como solo Hiragana y Katakana para japonés.
Por favor nota: Asegúrese de que el paquete de idioma correspondiente esté instalado (por ejemplo, IronOcr.Languages.Japanese) antes de continuar.
Entrada
El documento contiene un título (テスト), una oración japonesa que mezcla hiragana y katakana con variantes de marcas de voz (プ, で), una línea de precio con símbolos de ruido en lista negra (★, ■) y kanji (価格), y una línea de memo con otro símbolo en lista negra (§), más kanji (購入), variantes de marcas de voz adicionales (プ, デ), y katakana base (メモ, ール). La lista blanca solo pasa hiragana base, katakana base, dígitos y puntuación japonesa común; los tres símbolos de ruido están explícitamente en lista negra.
Los rangos de caracteres Unicode para Hiragana y Katakana se pasan como literales de cadena en WhiteListCharacters, con los símbolos de ruido listados en BlackListCharacters.
Advertencia: La consola puede no soportar mostrar caracteres Unicode. Redirigir la salida a un archivo .txt es una forma confiable de verificar los resultados al tratar con tales 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")
Resultado
La salida filtrada completa está disponible como un archivo de texto: jp-output.txt.
Debido a que la lista blanca incluye solo caracteres hiragana y katakana base, las variantes de marcas de voz derivadas como プ (pu) y デ (de) se eliminan. Los caracteres kanji como 価格 (precio) y 購入 (compra) también se excluyen ya que están fuera del conjunto de caracteres en lista blanca. Los símbolos incluidos en la lista negra como ★, ■ y § se eliminan activamente independientemente de la lista blanca.
¿Qué paso debo dar a continuación?
Ahora que comprende cómo configurar IronOCR para escenarios de lectura avanzada, explore:
Para el uso en producción, recuerde obtener una licencia para eliminar las marcas de agua y acceder a la funcionalidad completa.
Preguntas Frecuentes
¿Qué es TesseractConfiguration en IronOCR?
TesseractConfiguration en IronOCR permite a los usuarios personalizar la configuración del OCR, habilitando capacidades de lectura avanzadas como listas blancas de caracteres, lectura de BarCode y soporte multilingüe.
¿Cómo puedo configurar una lista blanca de caracteres en IronOCR?
En IronOCR, puedes configurar una lista blanca de caracteres mediante TesseractConfiguration, lo que te permite especificar qué caracteres debe reconocer el motor OCR, algo útil para tareas como la lectura de matrículas.
¿Puede IronOCR leer BARCODES y tablas de datos?
Sí, IronOCR se puede configurar para leer BarCodes y tablas de datos ajustando parámetros específicos en las propiedades de TesseractConfiguration para una extracción precisa de datos mediante OCR.
¿Es compatible IronOCR con idiomas internacionales como el chino, el japonés y el coreano?
IronOCR admite idiomas internacionales, incluidos el chino, el japonés y el coreano, a través de sus opciones multilingües de TesseractConfiguration.
¿Cuáles son las ventajas de utilizar configuraciones avanzadas de OCR en IronOCR?
El uso de configuraciones avanzadas de OCR en IronOCR permite un reconocimiento de texto más preciso y eficiente, lo que facilita tareas especializadas como el reconocimiento de texto específico de un idioma y la extracción de datos estructurados.
¿Es posible optimizar IronOCR para tareas específicas de OCR?
Sí, IronOCR se puede optimizar para tareas específicas de OCR configurando ajustes como listas blancas de caracteres y habilitando el reconocimiento de BARCODE o tablas, lo que mejora el rendimiento para las aplicaciones específicas.
¿Cómo activo la compatibilidad multilingüe en IronOCR?
Para habilitar la compatibilidad multilingüe en IronOCR, puede ajustar la configuración de idioma en TesseractConfiguration, lo que permite al motor OCR reconocer texto en varios idiomas.
¿Qué son las listas blancas de caracteres y cómo se utilizan en IronOCR?
Las listas blancas de caracteres en IronOCR son listas de caracteres específicos que el motor OCR está configurado para reconocer, ideales para tareas específicas como la lectura de números o patrones de texto concretos.
¿Se puede utilizar IronOCR para leer formatos de datos estructurados?
Sí, IronOCR se puede configurar para leer y procesar formatos de datos estructurados, como BarCodes y tablas, lo que proporciona capacidades de OCR versátiles para diversas necesidades de extracción de datos.
¿Qué configuraciones hay disponibles en IronOCR para el reconocimiento de texto avanzado?
IronOCR ofrece configuraciones como listas blancas de caracteres, compatibilidad multilingüe y reconocimiento de BARCODES para mejorar las capacidades avanzadas de reconocimiento de texto adaptadas a requisitos específicos.
Curtis Chau tiene una licenciatura en Ciencias de la Computación (Carleton University) y se especializa en el desarrollo front-end con experiencia en Node.js, TypeScript, JavaScript y React. Apasionado por crear interfaces de usuario intuitivas y estéticamente agradables, disfruta trabajando con frameworks modernos y creando manuales bien estructurados y visualmente atractivos.