C# Tesseract OCR Ejemplo

por Jim Baker

Tesseract es un excelente OCR académico (reconocimiento óptico de caracteres) disponible gratuitamente para casi todos los casos de uso.

C# tiene la suerte de contar con una de las bibliotecas Tesseract más precisas y rápidas que existen.

IronOCR amplía Google Tesseract con IronTesseract, una biblioteca de OCR nativa de C# con mayor estabilidad y precisión que la biblioteca gratuita Tesseract.

Este artículo compara y explica las razones por las que los desarrolladores .NET deberían utilizar IronOCR IronTesseract en lugar de Tesseract.

C# Tesseract OCR

Ejemplo de código para .NET OCR Uso - Extraer texto de imágenes en C#

Utilice NuGet Package Manager para instalar el paquete NuGet IronOCR en su solución de Visual Studio.

:path=/static-assets/ocr/content-code-examples/tutorials/c-sharp-tesseract-ocr-1.cs
using IronOcr;
using System;

var ocr = new IronTesseract();

//  Cientos de idiomas disponibles
ocr.Language = OcrLanguage.English;

using var input = new OcrInput();
var pageindices = new int[] { 1, 2 };
input.LoadImageFrames(@"img\example.tiff", pageindices);
//  input.DeNoise(); filtro opcional
//  input.Deskew(); filtro opcional

OcrResult result = ocr.Read(input);
Console.WriteLine(result.Text);
//  Explorar el OcrResult usando IntelliSense
Imports IronOcr
Imports System

Private ocr = New IronTesseract()

'  Cientos de idiomas disponibles
ocr.Language = OcrLanguage.English

Dim input = New OcrInput()
Dim pageindices = New Integer() { 1, 2 }
input.LoadImageFrames("img\example.tiff", pageindices)
'  input.DeNoise(); filtro opcional
'  input.Deskew(); filtro opcional

Dim result As OcrResult = ocr.Read(input)
Console.WriteLine(result.Text)
'  Explorar el OcrResult usando IntelliSense
VB   C#

Opciones de instalación

Biblioteca NuGet C# para OCR

Instalar con NuGet

Install-Package IronOcr
o
Java PDF JAR

Descargar DLL

Descargar DLL

Instalar manualmente en su proyecto

Uso del motor Tesseract para OCR con .NET

Al utilizar Tesseract Engine, la mayoría de nosotros trabajamos con una biblioteca C++.

Interop no es muy divertido en .NET - y tiene poca compatibilidad entre plataformas y Azure. Nos obliga a elegir el bittiness de nuestra aplicación, lo que significa que sólo podemos desplegar en objetivos de 32 o 64 bits.

Puede que tengamos que asegurarnos de que los tiempos de ejecución de Visual C++ están instalados e incluso compilar Tesseract nosotros mismos para obtener la última versión. Los envoltorios gratuitos de C# para estas aplicaciones pueden llevar años de retraso.

También tenemos que encontrar, descargar y gestionar DLL y EXE de C++ que quizá no entendamos, y desplegarlos en entornos donde los permisos quizá no permitan su ejecución.

Es fácil de instalar utilizando NuGet Package Manager para extraer texto de imágenes y archivos PDF utilizando el reconocimiento óptico de caracteres.

IronOCR Tesseract para C#

Con IronOCR, toda la instalación de Tesseract se realiza íntegramente mediante el gestor de paquetes NuGet.

Install-Package IronOcr

No hay dlls o exes nativos que instalar. Todo se gestiona mediante una única biblioteca de componentes .NET.

Toda la API está en .NET nativo mediante una sencilla API en C# que utiliza Tesseract.

Admite este tipo de proyectos de Visual Studio para añadir el reconocimiento óptico de caracteres en C#:

  • .NET Framework 4.6.2 y superior
  • .NET Standard 2.0 y superior (incluyendo 3.x, .NET 5, 6, 7 y 8)
  • .NET Core 2.0 y superior (incluyendo 3.x, .NET 5, 6, 7 y 8)

Actualización y mantenimiento

Google Tesseract con C#

Las últimas versiones de Tesseract 5 nunca han sido diseñadas para compilar en Windows.

La instalación gratuita de Tesseract 5 para C# requiere modificar y compilar manualmente Leptonica y Tesseract para Windows. A día de hoy, la cadena de compilación cruzada MinGW no consigue producir binarios de interoperabilidad con Windows.

