Cómo crear un servicio OCR de Azure con IronOCR

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

Iron Software ha creado una biblioteca de OCR (Reconocimiento Óptico de Caracteres) que elimina los problemas de interoperabilidad de la integración de OCR en Azure. Trabajar con bibliotecas de OCR en Azure siempre ha sido un poco complicado para los desarrolladores. La solución para este y muchos otros problemas de OCR es IronOCR.

Funciones de IronOCR para Microsoft Azure

IronOCR incluye las siguientes características para construir un servicio de OCR en Microsoft Azure:

  • Convierte PDFs en documentos buscables para que sea fácil extraer texto
  • Convierte imágenes en documentos buscables al extraer texto de imágenes
  • Lee códigos de barras así como códigos QR
  • Precisión excepcional
  • Se ejecuta localmente y no requiere SaaS (Software como Servicio), que es un modelo de distribución de software donde un proveedor en la nube, como Microsoft Azure, aloja varias aplicaciones y las pone a disposición de los usuarios finales.
  • Velocidad ultra rápida

Veamos cómo el mejor motor de OCR, IronOCR de Iron Software, facilita a los desarrolladores extraer texto de cualquier documento de entrada.

Comencemos con nuestro servicio OCR de Azure

Para comenzar con el ejemplo, primero necesitamos instalar IronOCR.

  1. Crear una nueva aplicación de consola con C#.
  2. Instalar IronOCR a través de NuGet ya sea ingresando: Install-Package IronOcr o seleccionando Administrar paquetes NuGet y buscando IronOCR. Se muestra a continuación.
  3. Edita tu archivo Program.cs para que se vea como lo siguiente:

    • Importamos el espacio de nombres IronOcr para hacer uso de sus capacidades OCR para leer y extraer el contenido del archivo PDF.
    • Creamos un nuevo objeto IronTesseract para poder extraer texto de una imagen.
using IronOcr;
using System;

namespace IronOCR_Ex
{
    class Program
    {
        static void Main(string[] args)
        {
            var ocr = new IronTesseract();
            using (var Input = new OcrInput("..\\Images\\Purgatory.PNG"))
            {
                var result = ocr.Read(Input); // Read PNG image File
                Console.WriteLine(result.Text); // Output extracted text to console
                Console.ReadLine();
            }
        }
    }
}
using IronOcr;
using System;

namespace IronOCR_Ex
{
    class Program
    {
        static void Main(string[] args)
        {
            var ocr = new IronTesseract();
            using (var Input = new OcrInput("..\\Images\\Purgatory.PNG"))
            {
                var result = ocr.Read(Input); // Read PNG image File
                Console.WriteLine(result.Text); // Output extracted text to console
                Console.ReadLine();
            }
        }
    }
}
Imports IronOcr
Imports System

Namespace IronOCR_Ex
	Friend Class Program
		Shared Sub Main(ByVal args() As String)
			Dim ocr = New IronTesseract()
			Using Input = New OcrInput("..\Images\Purgatory.PNG")
				Dim result = ocr.Read(Input) ' Read PNG image File
				Console.WriteLine(result.Text) ' Output extracted text to console
				Console.ReadLine()
			End Using
		End Sub
	End Class
End Namespace
$vbLabelText   $csharpLabel
  1. A continuación, abrimos una imagen llamada Purgatory.PNG. Esta imagen es parte de la Divina Comedia de Dante - uno de mis libros favoritos. La imagen se ve como la siguiente.

El texto que se va a extraer con las capacidades de lectura de caracteres ópticos de IronOCR

Figura 2 - El texto que se va a extraer con las capacidades de lectura de caracteres ópticos de IronOCR

  1. La salida después de que el texto anterior ha sido extraído de la imagen de entrada anterior.

Texto extraído

Figura 3 - Texto extraído

  1. Hagamos lo mismo con un documento PDF. El documento PDF contiene el mismo texto a extraer que la Figura 2.

La única diferencia es que usaremos un documento PDF en lugar de una imagen. Ingresa el siguiente código:

var OCR = new IronTesseract();
using (var input = new OcrInput())
{
    input.Title = "Divine Comedy - Purgatory"; // Give title to input document 
    // Supply optional password and name of document
    input.AddPdf("..\\Documents\\Purgatorio.pdf", "dante");
    var result = OCR.Read(input); // Read the input file

    result.SaveAsSearchablePdf("SearchablePDFDocument.pdf"); 
}
var OCR = new IronTesseract();
using (var input = new OcrInput())
{
    input.Title = "Divine Comedy - Purgatory"; // Give title to input document 
    // Supply optional password and name of document
    input.AddPdf("..\\Documents\\Purgatorio.pdf", "dante");
    var result = OCR.Read(input); // Read the input file

    result.SaveAsSearchablePdf("SearchablePDFDocument.pdf"); 
}
Dim OCR = New IronTesseract()
Using input = New OcrInput()
	input.Title = "Divine Comedy - Purgatory" ' Give title to input document
	' Supply optional password and name of document
	input.AddPdf("..\Documents\Purgatorio.pdf", "dante")
	Dim result = OCR.Read(input) ' Read the input file

	result.SaveAsSearchablePdf("SearchablePDFDocument.pdf")
