Cómo usar valores de confianza de Tesseract OCR en C# | IronOCR

Cómo obtener confianza en la lectura de C# OCR con IronOCR

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

La confianza de lectura de IronOCR indica el grado de certeza del sistema de reconocimiento óptico de caracteres en cuanto a la precisión del texto reconocido, con valores de 0 a 100 en los que las puntuaciones más altas significan mayor fiabilidad; acceda a ella mediante la propiedad Confidence de cualquier objeto OcrResult.

La confianza en la lectura en OCR (Reconocimiento Óptico de Caracteres) se refiere al nivel de certeza o fiabilidad que el sistema OCR asigna a la precisión del texto que ha reconocido en una imagen o documento. Es una medida de cuán seguro está el sistema OCR de que el texto reconocido es correcto. Esta métrica adquiere especial importancia al procesar documentos escaneados, fotos o cualquier imagen en la que la calidad del texto pueda variar.

Una puntuación de alta confianza indica un alto grado de certeza de que el reconocimiento es preciso, mientras que una puntuación de baja confianza sugiere que el reconocimiento puede ser menos fiable. La comprensión de estos niveles de confianza ayuda a los desarrolladores a implementar una lógica de validación y una gestión de errores adecuadas en sus aplicaciones.

<Descripción: Diagrama o captura de pantalla que ilustre el concepto de código -->

Inicio Rápido: Obtener Confianza de Lectura en OCR en Una Línea

Utilice el método Read de IronTesseract con una ruta de archivo de imagen y, a continuación, acceda a la propiedad Confidence del OcrResult devuelto para comprobar el grado de certeza de IronOCR en el reconocimiento de texto. Es una forma sencilla y fiable de empezar a evaluar la precisión del resultado del OCR.

Nuget IconEmpieza a crear PDF con NuGet ahora:

  1. Instalar IronOCR con el gestor de paquetes NuGet

    PM > Install-Package IronOcr

  2. Copie y ejecute este fragmento de código.

    double confidence = new IronOcr.IronTesseract().Read("input.png").Confidence;
  3. Despliegue para probar en su entorno real

    Empieza a utilizar IronOCR en tu proyecto hoy mismo con una prueba gratuita
    arrow pointer


¿Cómo consigo confianza de lectura en C#?

Después de realizar OCR en la imagen de entrada, el nivel de confianza del texto se almacena en la propiedad Confidence. Utilice la instrucción 'using' para liberar automáticamente los objetos después de su uso. Agregue documentos como imágenes y PDFs con las clases OcrImageInput y OcrPdfInput, respectivamente. El método Read devolverá un objeto OcrResult que permite acceder a la propiedad Confidence.

:path=/static-assets/ocr/content-code-examples/how-to/tesseract-result-confidence-get-confidence.cs
using IronOcr;

// Instantiate IronTesseract
IronTesseract ocrTesseract = new IronTesseract();

// Add image
using var imageInput = new OcrImageInput("sample.tiff");
// Perform OCR
OcrResult ocrResult = ocrTesseract.Read(imageInput);

// Get confidence level
double confidence = ocrResult.Confidence;
Imports IronOcr

' Instantiate IronTesseract
Private ocrTesseract As New IronTesseract()

' Add image
Private imageInput = New OcrImageInput("sample.tiff")
' Perform OCR
Private ocrResult As OcrResult = ocrTesseract.Read(imageInput)

' Get confidence level
Private confidence As Double = ocrResult.Confidence
$vbLabelText   $csharpLabel

El valor de confianza devuelto oscila entre 0 y 100, donde:

  • 90-100: Confianza excelente - El texto es muy fiable
  • 80-89: Buena confianza - El texto es generalmente preciso con pequeñas incertidumbres
  • 70-79: Confianza moderada - El texto puede contener algunos errores
  • Inferior a 70: Confianza baja - El texto debe ser revisado o reprocesado

¿Cómo puedo obtener confianza a distintos niveles?

No solo puede recuperar el nivel de confianza de todo el documento, sino también acceder a los niveles de confianza de cada página, párrafo, línea, palabra y carácter. Además, puede obtener la confianza de un bloque, que representa una colección de uno o más párrafos ubicados de cerca.

<Descripción: Diagrama o captura de pantalla que ilustre el concepto de código -->

:path=/static-assets/ocr/content-code-examples/how-to/tesseract-result-confidence-confidence-level.cs
// Get page confidence level
double pageConfidence = ocrResult.Pages[0].Confidence;