Además, las envolturas gratuitas de la API de C# en GitHub pueden llevar años de retraso o ser incompatibles.

IronOCR Tesseract para .NET

IronOCR ofrece numerosas ventajas, como una API fácil de usar para una integración perfecta en las aplicaciones. Admite varios formatos de imagen, como JPEG, PNG, TIFF y PDF, y ofrece funciones avanzadas como el preprocesamiento automático de imágenes. Además, cuenta con el respaldo de un equipo especializado que ofrece asistencia comercial y actualizaciones.

Ejecuta Tesseract 5 fuera de la caja en Windows, macOS, Linux, Azure, AWS, Lambda, Mono y Xamarin Mac con poca o ninguna configuración. Sin binarios nativos que gestionar. Marco y núcleo compatibles.

Poco más hay que decir aparte de que se ha hecho bien.

Google OCR

OCR en la nube de Google (Reconocimiento óptico de caracteres) es un servicio prestado por Google Cloud Platform (GCP) que permite a los desarrolladores extraer texto de imágenes y documentos escaneados mediante algoritmos de aprendizaje automático.

Precisión

Google Tesseract en proyectos .NET

Tesseract como biblioteca se diseñó para documentos perfectos en los que una máquina imprimía un texto de alta resolución en una pantalla y luego lo leía. Por eso Tesseract es bueno leyendo documentos perfectos.

El problema es que en el mundo real, eso no es lo que tenemos. Si Tesseract encuentra una imagen girada, sesgada, con un DPI bajo, escaneada o con ruido de fondo, le resultará casi imposible obtener datos de esa imagen. Además, Tesseract también tardará mucho tiempo en procesar ese documento antes de devolverte información sin sentido.

Un documento sencillo que es muy fácil de leer a simple vista no puede ser leído bien por Tesseract.

Tesseract es una biblioteca gratuita óptima para leer texto recto y perfecto de tipos de letra normalizados.

Para utilizar Tesseract cuando utilizamos documentos escaneados o fotografiados en los que las imágenes no son digitalmente perfectas, como las capturas de pantalla, necesitamos realizar un preprocesamiento de la imagen. Esto se hace normalmente con scripts por lotes de Photoshop o con el uso avanzado de ImageMagick.

Por lo general, esto debe desarrollarse caso por caso para cada tipo de documento que se esté tratando y puede llevar semanas de desarrollo.

IronOCR Tesseract en proyectos .NET

IronOCR elimina este quebradero de cabeza. Los usuarios suelen alcanzar una precisión del 99,8-100% con una configuración mínima.

:path=/static-assets/ocr/content-code-examples/tutorials/c-sharp-tesseract-ocr-2.cs
using IronOcr;
using System;

var ocr = new IronTesseract();
using var input = new OcrInput();
var pageindices = new int[] { 1, 2 };
input.LoadImageFrames(@"img\example.tiff", pageindices);
input.DeNoise();  //corrige el ruido digital
input.Deskew();   //fija la rotación y la perspectiva

//  hay docenas de filtros más, pero la mayoría de los usuarios no los necesitan
OcrResult result = ocr.Read(input);
Console.WriteLine(result.Text);
Imports IronOcr
Imports System

Private ocr = New IronTesseract()
Private input = New OcrInput()
Private pageindices = New Integer() { 1, 2 }
input.LoadImageFrames("img\example.tiff", pageindices)
input.DeNoise() 'corrige el ruido digital
input.Deskew() 'fija la rotación y la perspectiva

'  hay docenas de filtros más, pero la mayoría de los usuarios no los necesitan
Dim result As OcrResult = ocr.Read(input)
Console.WriteLine(result.Text)
VB   C#

Compatibilidad de imágenes

Google Tesseract en .NET

Sólo acepta el formato de imagen Leptonica PIX que es un objeto C++ IntPtr en C#. Los objetos PIX no son memoria gestionada - y si no se manejan con cuidado en C# se producen fugas de memoria.

Leptonica tiene buena compatibilidad de imagen en general, pero lanza muchas advertencias y errores de consola. Existen problemas conocidos con los archivos TIFF y una compatibilidad limitada con PDF OCR.

IronOCR Tesseract para .NET

Las imágenes se gestionan en memoria. Compatible con PDF y Tiff. Sistema. Dibujo, Flujo y Matriz de bytes se incluyen para cada formato de archivo.

