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ómo utilizar Tesseract OCR en C# para .NET?
- Instalación de Google Tesseract e IronOCR for .NET en Visual Studio
- Consulta las últimas versiones en C#
- Revisar la precisión y la compatibilidad de las imágenes
- Pruebas de rendimiento y funcionamiento de la API
- Soporte multilingüe
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
Opciones de instalación
Instalar con NuGet
Install-Package IronOcr
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)
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)
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)
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
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")
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")
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.