// Get paragraph confidence level
double paragraphConfidence = ocrResult.Paragraphs[0].Confidence;

// Get line confidence level
double lineConfidence = ocrResult.Lines[0].Confidence;

// Get word confidence level
double wordConfidence = ocrResult.Words[0].Confidence;

// Get character confidence level
double characterConfidence = ocrResult.Characters[0].Confidence;

// Get block confidence level
double blockConfidence = ocrResult.Blocks[0].Confidence;
' Get page confidence level
Dim pageConfidence As Double = ocrResult.Pages(0).Confidence

' Get paragraph confidence level
Dim paragraphConfidence As Double = ocrResult.Paragraphs(0).Confidence

' Get line confidence level
Dim lineConfidence As Double = ocrResult.Lines(0).Confidence

' Get word confidence level
Dim wordConfidence As Double = ocrResult.Words(0).Confidence

' Get character confidence level
Dim characterConfidence As Double = ocrResult.Characters(0).Confidence

' Get block confidence level
Dim blockConfidence As Double = ocrResult.Blocks(0).Confidence
$vbLabelText   $csharpLabel

Ejemplo práctico: Filtrado por confianza

Al procesar documentos de calidad variable, como escaneados de baja calidad, puede utilizar puntuaciones de confianza para filtrar los resultados:

using IronOcr;
using System.Linq;

// Instantiate IronTesseract
IronTesseract ocrTesseract = new IronTesseract();

// Configure for better accuracy
ocrTesseract.Configuration.ReadBarCodes = false;
ocrTesseract.Configuration.PageSegmentationMode = TesseractPageSegmentationMode.AutoOsd;

// Add image
using var imageInput = new OcrImageInput("invoice.png");
// Apply filters to improve quality
imageInput.Deskew();
imageInput.DeNoise();

// Perform OCR
OcrResult ocrResult = ocrTesseract.Read(imageInput);

// Filter words with confidence above 85%
var highConfidenceWords = ocrResult.Words
    .Where(word => word.Confidence >= 85)
    .Select(word => word.Text)
    .ToList();

// Process only high-confidence text
string reliableText = string.Join(" ", highConfidenceWords);
Console.WriteLine($"High confidence text: {reliableText}");

// Flag low-confidence words for manual review
var lowConfidenceWords = ocrResult.Words
    .Where(word => word.Confidence < 85)
    .Select(word => new { word.Text, word.Confidence })
    .ToList();

foreach (var word in lowConfidenceWords)
{
    Console.WriteLine($"Review needed: '{word.Text}' (Confidence: {word.Confidence:F2}%)");
}
using IronOcr;
using System.Linq;

// Instantiate IronTesseract
IronTesseract ocrTesseract = new IronTesseract();

// Configure for better accuracy
ocrTesseract.Configuration.ReadBarCodes = false;
ocrTesseract.Configuration.PageSegmentationMode = TesseractPageSegmentationMode.AutoOsd;

// Add image
using var imageInput = new OcrImageInput("invoice.png");
// Apply filters to improve quality
imageInput.Deskew();
imageInput.DeNoise();

// Perform OCR
OcrResult ocrResult = ocrTesseract.Read(imageInput);

// Filter words with confidence above 85%
var highConfidenceWords = ocrResult.Words
    .Where(word => word.Confidence >= 85)
    .Select(word => word.Text)
    .ToList();

// Process only high-confidence text
string reliableText = string.Join(" ", highConfidenceWords);
Console.WriteLine($"High confidence text: {reliableText}");

// Flag low-confidence words for manual review
var lowConfidenceWords = ocrResult.Words
    .Where(word => word.Confidence < 85)
    .Select(word => new { word.Text, word.Confidence })
    .ToList();