Amplio soporte de imágenes:

  • Documentos PDF
  • Páginas Pdf
  • Archivos TIFF MultiFrame
  • JPEG Y JPEG2000
  • GIF
  • PNG
  • PPB
  • WBMP
  • System.Drawing.Image
  • System.Drawing.Bitmap
  • System.IO.Streams de imágenes
  • Imagen binaria Datos (byte [])
  • Y muchos más...

Ejemplo de código de compatibilidad de imágenes OCR

:path=/static-assets/ocr/content-code-examples/tutorials/c-sharp-tesseract-ocr-3.cs
using IronOcr;
using System;

var ocr = new IronTesseract();
using var input = new OcrInput();
input.LoadPdf("example.pdf", Password: "password");
var pageindices = new int[] { 1, 2 };
input.LoadImageFrames("multi-frame.tiff", pageindices);
input.LoadImage("image1.png");
input.LoadImage("image2.jpeg");
//... muchos más

var result = ocr.Read(input);
Console.WriteLine(result.Text);
Imports IronOcr
Imports System

Private ocr = New IronTesseract()
Private input = New OcrInput()
input.LoadPdf("example.pdf", Password:= "password")
Dim pageindices = New Integer() { 1, 2 }
input.LoadImageFrames("multi-frame.tiff", pageindices)
input.LoadImage("image1.png")
input.LoadImage("image2.jpeg")
'... muchos más

Dim result = ocr.Read(input)
Console.WriteLine(result.Text)
VB   C#

Rendimiento

Google Tesseract gratis

Google Tesseract puede realizar resultados rápidos y precisos si se sintoniza correctamente y las imágenes de entrada han sido preprocesadas utilizando Photoshop o ImageMagick.

Observará que la mayoría de los ejemplos de Tesseract en línea proceden de capturas de pantalla de alta resolución sin ruido digital, en fuentes con las que Tesseract ha sido diseñado para funcionar bien.

La propia documentación de Tesseracts indica que las imágenes de entrada deben muestrearse a 300DPI o más para que el OCR sea eficaz.

Biblioteca IronOCR Tesseract

IronOcr .NET Tesseract DLL funciona con precisión y velocidad para la mayoría de las imágenes. Hemos implementado el multithreading para aprovechar los procesadores multinúcleo que utilizan ahora la mayoría de las máquinas.

Incluso las imágenes de baja resolución suelen funcionar con un alto grado de precisión en su programa. No necesita PhotoShop.

Los desarrolladores consiguen a menudo una precisión superior al 99% con poca configuración, lo que equivale a las actuales API web de aprendizaje automático sin los costes continuos, los riesgos de seguridad y los problemas de ancho de banda.

Las velocidades son rápidas, pero pueden mejorarse con un poco de codificación.

Ejemplo de ajuste del rendimiento

:path=/static-assets/ocr/content-code-examples/tutorials/c-sharp-tesseract-ocr-4.cs
using IronOcr;
using System;

var ocr = new IronTesseract();

//  Configure la velocidad.  Un 35% más rápido y sólo un 0,2% de pérdida de precisión.
ocr.Configuration.BlackListCharacters = "~`$#^*_}{][|\\@¢©«»°±·×‑–—‘’“”•…′″€™←↑→↓↔⇄⇒∅∼≅≈≠≤≥≪≫⌁⌘○◔◑◕●☐☑☒☕☮☯☺♡⚓✓✰";
ocr.Configuration.PageSegmentationMode = TesseractPageSegmentationMode.Auto;
ocr.Configuration.ReadBarCodes = false;
ocr.Language = OcrLanguage.EnglishFast;

using var input = new OcrInput();
var pageindices = new int[] { 1, 2 };
input.LoadImageFrames(@"img\Potter.tiff", pageindices);
var result = ocr.Read(input);
Console.WriteLine(result.Text);
Imports IronOcr
Imports System

Private ocr = New IronTesseract()

'  Configure la velocidad.  Un 35% más rápido y sólo un 0,2% de pérdida de precisión.
ocr.Configuration.BlackListCharacters = "~`$#^*_}{][|\@¢©«»°±·×‑–—‘’“”•…′″€™←↑→↓↔⇄⇒∅∼≅≈≠≤≥≪≫⌁⌘○◔◑◕●☐☑☒☕☮☯☺♡⚓✓✰"
ocr.Configuration.PageSegmentationMode = TesseractPageSegmentationMode.Auto
ocr.Configuration.ReadBarCodes = False
ocr.Language = OcrLanguage.EnglishFast