End Using
$vbLabelText   $csharpLabel

Este código es casi el mismo que el código anterior que extrae texto de una imagen.

Aquí utilizamos el método OcrInput para leer el documento PDF actual, en este caso: Purgatorio.pdf. Si hay metadatos en el archivo PDF, como un título o una contraseña, también podemos incluirlos.

El resultado se guarda como un documento PDF buscable en el cual podemos buscar el texto.

Nota, si el archivo PDF es demasiado grande, puede lanzarse una excepción.

  1. Suficiente sobre aplicaciones de Windows; veamos cómo podemos usar OCR con Microsoft Azure.

La belleza de IronOCR es que funciona muy bien con Microsoft Azure como una Función de Azure en una arquitectura de microservicios. Aquí hay un ejemplo muy rápido de cómo sería una función de Microsoft Azure que funciona con IronOCR. Esta función de Microsoft Azure extrae texto de imágenes.

public static class OCRFunction
{
    public static HttpClient hcClient = new HttpClient();

    [FunctionName("IronOCRFunction_EX")]
    public static async Task<IActionResult> Run([HttpTrigger] HttpRequest hrRequest, ExecutionContext ecContext)
    {
        var URI = hrRequest.Query["image"];
        var saStream = await hcClient.GetStreamAsync(URI);

        var ocr = new IronTesseract();
        using (var inputOCR = new OcrInput(saStream))
        {
            var outputOCR = ocr.Read(inputOCR);
            return new OkObjectResult(outputOCR.Text);
        }
    }
} 
public static class OCRFunction
{
    public static HttpClient hcClient = new HttpClient();

    [FunctionName("IronOCRFunction_EX")]
    public static async Task<IActionResult> Run([HttpTrigger] HttpRequest hrRequest, ExecutionContext ecContext)
    {
        var URI = hrRequest.Query["image"];
        var saStream = await hcClient.GetStreamAsync(URI);

        var ocr = new IronTesseract();
        using (var inputOCR = new OcrInput(saStream))
        {
            var outputOCR = ocr.Read(inputOCR);
            return new OkObjectResult(outputOCR.Text);
        }
    }
} 
Public Module OCRFunction
	Public hcClient As New HttpClient()

	<FunctionName("IronOCRFunction_EX")>
	Public Async Function Run(<HttpTrigger> ByVal hrRequest As HttpRequest, ByVal ecContext As ExecutionContext) As Task(Of IActionResult)
		Dim URI = hrRequest.Query("image")
		Dim saStream = Await hcClient.GetStreamAsync(URI)

		Dim ocr = New IronTesseract()
		Using inputOCR = New OcrInput(saStream)
			Dim outputOCR = ocr.Read(inputOCR)
			Return New OkObjectResult(outputOCR.Text)
		End Using
	End Function
End Module
$vbLabelText   $csharpLabel

Esto alimenta la imagen recibida por la función directamente al motor de OCR para producir el texto extraído.

Un resumen rápido sobre Microsoft Azure según Microsoft:

Los Microservicios de Microsoft Azure son un enfoque arquitectónico para construir aplicaciones donde cada función central, o servicio, se construye y despliega independientemente. La arquitectura de microservicios está distribuida y está suelta, por lo que la falla de un componente no romperá toda la aplicación. Los componentes independientes trabajan juntos y se comunican con contratos de API bien definidos. Construye aplicaciones de microservicios para satisfacer necesidades de negocio que cambian rápidamente y lleva nuevas funcionalidades al mercado más rápido.

Algunas características adicionales de IronOCR con .NET o Microsoft Azure incluyen las siguientes:

  • La capacidad de realizar OCR en casi cualquier archivo, imagen o PDF.
  • Velocidad ultra rápida en el procesamiento de entrada de OCR
  • Precisión excepcional
  • Lee códigos de barras y códigos QR
  • Se ejecuta localmente, sin necesidad de SaaS
  • Puede convertir PDFs e imágenes en documentos buscables
  • Excelente alternativa a Azure OCR de Microsoft Cognitive Services