foreach (var word in lowConfidenceWords)
{
    Console.WriteLine($"Review needed: '{word.Text}' (Confidence: {word.Confidence:F2}%)");
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

¿Qué son las opciones de caracteres en OCR?

Además del nivel de confianza, hay otra propiedad interesante llamada Choices. Choices contiene una lista de opciones alternativas de palabras y su relevancia estadística. Esta información permite al usuario acceder a otros caracteres posibles. Esta función es especialmente útil cuando se trabaja con múltiples idiomas o fuentes especializadas.

:path=/static-assets/ocr/content-code-examples/how-to/tesseract-result-confidence-get-choices.cs
using IronOcr;
using static IronOcr.OcrResult;

// Instantiate IronTesseract
IronTesseract ocrTesseract = new IronTesseract();

// Add image
using var imageInput = new OcrImageInput("Potter.tiff");
// Perform OCR
OcrResult ocrResult = ocrTesseract.Read(imageInput);

// Get choices
Choice[] choices = ocrResult.Characters[0].Choices;
Imports IronOcr
Imports IronOcr.OcrResult

' Instantiate IronTesseract
Private ocrTesseract As New IronTesseract()

' Add image
Private imageInput = New OcrImageInput("Potter.tiff")
' Perform OCR
Private ocrResult As OcrResult = ocrTesseract.Read(imageInput)

' Get choices
Private choices() As Choice = ocrResult.Characters(0).Choices
$vbLabelText   $csharpLabel

¿Cómo ayudan las opciones de caracteres alternativos?

La elección de caracteres alternativos ofrece varias ventajas:

  1. Resolución de ambigüedades: Cuando se confunden caracteres como 'O' y '0', o 'l' y '1'
  2. Variaciones tipográficas: Diferentes interpretaciones para fuentes estilizadas o decorativas
  3. Cuestiones de calidad: Múltiples posibilidades cuando se trata de texto degradado
  4. Contexto lingüístico: Interpretaciones alternativas basadas en las reglas lingüísticas
Vista de depuración de las opciones de caracteres del OCR que muestra las puntuaciones de confianza y los resultados del reconocimiento de texto para el  related to ¿Cómo ayudan las opciones de caracteres alternativos?

Trabajar con caracteres

Aquí tienes un ejemplo completo que muestra cómo utilizar la selección de caracteres para mejorar la precisión:

using IronOcr;
using System;
using System.Linq;
using static IronOcr.OcrResult;

// Configure IronTesseract for detailed results
IronTesseract ocrTesseract = new IronTesseract();

// Process image with potential ambiguities
using var imageInput = new OcrImageInput("ambiguous_text.png");
OcrResult ocrResult = ocrTesseract.Read(imageInput);

// Analyze character choices for each word
foreach (var word in ocrResult.Words)
{
    Console.WriteLine($"\nWord: '{word.Text}' (Confidence: {word.Confidence:F2}%)");

    // Check each character in the word
    foreach (var character in word.Characters)
    {
        if (character.Choices != null && character.Choices.Length > 1)
        {
            Console.WriteLine($"  Character '{character.Text}' has alternatives:");

            // Display all choices sorted by confidence
            foreach (var choice in character.Choices.OrderByDescending(c => c.Confidence))
            {
                Console.WriteLine($"    - '{choice.Text}': {choice.Confidence:F2}%");
            }
        }
    }
}
using IronOcr;
using System;
using System.Linq;
using static IronOcr.OcrResult;

// Configure IronTesseract for detailed results
IronTesseract ocrTesseract = new IronTesseract();

// Process image with potential ambiguities
using var imageInput = new OcrImageInput("ambiguous_text.png");
OcrResult ocrResult = ocrTesseract.Read(imageInput);

// Analyze character choices for each word
foreach (var word in ocrResult.Words)
{
    Console.WriteLine($"\nWord: '{word.Text}' (Confidence: {word.Confidence:F2}%)");

    // Check each character in the word
    foreach (var character in word.Characters)
    {
        if (character.Choices != null && character.Choices.Length > 1)
        {
            Console.WriteLine($"  Character '{character.Text}' has alternatives:");

            // Display all choices sorted by confidence
            foreach (var choice in character.Choices.OrderByDescending(c => c.Confidence))
            {
                Console.WriteLine($"    - '{choice.Text}': {choice.Confidence:F2}%");
            }
        }
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Estrategias de confianza avanzadas

Cuando se trabaja con documentos especializados como pasaportes, placas de licencia, o cheques del IMIC, las puntuaciones de confianza se vuelven cruciales para la validación:

using IronOcr;

public class DocumentValidator
{
    private readonly IronTesseract ocr = new IronTesseract();

    public bool ValidatePassportNumber(string imagePath, double minConfidence = 95.0)
    {
        using var input = new OcrImageInput(imagePath);

        // Configure for passport reading
        ocr.Configuration.ReadBarCodes = true;
        ocr.Configuration.PageSegmentationMode = TesseractPageSegmentationMode.SingleLine;

        // Apply preprocessing
        input.Deskew();
        input.Scale(200); // Upscale for better accuracy

        var result = ocr.Read(input);

        // Find passport number pattern
        var passportLine = result.Lines
            .Where(line => line.Text.Contains("P<") || IsPassportNumberFormat(line.Text))
            .FirstOrDefault();

        if (passportLine != null)
        {
            Console.WriteLine($"Passport line found: {passportLine.Text}");
            Console.WriteLine($"Confidence: {passportLine.Confidence:F2}%");

            // Only accept if confidence meets threshold
            return passportLine.Confidence >= minConfidence;
        }

        return false;
    }

    private bool IsPassportNumberFormat(string text)
    {
        // Simple passport number validation
        return System.Text.RegularExpressions.Regex.IsMatch(text, @"^[A-Z]\d{7,9}$");
    }
}
using IronOcr;

public class DocumentValidator
{
    private readonly IronTesseract ocr = new IronTesseract();

    public bool ValidatePassportNumber(string imagePath, double minConfidence = 95.0)
    {
        using var input = new OcrImageInput(imagePath);

        // Configure for passport reading
        ocr.Configuration.ReadBarCodes = true;
        ocr.Configuration.PageSegmentationMode = TesseractPageSegmentationMode.SingleLine;

        // Apply preprocessing
        input.Deskew();
        input.Scale(200); // Upscale for better accuracy

        var result = ocr.Read(input);

        // Find passport number pattern
        var passportLine = result.Lines
            .Where(line => line.Text.Contains("P<") || IsPassportNumberFormat(line.Text))
            .FirstOrDefault();

        if (passportLine != null)
        {
            Console.WriteLine($"Passport line found: {passportLine.Text}");
            Console.WriteLine($"Confidence: {passportLine.Confidence:F2}%");

            // Only accept if confidence meets threshold
            return passportLine.Confidence >= minConfidence;
        }

        return false;
    }

    private bool IsPassportNumberFormat(string text)
    {
        // Simple passport number validation
        return System.Text.RegularExpressions.Regex.IsMatch(text, @"^[A-Z]\d{7,9}$");
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Optimización para una mayor confianza

Para obtener puntuaciones de confianza más altas, considera el uso de filtros de imagen y técnicas de preprocesamiento:

using IronOcr;

// Create an optimized OCR workflow
IronTesseract ocr = new IronTesseract();

using var input = new OcrImageInput("low_quality_scan.jpg");

// Apply multiple filters to improve confidence
input.Deskew();           // Correct rotation
input.DeNoise();          // Remove noise
input.Sharpen();          // Enhance edges
input.Dilate();           // Thicken text
input.Scale(150);         // Upscale for clarity

// Configure for accuracy over speed
ocr.Configuration.TesseractVersion = TesseractVersion.Tesseract5;
ocr.Configuration.EngineMode = TesseractEngineMode.TesseractOnly;

var result = ocr.Read(input);

Console.WriteLine($"Document confidence: {result.Confidence:F2}%");

// Generate confidence report
var confidenceReport = result.Pages
    .Select((page, index) => new
    {
        PageNumber = index + 1,
        Confidence = page.Confidence,
        WordCount = page.Words.Length,
        LowConfidenceWords = page.Words.Count(w => w.Confidence < 80)
    });

foreach (var page in confidenceReport)
{
    Console.WriteLine($"Page {page.PageNumber}: {page.Confidence:F2}% confidence");
    Console.WriteLine($"  Total words: {page.WordCount}");
    Console.WriteLine($"  Low confidence words: {page.LowConfidenceWords}");
}
using IronOcr;

// Create an optimized OCR workflow
IronTesseract ocr = new IronTesseract();

using var input = new OcrImageInput("low_quality_scan.jpg");

// Apply multiple filters to improve confidence
input.Deskew();           // Correct rotation
input.DeNoise();          // Remove noise
input.Sharpen();          // Enhance edges
input.Dilate();           // Thicken text
input.Scale(150);         // Upscale for clarity

// Configure for accuracy over speed
ocr.Configuration.TesseractVersion = TesseractVersion.Tesseract5;
ocr.Configuration.EngineMode = TesseractEngineMode.TesseractOnly;

var result = ocr.Read(input);

Console.WriteLine($"Document confidence: {result.Confidence:F2}%");

// Generate confidence report
var confidenceReport = result.Pages
    .Select((page, index) => new
    {
        PageNumber = index + 1,
        Confidence = page.Confidence,
        WordCount = page.Words.Length,
        LowConfidenceWords = page.Words.Count(w => w.Confidence < 80)
    });

foreach (var page in confidenceReport)
{
    Console.WriteLine($"Page {page.PageNumber}: {page.Confidence:F2}% confidence");
    Console.WriteLine($"  Total words: {page.WordCount}");
    Console.WriteLine($"  Low confidence words: {page.LowConfidenceWords}");
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Resumen

Comprender y utilizar las puntuaciones de confianza de OCR es esencial para crear aplicaciones sólidas de procesamiento de documentos. Al aprovechar las propiedades de confianza y las opciones de caracteres de IronOCR, los desarrolladores pueden implementar mecanismos inteligentes de validación, gestión de errores y garantía de calidad en sus flujos de trabajo de OCR. Tanto si está procesando capturas de pantalla, tablas o documentos especializados, las puntuaciones de confianza proporcionan las métricas necesarias para garantizar una extracción de texto precisa.

Preguntas Frecuentes

¿Qué es la confianza OCR y por qué es importante?

La confianza del OCR es una medida de 0 a 100 que indica el grado de certeza del sistema de OCR en cuanto a la precisión del reconocimiento de texto. IronOCR proporciona esta métrica a través de la propiedad Confidence en cualquier objeto OcrResult, ayudando a los desarrolladores a evaluar la fiabilidad del texto reconocido, especialmente al procesar documentos escaneados, fotos o imágenes con una calidad de texto variable.

¿Cómo puedo comprobar rápidamente la confianza del OCR en C#?

Con IronOCR, puede obtener la confianza del reconocimiento óptico de caracteres en sólo una línea de código: double confidence = new IronOcr.IronTesseract().Read("input.png").Confidence; Esto devuelve una puntuación de confianza entre 0-100 que indica lo seguro que está IronOCR sobre su reconocimiento de texto.

¿Qué significan los distintos rangos de confianza?

Las puntuaciones de confianza de IronOCR indican: 90-100 (Excelente) significa que el texto es altamente confiable; 80-89 (Bueno) significa que el texto es generalmente preciso con incertidumbres menores; 70-79 (Moderado) significa que el texto puede contener algunos errores; Por debajo de 70 (Bajo) significa que el texto debe ser revisado o reprocesado.

¿Cómo puedo acceder a los niveles de confianza de los distintos elementos de texto?

IronOCR le permite recuperar niveles de confianza en múltiples granularidades: páginas, párrafos, líneas, palabras y caracteres individuales. Después de realizar el OCR, puede acceder a la propiedad Confidence en cada nivel a través de la estructura de objetos OcrResult.

¿Puedo obtener sugerencias de palabras alternativas con puntuaciones de confianza?

Sí, IronOCR proporciona una propiedad Opciones que ofrece opciones de palabras alternativas junto con sus puntuaciones de confianza. Esta característica ayuda cuando el motor de OCR identifica múltiples interpretaciones posibles del mismo texto, lo que le permite implementar una lógica de validación inteligente.

¿Cómo implemento la validación basada en la confianza en mi aplicación?

Después de utilizar el método Read de IronOCR, compruebe la propiedad Confidence del OcrResult. Implemente una lógica condicional basada en umbrales de confianza; por ejemplo, acepte automáticamente resultados superiores a 90, marque los resultados entre 70 y 90 para su revisión y vuelva a procesar o verifique manualmente los resultados inferiores a 70.

Curtis Chau
Escritor Técnico

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 ...

Leer más
Revisado por
Jeff Fritz
Jeffrey T. Fritz
Gerente Principal de Programas - Equipo de la Comunidad .NET
Jeff también es Gerente Principal de Programas para los equipos de .NET y Visual Studio. Es el productor ejecutivo de la serie de conferencias virtuales .NET Conf y anfitrión de 'Fritz and Friends', una transmisión en vivo para desarrolladores que se emite dos veces a la semana donde habla sobre tecnología y escribe código junto con la audiencia. Jeff escribe talleres, presentaciones, y planifica contenido para los eventos de desarrolladores más importantes de Microsoft, incluyendo Microsoft Build, Microsoft Ignite, .NET Conf y la Cumbre de Microsoft MVP.
¿Listo para empezar?
Nuget Descargas 5,246,844 | Versión: 2025.12 recién lanzado