Dim input = New OcrInput()
Dim pageindices = New Integer() { 1, 2 }
input.LoadImageFrames("img\Potter.tiff", pageindices)
Dim result = ocr.Read(input)
Console.WriteLine(result.Text)
VB   C#

API

Google Tesseract OCR en .NET

Tenemos 2 opciones libres:

  • Trabajar con capas Interop - Muchas de las que se encuentran en GitHub están desactualizadas, tienen tickets sin resolver, Memory Leaks & Console warnings. Puede no ser compatible con .NET Core o Standard.
  • Trabaja con la línea de comandos EXE - Difícil de desplegar y constantemente interrumpido por escáneres de virus y políticas de seguridad.

    Ninguna de las anteriores puede funcionar bien en aplicaciones web, Azure, Mono, Xamarin, Linux, Docker o Mac.

Biblioteca IronOCR Tesseract OCR para .NET

Una librería .NET gestionada y probada para Tesseract llamada IronTesseract.

Totalmente documentado con soporte IntelliSense.

Hello World más sencillo para Tesseract en .NET

:path=/static-assets/ocr/content-code-examples/tutorials/c-sharp-tesseract-ocr-5.cs
using IronOcr;

var text = new IronTesseract().Read("img.png").Text;
Imports IronOcr

Private text = (New IronTesseract()).Read("img.png").Text
VB   C#

Tiene un desarrollo activo y cuenta con el apoyo de ingenieros de software profesionales con un nivel medio de experiencia de más de 20 años.

Compatibilidad

Google Tesseract + Interop para .NET

Esto se puede hacer para trabajar en la mayoría de las plataformas si usted está dispuesto a encontrar dependencias, construir desde la fuente o actualizar una envoltura libre C # interoperabilidad. Es posible que estos recursos no sean totalmente compatibles con los proyectos .NET Core o .NET Standard.

Por el momento, no hemos encontrado ninguna forma lógica y sencilla de instalar LibTesseract5 para windows de forma segura sin IronTessseract.

Biblioteca OCR IronOCR Tesseract .NET

Unidad probado con CI, y tiene todo lo necesario para ejecutar en:

  • Aplicaciones de escritorio,
  • Consola Aplicaciones
  • Servidores Procesos
  • Aplicaciones Web y MVC
  • Jinete JetBrains
  • Xamarin Mac

    En:

  • Ventanas
  • Azure
  • Linux
  • Docker
  • Mac
  • BSD y FreeBSD

    .NET Soporte para:

  • .NET Framework 4.6.2 y superior
  • .NET Core - Todas las versiones activas superiores a 2.0
  • .NET Stanrdard - Todas las versiones activas superiores a 2.0
  • Mono
  • Xamarin Mac

Apoyo lingüístico

Google Tesseract

Los diccionarios Tesseract se gestionan como archivos y deben clonarse desde https://github.com/tesseract-ocr/tessdata. Se trata de unos 4 GB.

Algunas distribuciones Linux disponen de ayuda para gestionar los diccionarios Tesseract a través de apt-get.

Deben mantenerse estructuras de carpetas exactas o Tesseract fallará.

IronOCR Tesseract

Soporta más idiomas que https://github.com/tesseract-ocr/tessdata y cada uno de ellos se gestiona como un paquete NuGet a través de NuGet Package Manager o descargas fácilmente instalables.

Ejemplo de lenguaje Unicode

:path=/static-assets/ocr/content-code-examples/tutorials/c-sharp-tesseract-ocr-6.cs
using IronOcr;

var ocr = new IronTesseract();
ocr.Language = OcrLanguage.Arabic;

using var input = new OcrInput();
var pageindices = new int[] { 1, 2 };
input.LoadImageFrames("img/arabic.gif", pageindices);

//  Añadir filtros de imagen si es necesario
//  En este caso, aunque la entrada sea de muy baja calidad
//  IronTesseract puede leer lo que Tesseract convencional no puede.

var result = ocr.Read(input);

//  La consola no puede imprimir árabe en Windows fácilmente.
//  En su lugar, guardemos en disco.
result.SaveAsTextFile("arabic.txt");
Imports IronOcr

Private ocr = New IronTesseract()
ocr.Language = OcrLanguage.Arabic

Dim input = New OcrInput()
Dim pageindices = New Integer() { 1, 2 }
input.LoadImageFrames("img/arabic.gif", pageindices)