Filtros de imagen para mejorar el rendimiento del OCR

  • OcrInput.Rotate - Rota imágenes por varios grados en el sentido de las agujas del reloj. Para sentido antihorario, usa números negativos.
  • OcrInput.Binarize() - Este filtro de imagen convierte cada píxel en negro o blanco sin término medio. Esto mejora el rendimiento del OCR.
  • OcrInput.ToGrayScale() - Este filtro de imagen convierte cada píxel en un tono de escala de grises. Esto mejora la velocidad del OCR.
  • OcrInput.Contrast() - Aumenta el contraste automáticamente. Este filtro mejora la velocidad y precisión del OCR en escaneos de bajo contraste.
  • OcrInput.DeNoise() - Elimina el ruido digital. Este filtro solo debe usarse donde se espere ruido en documentos de entrada.
  • OcrInput.Invert() - Invierte cada color.
  • OcrInput.Dilate() - La dilatación añade píxeles a los bordes de cualquier objeto en una imagen.
  • OcrInput.Erode() - La erosión elimina píxeles en los bordes de los objetos.
  • OcrInput.Deskew() - Rota una imagen para que esté en la orientación correcta y ortogonal. Esto es muy útil para el OCR porque la tolerancia de Tesseract para escaneos inclinados puede ser tan baja como 5 grados.
  • OcrInput.DeepCleanBackgroundNoise() - Eliminación de ruido de fondo pesado.
  • OcrInput.EnhanceResolution - Mejora la resolución de una imagen de baja calidad.

Rendimiento de velocidad

Ejemplo:

var OCR = new IronTesseract();
OCR.Configuration.BlackListCharacters = "~`$#^*_}{][|\\";
OCR.Configuration.PageSegmentationMode = TesseractPageSegmentationMode.Auto;
OCR.Configuration.TesseractVersion = TesseractVersion.Tesseract5;
OCR.Configuration.EngineMode = TesseractEngineMode.LstmOnly;
OCR.Language = OcrLanguage.EnglishFast;
using (var Input = new OcrInput("..\\Images\\Purgatory.PNG"))
{
    var Result = OCR.Read(Input);
    Console.WriteLine(Result.Text);
}
var OCR = new IronTesseract();
OCR.Configuration.BlackListCharacters = "~`$#^*_}{][|\\";
OCR.Configuration.PageSegmentationMode = TesseractPageSegmentationMode.Auto;
OCR.Configuration.TesseractVersion = TesseractVersion.Tesseract5;
OCR.Configuration.EngineMode = TesseractEngineMode.LstmOnly;
OCR.Language = OcrLanguage.EnglishFast;
using (var Input = new OcrInput("..\\Images\\Purgatory.PNG"))
{
    var Result = OCR.Read(Input);
    Console.WriteLine(Result.Text);
}
Dim OCR = New IronTesseract()
OCR.Configuration.BlackListCharacters = "~`$#^*_}{][|\"
OCR.Configuration.PageSegmentationMode = TesseractPageSegmentationMode.Auto
OCR.Configuration.TesseractVersion = TesseractVersion.Tesseract5
OCR.Configuration.EngineMode = TesseractEngineMode.LstmOnly
OCR.Language = OcrLanguage.EnglishFast
Using Input = New OcrInput("..\Images\Purgatory.PNG")
	Dim Result = OCR.Read(Input)
	Console.WriteLine(Result.Text)
End Using
$vbLabelText   $csharpLabel

Opciones de precios y licencias

Existen esencialmente tres niveles de licencia pagados que todos funcionan bajo el principio de compra única, licencia de por vida.

Y sí, estos son gratuitos con fines de desarrollo.

Más información

Características de IronOCR para aplicaciones .NET que ejecutan OCR en Azure y otros sistemas

  • IronOCR admite 125 idiomas internacionales. Cada idioma está disponible en calidad Rápido, Estándar y Mejor. Algunos de los paquetes de idiomas disponibles incluyen:
    • Búlgaro
    • Armenio
    • Croata
    • Afrikáans
    • Danés
    • Checo
    • Filipino
    • Finés
    • Francés
    • Alemán
    • Hay muchos más paquetes de idiomas disponibles; para echar un vistazo, por favor sigue el siguiente enlace. Paquetes de idiomas de IronOCR
  • Funciona directamente en .NET
    • Soporte para Xamarin
    • Soporte para Mono
    • Soporte para Microsoft Azure
    • Soporte para Docker en Microsoft Azure
    • Soporta documentos PDF
    • Soporta Tiffs multiframe
    • Soporte para todos los principales formatos de imagen
  • Los siguientes frameworks .NET son compatibles:
    • .NET Framework 4.5 y superior
    • .NET Standard 2
    • .NET Core 2
    • .NET Core 3
    • .NET Core 5
  • No necesitas tener instalado Tesseract (un motor OCR de código abierto que soporta Unicode y más de 100 idiomas) para que funcione IronOCR.
    • Tiene mejor precisión que Tesseract.
    • Tiene mejor velocidad que Tesseract.
  • Corrige escaneos de documentos o archivos de baja calidad.
  • Corrige escaneos de documentos o archivos inclinados de baja calidad.

