C# Tesseract OCR Ejemplo

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

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();

// Hundreds of languages available
ocr.Language = OcrLanguage.English;

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

OcrResult result = ocr.Read(input);
Console.WriteLine(result.Text);
// Explore the OcrResult using IntelliSense
Imports IronOcr
Imports System

Private ocr = New IronTesseract()

' Hundreds of languages available
ocr.Language = OcrLanguage.English

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

Dim result As OcrResult = ocr.Read(input)
Console.WriteLine(result.Text)
' Explore the OcrResult using 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();  //fixes digital noise
input.Deskew();   //fixes rotation and perspective

// there are dozens more filters, but most users wont need them
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() 'fixes digital noise
input.Deskew() 'fixes rotation and perspective

' there are dozens more filters, but most users wont need them
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");
//... many more

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")
'... many more

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 for speed.  35% faster and only 0.2% loss of accuracy
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 for speed.  35% faster and only 0.2% loss of accuracy
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);

// Add image filters if needed
// In this case, even thought input is very low quality
// IronTesseract can read what conventional Tesseract cannot.

var result = ocr.Read(input);

// Console can't print Arabic on Windows easily.
// Let's save to disk instead.
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)

' Add image filters if needed
' In this case, even thought input is very low quality
' IronTesseract can read what conventional Tesseract cannot.

Dim result = ocr.Read(input)

' Console can't print Arabic on Windows easily.
' Let's save to disk instead.
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;

// For the Chinese Language Pack:
// PM> Install IronOcr.Languages.ChineseSimplified

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

// We can add any number of languages
using var input = new OcrInput();
input.LoadPdf("multi-language.pdf");
var result = ocr.Read(input);
result.SaveAsTextFile("results.txt");
Imports IronOcr

' For the Chinese Language Pack:
' PM> Install IronOcr.Languages.ChineseSimplified

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

' We can add any number of languages
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.