'  Añadir filtros de imagen si es necesario
'  En este caso, aunque la entrada sea de muy baja calidad
'  IronTesseract puede leer lo que Tesseract convencional no puede.

Dim result = ocr.Read(input)

'  La consola no puede imprimir árabe en Windows fácilmente.
'  En su lugar, guardemos en disco.
result.SaveAsTextFile("arabic.txt")
VB   C#

Ejemplo de varios idiomas

También es posible que el OCR utilice varios idiomas al mismo tiempo. Esto puede ayudar mucho a obtener metadatos y URL en inglés en documentos Unicode.

:path=/static-assets/ocr/content-code-examples/tutorials/c-sharp-tesseract-ocr-7.cs
using IronOcr;

//  Para el paquete de idioma chino:
//  PM> Instalar IronOcr.Languages.ChineseSimplified

var ocr = new IronTesseract();
ocr.Language = OcrLanguage.ChineseSimplified;
ocr.AddSecondaryLanguage(OcrLanguage.English);

//  Podemos añadir cualquier número de idiomas
using var input = new OcrInput();
input.LoadPdf("multi-language.pdf");
var result = ocr.Read(input);
result.SaveAsTextFile("results.txt");
Imports IronOcr

'  Para el paquete de idioma chino:
'  PM> Instalar IronOcr.Languages.ChineseSimplified

Private ocr = New IronTesseract()
ocr.Language = OcrLanguage.ChineseSimplified
ocr.AddSecondaryLanguage(OcrLanguage.English)

'  Podemos añadir cualquier número de idiomas
Dim input = New OcrInput()
input.LoadPdf("multi-language.pdf")
Dim result = ocr.Read(input)
result.SaveAsTextFile("results.txt")
VB   C#

Qué más

IronOCR Tesseract dispone de funciones adicionales para desarrolladores de software .NET.

  • Análisis automático de imágenes para configurar Tesseract en función de los errores más comunes
  • Conversión de imágenes a PDF con función de búsqueda
  • PDF OCR
  • Puede hacer que cualquier PDF se pueda buscar e indexar en los motores de búsqueda
  • Salida de OCR a HTML
  • Conversión de TIFF a PDF
  • Lectura de códigos de barras
  • Lectura de códigos QR
  • Multihilo
  • Una clase avanzada OcrResult que permite la inspección de Bloques, Párrafos, Líneas, Palabras, Caracteres, Fuentes y estadísticas OCR.

Conclusión

Google Tesseract para C# OCR

Esta es la biblioteca adecuada para proyectos libres y académicos en C#.

Tesseract es un excelente recurso para desarrolladores C++, pero no es una biblioteca OCR completa para .NET.

Cuando se trata de imágenes escaneadas o fotografiadas, es necesario procesarlas para que sean ortogonales, normalizadas, de alta resolución y libres de ruido digital antes de que Tesseract pueda trabajar con ellas con precisión.

Biblioteca IronOCR Tesseract OCR para .NET Framework y Core

En cambio, IronOCR puede hacer esto y mucho más en una sola línea de código.

Es cierto: IronOCR utiliza Tesseract para su motor interno de OCR.

Una última versión de Tesseract para C# con muchas mejoras de rendimiento y funciones añadidas de serie.

Es la elección adecuada para cualquier proyecto en el que el tiempo del desarrollador sea valioso. ¿Cuándo fue la última vez que encontró un ingeniero de software .NET con semanas de tiempo libre?

Empiece con su proyecto C# Tesseract

Utilice NuGet Package Manager en cualquier proyecto de Visual Studio:

Install-Package IronOcr

O puedes descargue la DLL .NET de IronOCR Tesseract e instalarlo manualmente.

Cualquier programador .NET debería ser capaz de empezar a utilizar IronOCR Tesseract OCR en 5 minutos utilizando los ejemplos de esta página.

Consulte el siguiente artículo comparativo: AWS frente a Google Vision (comparación de funciones de OCR). Para conocer más servicios que ofrecen tecnología OCR.

Desarrollador .NET en Iron con pasión por el OCR y la manipulación del lenguaje natural

Jim Baker

Desarrollador de productos IronOCR

Jim ha estado al frente del desarrollo del producto IronOCR desde su lanzamiento en 2016. Jim trabajó en el soporte de Tesseract 5 para .NET Core & Standard hasta 2019-2020.