¿Qué es el reconocimiento óptico de caracteres (OCR)?

Según Wikipedia: El reconocimiento óptico de caracteres es la conversión electrónica o mecánica de imágenes de texto mecanografiado, impreso en texto codificado de máquina, ya sea de un documento escaneado, una foto de un documento, una foto de escena o texto de subtítulos superpuesto en una imagen. OCR significa Reconocimiento Óptico de Caracteres. Existen esencialmente cuatro tipos de reconocimiento óptico de caracteres:

  • OCR - Reconocimiento Óptico de Caracteres, se dirige al texto mecanografiado de un documento de entrada, un carácter o glifo (símbolo elemental dentro de un conjunto de símbolos acordado, por ejemplo, 'a' en diferentes fuentes) a la vez.
  • OWR - Reconocimiento Óptico de Palabras, se dirige al texto mecanografiado de un documento de entrada, una palabra a la vez.
  • ICR - Reconocimiento Inteligente de Caracteres, se dirige al texto impreso como script de impresión (caracteres sin unión a otras letras) y texto cursivo, un carácter o glifo a la vez.
  • IWR - Reconocimiento Inteligente de Palabras, se dirige al texto cursivo.

Preguntas Frecuentes

¿Cómo puedo integrar capacidades de OCR en una aplicación C# en Azure?

Puedes integrar capacidades de OCR en una aplicación C# en Azure creando una nueva aplicación de consola y instalando IronOCR a través de NuGet. Usa el comando Install-Package IronOcr o busca IronOCR en el administrador de paquetes de NuGet.

¿Cuáles son las ventajas de usar IronOCR sobre el servicio de OCR nativo de Azure?

IronOCR ofrece varias ventajas sobre el servicio de OCR nativo de Azure, incluyendo una mayor precisión, velocidades de procesamiento más rápidas y la capacidad de funcionar localmente sin necesidad de SaaS. También soporta una amplia gama de idiomas y proporciona filtros de imagen para mejorar el rendimiento del OCR.

¿Cómo configuro una Función de Microsoft Azure para la extracción de texto con OCR?

Para configurar una Función de Microsoft Azure para la extracción de texto con OCR, puedes usar IronOCR para crear una función que extraiga texto de imágenes. Esto es parte de una arquitectura de microservicios, permitiéndote integrar capacidades de OCR sin problemas en tus aplicaciones de Azure.

¿Puede IronOCR manejar múltiples idiomas en el procesamiento de OCR?

Sí, IronOCR soporta 125 idiomas internacionales, cada uno disponible en calidad Rápida, Estándar y Mejor, haciéndolo versátil para aplicaciones globales.

¿Qué opciones de procesamiento de imagen ofrece IronOCR para mejorar la precisión del OCR?

IronOCR proporciona una variedad de opciones de procesamiento de imagen como Rotar, Binarizar, A Escala de Grises, Contraste, Desruido, Invertir, Dilatar, Erosionar, Desviación, Eliminación Profunda de Ruido de Fondo y Mejora de Resolución para mejorar la precisión y confiabilidad de los resultados de OCR.

¿Es IronOCR compatible con varios marcos de .NET para su implementación en Azure?

Sí, IronOCR es compatible con .NET Framework 4.5 y superior, .NET Standard 2, .NET Core 2, .NET Core 3 y .NET Core 5. También soporta Xamarin, Mono y puede ser implementado con Docker en Microsoft Azure.

¿Necesito algún software adicional para ejecutar IronOCR en Azure?

No se requiere software adicional para ejecutar IronOCR en Azure. Funciona de manera independiente y ofrece mayor precisión y velocidad en comparación con Tesseract sin necesidad de su instalación.

¿Qué opciones de licencia están disponibles para IronOCR?

IronOCR ofrece tres niveles de licencia pagados basados en un modelo de compra única y licencia de por vida. Estas licencias son gratuitas para propósitos de desarrollo, proporcionando flexibilidad para ampliar el proyecto.

¿Cómo puedo convertir imágenes y PDFs en documentos con capacidad de búsqueda usando IronOCR?

IronOCR te permite convertir imágenes y PDFs en documentos con capacidad de búsqueda al utilizar sus capacidades de OCR para extraer y reconocer texto, haciéndolos fácilmente buscables e indexables.

¿Cuál es el proceso de usar IronOCR para leer códigos de barras y códigos QR?

IronOCR puede leer códigos de barras y códigos QR utilizando sus características integradas para escanear y extraer datos de estos códigos, facilitando su integración en aplicaciones C# en Azure.

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
¿Listo para empezar?
Nuget Descargas 5,167,857 | Version: 2025.11 recién lanzado