IRONSOFTWAREHOME
VIDEOS

Migración de Patagames Tesseract.NET SDK a IronOCR

Kannaopat Udonpant
Kannapat Udonpant
Updated: 1 de agosto de 2026

Esta guía acompaña a los desarrolladores .NET a través de una migración completa desde el SDK Tesseract .NET de Patagames a IronOCR . Abarca la traducción mecánica de la API, la habilitación de la implementación multiplataforma que impulsa la mayoría de las migraciones y los cambios prácticos en el código necesarios para trasladar una canalización de OCR de producción desde un envoltorio comercial exclusivo para Windows a una biblioteca que se ejecuta en Windows, Linux, macOS, Docker, Azure y AWS sin modificaciones.

¿Por qué migrar desde Patagames Tesseract .NET SDK?

La mayoría de los equipos que evalúan Patagames para su posible reemplazo no están insatisfechos con la precisión del OCR. Se topan con un obstáculo en la implementación —un destino de contenedor Linux, un proyecto de migración a la nube o una canalización de CI en Ubuntu— y descubren que el binario nativo exclusivo para Windows simplemente no tiene ninguna posibilidad de avanzar en esa plataforma. Esa única restricción determina el resto de la evaluación de la migración.

La implementación exclusiva para Windows bloquea la pila .NET moderna. Patagames distribuye binarios nativos para Windows para su envoltorio del motor Tesseract. No existen paquetes de tiempo de ejecución para Linux x64, macOS o ARM. La clase OcrApi carga una DLL de Windows en tiempo de ejecución; en cualquier otro sistema operativo, la aplicación falla al iniciar. Agregue la dependencia System.Drawing.Bitmap, que Microsoft ha marcado formalmente como no compatible para el desarrollo multiplataforma nuevo, y la biblioteca es incompatible con el modelo de implementación predeterminado de cada proveedor de nube y orquestador de contenedores.

Pagar precios comerciales por un motor gratuito, sin acceso multiplataforma. El motor Tesseract, en el que se basa Patagames, es de código abierto y gratuito. Envoltorios comunitarios gratuitos como tesseractocr también se envían hoy con binarios de Windows preconstruidos, lo que elimina el principal argumento de conveniencia que Patagames ofrecía históricamente. Una licencia comercial para Patagames ofrece una interfaz API ligeramente más limpia que la versión básica de Tesseract, pero no añade preprocesamiento, compatibilidad con PDF, salida PDF con capacidad de búsqueda ni implementación multiplataforma: las cuatro capacidades que definen una biblioteca OCR completa en 2026.

La opacidad en los precios hace imposible la planificación presupuestaria. Patagames no publica los precios de las licencias. Para evaluar la biblioteca, es necesario contactar con el departamento de ventas antes de poder realizar cualquier comparación de costes. El precio de IronOCR comienza en $999 para una licencia perpetua Lite para un solo desarrollador con un año de actualizaciones incluido. Los equipos pueden evaluar la relación coste-capacidad sin necesidad de un proceso de ventas. Consulte la página de licencias de IronOCR para obtener información detallada sobre los diferentes niveles.

Fugas de variables crudas de Tesseract a través del API. Configurar el modo de segmentación de página en Patagames requiere llamar a api.SetVariable("tessedit_pageseg_mode", "3") — una asignación de variable de Tesseract basada en cadena sin IntelliSense, sin verificación en tiempo de compilación y sin capacidad de descubrimiento. Si se escribe mal el nombre de la variable, la llamada no hará nada en silencio.IronOCR envuelve cada opción de configuración de Tesseract en propiedades fuertemente tipadas en IronTesseract.Configuration.

No hay salida estructurada más allá de una cadena plana. Patagames GetTextFromImage devuelve una sola cadena. No hay acceso a los límites de las palabras, las agrupaciones de líneas, la estructura de los párrafos ni las puntuaciones de confianza por palabra. Las aplicaciones que necesitan extraer campos específicos de formularios o validar la precisión del OCR palabra por palabra no tienen una base sólida sobre la cual construir con la API de Patagames.

Las canalizaciones de CI/CD se interrumpen en el paso de Linux. Los equipos de desarrollo .NET modernos ejecutan CI en Linux: GitHub Actions, GitLab CI y Azure DevOps utilizan por defecto ejecutores basados ​​en Linux. Un proyecto que referencia Tesseract.Net.SDK fallará al construir la referencia binaria nativa o fallará en tiempo de ejecución durante las pruebas de integración. Cada prueba requiere un ejecutor de integración continua específico para Windows o una solución alternativa que simule por completo la capa de OCR.

El problema fundamental

Patagames solo se dirige a Windows. En el momento en que cambie su destino de implementación, la biblioteca no podrá seguirlo:

// Patagames: Windows DLL loads; fails on Linux container or macOS developer machine
using var api = OcrApi.Create();
api.Init(@"./tessdata", "eng"); // tessdata path — must be manually managed in every environment
using var bitmap = new Bitmap(imagePath); // System.Drawing — unsupported on non-Windows targets
return api.GetTextFromImage(bitmap);
C#
// IronOCR: same code runs on Windows, Linux, macOS, Docker, Azure, AWS
IronOcr.License.LicenseKey = "YOUR-LICENSE-KEY";
var text = new IronTesseract().Read(imagePath).Text;
C#

No hay directorio tessdata. No hay ruta de DLL nativa. Sin condiciones de plataforma. El gráfico de dependencias de NuGet resuelve automáticamente el entorno de ejecución correcto para cada destino.

Comparación de características entre IronOCR y Patagames Tesseract .NET SDK

La siguiente tabla resume las funcionalidades relevantes para los equipos que actualmente utilizan Patagames en producción.

CaracterísticaSDK de Patagames Tesseract .NETIronOCR
Compatibilidad con Windows
Soporte para LinuxNo
Compatibilidad con macOSNo
Implementación de DockerNo
Servicio de aplicaciones de AzureNo
AWS LambdaNo
Paquete NuGetTesseract.Net.SDKIronOcr
Modelo de licenciaComercial (consultar precio)Perpetua ($999–$2,399, pública)
Motor OCRTesseract (código abierto)Tesseract 5 optimizado (incluido)
Gestión de TessdataDirectorio manual con archivos .traineddataPaquetes de lenguaje NuGet
preprocesamiento automáticoNoneEnderezar, Reducir ruido, Contraste, Binarizar, Enfocar, Escalar, Dilatar, Erosionar
Eliminación profunda del ruido de fondoNoneSí (DeepCleanBackgroundNoise())
Entrada de PDF nativaNo (se requiere un renderizador externo)
Entrada TIFF de varias páginasLimitadoSí (input.LoadImageFrames())
Salida en PDF con capacidad de búsquedaNoSí (result.SaveAsSearchablePdf())
Exportación hOCRNo
Idiomas compatiblesArchivos tessdata de TesseractMás de 125 paquetes NuGet
Multilingüe simultáneoSí (concatenación de cadenas)Sí (enum fuertemente tipado OcrLanguage)
OCR basado en regionesNoSí (CropRectangle)
Lectura de BarCodesNo
Salida estructuradaSolo cuerdas planasPáginas, párrafos, líneas, palabras, caracteres con coordenadas
Puntuaciones de confianza por palabraNo
Configuración de segmentación de páginaLlamada de cadena cruda SetVariableFuertemente tipado Configuration.PageSegmentationMode
Dependencia de System.DrawingRequeridoOpcional
Seguridad de los hilosLímites estándar de TesseractCompleto (crear IronTesseract por hilo)
Soporte comercial
Descargas de NuGetLimitadoMás de 5,3 millones

Inicio rápido: Migración del SDK Tesseract .NET de Patagames a IronOCR

Paso 1: Sustituir el paquete NuGet

Eliminar Patagames Tesseract .NET SDK:

dotnet remove package Tesseract.Net.SDK
SHELL

Instala IronOCR desde NuGet :

dotnet add package IronOcr

Para obtener soporte en idiomas distintos del inglés, instale el paquete de idioma correspondiente:

dotnet add package IronOcr.Languages.French, IronOcr.Languages.German

Paso 2: Actualizar los espacios de nombres

Reemplace los espacios de nombres de Patagames con el espacio de nombres de IronOCR:

// Before (Patagames)
using Patagames.Ocr;
using Patagames.Ocr.Enums;
using System.Drawing;

// After (IronOCR)
using IronOcr;
C#

Paso 3: Inicializar licencia

Agregue la inicialización de la licencia al inicio de la aplicación (antes de la primera llamada IronTesseract):

IronOcr.License.LicenseKey = "YOUR-LICENSE-KEY";

Una licencia de prueba gratuita está disponible en ironsoftware.com/C#/ocr/ para comenzar las pruebas de migración sin compra.

Ejemplos de migración de código

Procesamiento de carpetas por lotes

La fase 1 mostró la extracción de imágenes individuales. Las implementaciones de Patagames en producción típicamente inicializan un OcrApi dentro de un bucle, llamando a api.Init() en cada iteración, lo que vuelve a cargar los datos y reinicia el motor Tesseract para cada archivo. Ese patrón compone el costo de inicialización a través de cientos de documentos.

Enfoque de Patagames:

// NuGet: Tesseract.Net.SDK
using Patagames.Ocr;
using System.Drawing;
using System.IO;

public class PatagamesBatchProcessor
{
    private const string TessDataPath = @"./tessdata";

    public Dictionary<string, string> ProcessFolder(string folderPath)
    {
        var results = new Dictionary<string, string>();

        foreach (var file in Directory.GetFiles(folderPath, "*.jpg"))
        {
            // OcrApi re-initialized per file — tessdata loaded each time
            using var api = OcrApi.Create();
            api.Init(TessDataPath, "eng");

            using var bitmap = new Bitmap(file);
            var text = api.GetTextFromImage(bitmap);

            results[Path.GetFileName(file)] = text;
        }

        return results;
    }
}
C#

Enfoque IronOCR:

// NuGet: IronOcr
using IronOcr;
using System.IO;

IronOcr.License.LicenseKey = "YOUR-LICENSE-KEY";

public class IronOcrBatchProcessor
{
    public Dictionary<string, string> ProcessFolder(string folderPath)
    {
        var results = new Dictionary<string, string>();
        // Single engine instance — initialized once, reused across all files
        var ocr = new IronTesseract();

        foreach (var file in Directory.GetFiles(folderPath, "*.jpg"))
        {
            var result = ocr.Read(file);
            results[Path.GetFileName(file)] = result.Text;
        }

        return results;
    }
}
C#

La instancia IronTesseract de IronOCR mantiene el estado del motor a través de las llamadas. Reutilizar una instancia para todo un lote elimina la sobrecarga de inicialización por archivo y elimina por completo la dependencia de la ruta de tessdata. Para el procesamiento por lotes paralelo en múltiples núcleos de CPU, vea el ejemplo de multihilo — cree un IronTesseract por hilo en lugar de compartir una única instancia.

Migración del modo de segmentación de página

Patagames expone el modo de segmentación de páginas a través de una llamada cruda SetVariable con una clave de cadena y un valor entero convertido a cadena. Sin IntelliSense, sin validación de enumeraciones, sin ninguna indicación en la documentación sobre el punto de llamada. Un solo dígito controla si Tesseract trata la entrada como un único bloque de texto, una columna, una palabra o un solo carácter, y no hay ninguna indicación cuando se escribe mal el nombre de la variable.

Enfoque de Patagames:

// NuGet: Tesseract.Net.SDK
using Patagames.Ocr;
using Patagames.Ocr.Enums;
using System.Drawing;

public string OcrSingleLineField(string imagePath)
{
    using var api = OcrApi.Create();
    api.Init(@"./tessdata", "eng");

    // Raw variable string — no IntelliSense, no validation
    // PageSegmentationMode.SingleLine == 7
    api.SetVariable("tessedit_pageseg_mode", "7");

    // Additional variable to suppress dictionary output
    api.SetVariable("tessedit_char_whitelist", "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz -.:/");

    using var bitmap = new Bitmap(imagePath);
    return api.GetTextFromImage(bitmap);
}
C#

Enfoque IronOCR:

// NuGet: IronOcr
using IronOcr;

IronOcr.License.LicenseKey = "YOUR-LICENSE-KEY";

public string OcrSingleLineField(string imagePath)
{
    var ocr = new IronTesseract();

    // Strongly typed enum — discoverable through IntelliSense
    ocr.Configuration.PageSegmentationMode = TesseractPageSegmentationMode.SingleLine;

    var result = ocr.Read(imagePath);
    return result.Text;
}
C#

Cada opción de configuración de Tesseract que Patagames expone a través de SetVariable tiene un equivalente fuertemente tipado directo en IronTesseract.Configuration. La migración consiste en una sustitución mecánica de literales de cadena por valores enumerados con nombre. Consulte la documentación de la API de IronTesseract para obtener la información completa sobre la configuración. La guía para la lectura de documentos específicos explica cuándo aplicar cada modo de segmentación de página a los diferentes tipos de documentos.

Patrón de reemplazo del iterador de resultados

Patagames devuelve una cadena plana desde GetTextFromImage. Para extraer palabras individuales, sus cuadros delimitadores o sus puntuaciones de confianza de la salida de Patagames, es necesario escribir un analizador sintáctico sobre la cadena devuelta, o acceder directamente a la API del iterador de resultados de Tesseract subyacente mediante interoperabilidad. Ninguno de estos enfoques es fiable ni fácil de mantener.IronOCR expone un OcrResult completamente estructurado con acceso nativo a cada nivel de la jerarquía del documento.

Enfoque de Patagames:

// NuGet: Tesseract.Net.SDK
using Patagames.Ocr;
using System.Drawing;

public void ExtractWordsWithPositions(string imagePath)
{
    using var api = OcrApi.Create();
    api.Init(@"./tessdata", "eng");

    using var bitmap = new Bitmap(imagePath);
    // Solo cuerdas planas — no word positions, no confidence, no line grouping
    var text = api.GetTextFromImage(bitmap);

    // Only option: split on whitespace and hope line breaks survive
    var words = text.Split(new[] { ' ', '\n', '\r' },
        StringSplitOptions.RemoveEmptyEntries);

    foreach (var word in words)
    {
        // No X, Y, Width, Height — position information is lost
        Console.WriteLine(word);
    }
}
C#

Enfoque IronOCR:

// NuGet: IronOcr
using IronOcr;

IronOcr.License.LicenseKey = "YOUR-LICENSE-KEY";

public void ExtractWordsWithPositions(string imagePath)
{
    var result = new IronTesseract().Read(imagePath);

    foreach (var page in result.Pages)
    {
        Console.WriteLine($"Page {page.PageNumber}: {page.Width}x{page.Height}px");

        foreach (var paragraph in page.Paragraphs)
        {
            Console.WriteLine($"  Paragraph at ({paragraph.X}, {paragraph.Y})");
            Console.WriteLine($"  Text: {paragraph.Text}");
        }

        foreach (var word in page.Words)
        {
            // Bounding box, confidence, and text for every word
            Console.WriteLine($"  Word: '{word.Text}' at ({word.X},{word.Y}) " +
                              $"size {word.Width}x{word.Height} " +
                              $"confidence {word.Confidence:F1}%");
        }
    }

    Console.WriteLine($"Overall confidence: {result.Confidence:F1}%");
}
C#

La estructura completa OcrResult — páginas, párrafos, líneas, palabras y caracteres — elimina la necesidad de cualquier analizador de postprocesamiento. Las coordenadas de las palabras permiten la extracción de campos por posición, lo cual es la base del procesamiento de facturas, el reconocimiento óptico de caracteres (OCR) de formularios y la extracción de tablas. Consulte la guía de resultados estructurados para ver la jerarquía completa y la guía de puntuaciones de confianza para filtrar las palabras con baja confianza.

Procesamiento de archivos TIFF de varias páginas

Patagames acepta un System.Drawing.Bitmap. Un TIFF de múltiples cuadros contiene múltiples imágenes incrustadas, pero System.Drawing.Bitmap no enumera automáticamente los cuadros — debe usar Image.SelectActiveFrame() para recorrerlos manualmente y pasar cada mapa de bits del cuadro a GetTextFromImage en un bucle. El API de enumeración de cuadros no es obvio y los mensajes de error cuando falla no son descriptivos.

Enfoque de Patagames:

// NuGet: Tesseract.Net.SDK
using Patagames.Ocr;
using System.Drawing;
using System.Drawing.Imaging;
using System.Text;

public string ProcessMultiPageTiff(string tiffPath)
{
    using var api = OcrApi.Create();
    api.Init(@"./tessdata", "eng");

    var sb = new StringBuilder();

    using var tiffImage = Image.FromFile(tiffPath);
    var frameCount = tiffImage.GetFrameCount(FrameDimension.Page);

    for (int i = 0; i < frameCount; i++)
    {
        // Manual frame selection — FrameDimension.Page required
        tiffImage.SelectActiveFrame(FrameDimension.Page, i);

        using var frameBitmap = new Bitmap(tiffImage);
        var pageText = api.GetTextFromImage(frameBitmap);
        sb.AppendLine(pageText);
    }

    return sb.ToString();
}
C#

Enfoque IronOCR:

// NuGet: IronOcr
using IronOcr;

IronOcr.License.LicenseKey = "YOUR-LICENSE-KEY";

public string ProcessMultiPageTiff(string tiffPath)
{
    using var input = new OcrInput();
    // LoadImageFrames handles all frames automatically
    input.LoadImageFrames(tiffPath);

    // Optional: apply preprocessing to all frames at once
    input.Deskew();
    input.DeNoise();

    var result = new IronTesseract().Read(input);

    // Per-page access if needed
    foreach (var page in result.Pages)
    {
        Console.WriteLine($"Page {page.PageNumber}: {page.Words.Length} words");
    }

    return result.Text;
}
C#

OcrInput.LoadImageFrames() maneja la enumeración de cuadros internamente y aplica el procesamiento previo a cada cuadro en la tubería. La ceremonia de selección de cuadro System.Drawing desaparece por completo. Consulte la guía de entrada de archivos TIFF y GIF para obtener opciones adicionales, incluida la selección de fotogramas individuales cuando solo se necesiten páginas específicas.

Entrada de PDF sin un renderizador externo

Patagames no tiene soporte nativo para PDF. Un pipeline de OCR de PDF basado en Patagames requiere una biblioteca de renderizado de PDF externa — PdfiumViewer, iText o PDFSharp — para convertir cada página en un Bitmap antes de pasarlo a GetTextFromImage. Esa dependencia externa añade una sobrecarga a la gestión de paquetes, una consideración de licencia independiente y un punto de fallo secundario. La calidad de renderizado también varía entre las distintas bibliotecas, lo que afecta a la precisión del OCR independientemente del motor Tesseract.

Enfoque de Patagames:

// NuGet: Tesseract.Net.SDK + PdfiumViewer (external dependency)
using Patagames.Ocr;
using PdfiumViewer; // separate NuGet package required
using System.Drawing;
using System.Text;

public string OcrPdfDocument(string pdfPath)
{
    using var api = OcrApi.Create();
    api.Init(@"./tessdata", "eng");

    var sb = new StringBuilder();

    // External renderer required — Patagames has no PDF support
    using var pdfDoc = PdfDocument.Load(pdfPath);

    for (int page = 0; page < pdfDoc.PageCount; page++)
    {
        // Render at 300 DPI for acceptable OCR accuracy
        using var img = pdfDoc.Render(page, 300, 300, false);
        using var bitmap = new Bitmap(img);

        var pageText = api.GetTextFromImage(bitmap);
        sb.AppendLine(pageText);
    }

    return sb.ToString();
}
C#

Enfoque IronOCR:

// NuGet: IronOcr only — no external PDF renderer
using IronOcr;

IronOcr.License.LicenseKey = "YOUR-LICENSE-KEY";

public string OcrPdfDocument(string pdfPath)
{
    using var input = new OcrInput();
    input.LoadPdf(pdfPath);

    // Preprocessing applies to every page in one call
    input.Deskew();

    var ocr = new IronTesseract();
    var result = ocr.Read(input);

    // Full per-page structured access
    foreach (var page in result.Pages)
    {
        Console.WriteLine($"Page {page.PageNumber}: {page.Paragraphs.Length} paragraphs");
    }

    return result.Text;
}
C#

Un paquete NuGet reemplaza a dos. El paso de renderizado desaparece. La guía de entrada de PDF abarca archivos PDF de una sola página, de varias páginas y protegidos con contraseña. Para el flujo de trabajo de salida de PDF con capacidad de búsqueda (que produce un documento con capacidad de búsqueda mediante Ctrl+F a partir de un PDF escaneado), la guía y el ejemplo de PDF con capacidad de búsqueda muestran el proceso completo en cinco líneas.

Referencia de mapeo de API de Patagames Tesseract .NET SDK a IronOCR

SDK de Patagames Tesseract .NETEquivalente a IronOCR
Tesseract.Net.SDK (paquete NuGet)IronOcr (paquete NuGet)
Patagames.Ocr (namespace)IronOcr (namespace)
Patagames.Ocr.Enums (namespace)IronOcr (namespace)
OcrApi.Create()new IronTesseract()
api.Init(tessDataPath, "eng")ocr.Language = OcrLanguage.English (sin ruta)
api.Init(path, "eng+fra+deu")ocr.Language = OcrLanguage.English + OcrLanguage.French + OcrLanguage.German
api.GetTextFromImage(bitmap)ocr.Read(imagePath).Text
api.SetVariable("tessedit_pageseg_mode", "7")ocr.Configuration.PageSegmentationMode = TesseractPageSegmentationMode.SingleLine
api.SetVariable(key, value) (cualquier variable cruda)ocr.Configuration.[TypedProperty]
new Bitmap(imagePath) (preparación de entrada)input.LoadImage(imagePath)
OcrBitmap.FromFile(path)input.LoadImage(path)
No admite archivos TIFF multifotograma.input.LoadImageFrames(tiffPath)
No se permite la entrada de archivos PDF.input.LoadPdf(pdfPath) o ocr.Read(pdfPath)
No hay PDF con función de búsquedaresult.SaveAsSearchablePdf("output.pdf")
Sin preprocesamientoinput.Deskew(), input.DeNoise(), input.Contrast(), input.Binarize()
Sin OCR de regióninput.LoadImage(path, new CropRectangle(x, y, w, h))
Sin lectura de códigos de barrasocr.Configuration.ReadBarCodes = true
Resultado de cadena plana únicamenteresult.Pages, result.Lines, result.Words, result.Paragraphs
Sin confianza por palabraresult.Words[i].Confidence, result.Confidence
PageSegmentationMode enumTesseractPageSegmentationMode enum
No se permite la exportación de hOCR.Resultado .ToHOcrString() salida
Solo para Windows x64/x86Windows, Linux, macOS, Docker, Azure, AWS

Problemas comunes de migración y soluciones

Problema 1: Falta el directorio Tessdata en el nuevo entorno.

Patagames: La llamada api.Init(@"./tessdata", "eng") falla en tiempo de ejecución si el directorio tessdata está ausente o falta el archivo eng.traineddata. En entornos de contenedores, se trata de un fallo que se produce en el momento de la implementación y que no genera ninguna advertencia en el momento de la compilación. Los equipos que implementan en Docker suelen descubrir esto después de que la imagen ya ha sido subida.

**Solución:**IronOCR elimina por completo el concepto de directorio tessdata. Instalar datos de idioma como paquetes NuGet :

dotnet add package IronOcr.Languages.English

Los datos de idioma se resuelven en el tiempo de compilación y se incluyen automáticamente en la salida dotnet publish. No hay forma de equivocarse en el proceso ni ningún elemento en la lista de verificación de implementación para los archivos de idioma.

Problema 2: System.Drawing.Bitmap falla en Linux

Patagames: El constructor System.Drawing.Bitmap lanza TypeInitializationException o PlatformNotSupportedException en Linux a menos que libgdiplus esté instalado como un paquete del sistema. Incluso con libgdiplus presente, el comportamiento es inconsistente en las diferentes distribuciones. Microsoft recomienda explícitamente no usar System.Drawing en plataformas que no sean de Windows en el desarrollo nuevo.

**Solución:**IronOCR acepta rutas de archivo, matrices de bytes y flujos directamente. La dependencia System.Drawing no es requerida:

// Replace this pattern:
using var bitmap = new Bitmap(imagePath); // fails without libgdiplus on Linux
api.GetTextFromImage(bitmap);

// With:
var result = new IronTesseract().Read(imagePath); // no System.Drawing required
C#

Consulte la guía de entrada de imágenes para conocer todos los tipos de entrada compatibles, incluidos los arrays de bytes y las secuencias de datos.

Problema 3: Fallos silenciosos en SetVariable

Patagames: api.SetVariable("tessedit_pageseg_mode", someValue) devuelve bool pero la mayoría de los que llaman descartan el valor devuelto. Cuando se escribe mal el nombre de una variable o se pasa un valor no compatible, Tesseract aplica silenciosamente un valor predeterminado y continúa. Resulta difícil rastrear la degradación de la precisión resultante hasta la llamada de configuración.

Solución: Las propiedades de configuración de IronOCR son fuertemente tipadas. Una asignación no válida produce un error de compilación, no un comportamiento predeterminado silencioso en tiempo de ejecución:

// Compile-time safety — no silent failures
var ocr = new IronTesseract();
ocr.Configuration.PageSegmentationMode = TesseractPageSegmentationMode.SingleBlock;
ocr.Configuration.TesseractVersion = TesseractVersion.Tesseract5; // also strongly typed
C#

Problema 4: OcrApi inicializado dentro de un bucle.

Patagames: Los equipos que inicializan OcrApi dentro de un bucle de procesamiento incurren en la sobrecarga de carga de datos en cada iteración. El patrón típico — OcrApi.Create() y api.Init() dentro de un foreach — es correcto desde una perspectiva de aislamiento de hilos pero costoso al procesar cientos de documentos.

Solución: Cree un IronTesseract por hilo y reutilícelo en todos los documentos asignados a ese hilo. La instancia no tiene estado entre las llamadas .Read():

// One instance, many reads — engine initialized once
var ocr = new IronTesseract();
ocr.Language = OcrLanguage.English;

foreach (var file in imageFiles)
{
    var text = ocr.Read(file).Text;
    ProcessText(text);
}
C#

Para cargas de trabajo por lotes paralelas, cree una instancia por tarea. Vea la guía de optimización de velocidad para opciones de ajuste de rendimiento, incluyendo IronTesseract.Configuration.TesseractVersion y presets de velocidad de lectura.

Problema 5: Ninguna imagen base de Docker para Linux funciona.

Patagames: No existe un binario de Patagames compatible con Linux. Cualquier intento de ejecutar una aplicación basada en Patagames en un contenedor Docker de Linux falla. La única solución es un contenedor basado en Windows (FROM mcr.microsoft.com/windows/servercore), que es significativamente más grande, más lento de descargar e incompatible con la mayoría de las configuraciones de Kubernetes que usan grupos de nodos Linux.

**Solución:**IronOCR admite imágenes base estándar de Linux. La guía de implementación de Docker cubre la configuración exacta del Dockerfile:

FROM mcr.microsoft.com/dotnet/aspnet:8.0
WORKDIR /app
COPY --from=build /app/publish .
#IronOCR resolves the Linux native runtime from NuGet automatically
ENTRYPOINT ["dotnet", "MyApp.dll"]
Text

No se requiere contenedor de Windows. No hay distribución binaria independiente. La misma imagen de Docker se ejecuta en cualquier host de contenedores basado en Linux.

Problema 6: El OCR de PDF requiere dos paquetes NuGet

Patagames: Para añadir OCR de PDF a una aplicación de Patagames se requiere un segundo paquete NuGet para la visualización de PDF (PdfiumViewer, iTextSharp.LGPLv2.Core o similar). Cada una de ellas tiene sus propios términos de licencia, frecuencia de actualización y posibles problemas de compatibilidad. Cuando la versión del renderizador de PDF y la versión de Patagames entren en conflicto, ambos equipos deben colaborar para resolverlo.

**Solución:**IronOCR gestiona la entrada de PDF de forma nativa sin necesidad de un segundo paquete. Eliminar por completo la dependencia del renderizador de PDF:

# Remove the PDF rendering shim
dotnet remove package PdfiumViewer

#IronOCR handles PDF natively
var result = new IronTesseract().Read("document.pdf");
SHELL

Lista de verificación para la migración al SDK de Tesseract.NET de Patagames

Pre-Migración

Revisa el código para identificar todas las referencias a Patagames antes de empezar:

# Find all files using Patagames namespaces
grep -r "Patagames.Ocr" --include="*.cs" . -l

# Find all OcrApi usage patterns
grep -r "OcrApi\|GetTextFromImage\|api\.Init\|SetVariable" --include="*.cs" .

# Find tessdata path references
grep -r "tessdata\|TessDataPath\|traineddata" --include="*.cs" .

# Find System.Drawing.Bitmap usage tied to OCR
grep -r "new Bitmap\|System\.Drawing" --include="*.cs" . -l

# Find any PDF rendering libraries used to feed Patagames
grep -r "PdfiumViewer\|iTextSharp\|PdfSharp" --include="*.csproj" .
SHELL

Documento: recuento total de sitios de llamadas OcrApi.Create(), número de configuraciones de idioma api.Init() distintas, ubicación del directorio tessdata en cada entorno de implementación y cualquier código de preprocesamiento escrito en System.Drawing o ImageSharp que envuelva las llamadas de Patagames.

Migración de código

  1. Eliminar la referencia de paquete NuGet Tesseract.Net.SDK de todos los proyectos.
  2. Elimina cualquier paquete de renderización de PDF NuGet (PdfiumViewer, iText, etc.) utilizado solo para alimentar Patagames.
  3. Instalar el paquete NuGet IronOcr.
  4. Instalar IronOcr.Languages.English y cualquier otro paquete de idioma requerido.
  5. Agregar IronOcr.License.LicenseKey = "YOUR-LICENSE-KEY" al inicio de la aplicación.
  6. Reemplazar using Patagames.Ocr; y using Patagames.Ocr.Enums; con using IronOcr;.
  7. Reemplazar cada bloque OcrApi.Create() + api.Init(path, lang) con new IronTesseract() + ocr.Language = OcrLanguage.[Language].
  8. Reemplazar cada llamada api.GetTextFromImage(bitmap) con ocr.Read(imagePath).Text (eliminando el constructor Bitmap).
  9. Reemplazar cada llamada api.SetVariable("tessedit_pageseg_mode", value) con el ocr.Configuration.PageSegmentationMode = TesseractPageSegmentationMode.[Value] tipado.
  10. Eliminar toda la instanciación de System.Drawing.Bitmap que existía únicamente para pasar imágenes a Patagames.
  11. Reemplazar bucles de renderización de PDF (si están presentes) con input.LoadPdf(pdfPath).
  12. Reemplazar bucles de TIFF de múltiples cuadros usando Image.SelectActiveFrame() con input.LoadImageFrames(tiffPath).
  13. Reemplazar cualquier código de preprocesamiento personalizado (redimensionamiento System.Drawing, contraste, umbral) con las llamadas de filtro OcrInput equivalentes.
  14. Elimina el directorio tessdata de todos los manifiestos de implementación, archivos Dockerfile y pasos de copia de CI.
  15. Actualizar las pruebas de integración para que se ejecuten en entornos de CI de Linux (GitHub Actions ubuntu-latest, etc.) con el fin de verificar el comportamiento multiplataforma.

Posmigración

  • Ejecuta la Suite completa de pruebas en Linux (no solo en Windows) para confirmar que la habilitación de la implementación multiplataforma funciona.
  • Verifica que la precisión del OCR sea igual o superior a la referencia de Patagames en el mismo conjunto de imágenes de prueba.
  • Confirme que los documentos multilingües produzcan la salida correcta utilizando el enfoque enum OcrLanguage.
  • Prueba la entrada de PDF directamente sin la biblioteca de renderizado externa y compara la precisión de la salida con la antigua ruta de renderizado de bitsmap.
  • El procesamiento de TIFF de múltiples fotogramas produce el mismo número de páginas y contenido de texto que el bucle de enumeración de fotogramas anterior.
  • Confirme que el directorio tessdata no está presente en el artefacto de implementación y que no se producen errores de ruta en tiempo de ejecución.
  • Ejecute una compilación de Docker que apunte a linux/amd64 y ejecute al menos una llamada OCR dentro del contenedor.
  • Verifica que el proceso de CI (GitHub Actions, GitLab CI, Azure DevOps) se complete correctamente en su ejecutor Linux predeterminado.
  • Comprueba que las puntuaciones de confianza estén disponibles en el resultado y que cualquier lógica de filtrado basada en la confianza funcione según lo esperado.
  • Confirme que la inicialización de la clave de licencia se ejecute antes de que se cree la primera instancia IronTesseract en el código de arranque de producción.

Principales ventajas de migrar a IronOCR

Implementación multiplataforma sin cambios en el código. Tras la migración, el mismo binario se ejecuta en Windows Server, contenedores Docker de Ubuntu, máquinas de desarrollo de macOS, Azure App Service en Linux y AWS Lambda. No hay condiciones de plataforma, ni indicadores de identificador de tiempo de ejecución, ni artefactos de implementación separados por sistema operativo. Una migración a la nube que antes se veía bloqueada por la biblioteca OCR exclusiva de Windows se convierte en una implementación estándar en contenedores. Las guías de implementación de Linux, Docker, Azure y AWS abarcan las configuraciones de producción para cada destino.

La gestión de Tessdata desaparece de las operaciones. El directorio tessdata —su ubicación, su contenido, su presencia en todos los entornos— ya no existe como una preocupación operativa. Los datos de idioma son una dependencia de NuGet resuelta en tiempo de compilación. Aparecen automáticamente en la salida dotnet publish. No hay guías de implementación que actualizar al añadir un nuevo idioma, ni capas de Docker que invalidar cuando cambian los archivos tessdata, ni incidentes de producción por falta de tessdata que investigar.

La salida estructurada reemplaza la cadena de análisis. Las aplicaciones que anteriormente analizaban la cadena plana de GetTextFromImage para extraer campos, validar contenido o calcular la confianza ahora acceden a esos datos directamente desde OcrResult. Las coordenadas de las WORD, los límites de línea, las agrupaciones de párrafos y las puntuaciones de confianza por WORD son propiedades de primer orden. La extracción de campos por cuadro delimitador — la base del procesamiento de facturas y del OCR de formularios — es una llamada CropRectangle directa en lugar de una búsqueda de subcadenas frágil.

El preprocesamiento integrado reemplaza las tuberías de imágenes personalizadas. Cualquier código de preprocesamiento escrito para compensar la falta de filtros integrados de Patagames se puede reemplazar con llamadas al método OcrInput. La corrección de la inclinación, la eliminación de ruido, la mejora del contraste, la binarización y la normalización de la resolución son operaciones de una sola línea. Los equipos que pasaron 20-40 horas construyendo y ajustando una tubería de preprocesamiento System.Drawing pueden reemplazarla con cinco llamadas de método y redirigir ese esfuerzo de mantenimiento a otro lugar. Consulte la descripción general de las funciones de preprocesamiento para ver el catálogo completo de filtros.

La compatibilidad nativa con PDF elimina una clase de dependencia. Se eliminan las bibliotecas de renderización de PDF añadidas únicamente para cubrir la carencia de Patagames en este ámbito. Un sistema de OCR en producción que anteriormente requería coordinar actualizaciones a través de tres paquetes — Tesseract.Net.SDK, un renderizador de PDF y su dependencia System.Drawing compartida — ahora tiene un paquete de OCR sin dependencias de conexión. La entrada de PDF, incluidos los documentos protegidos con contraseña y de varias páginas, es un tipo de entrada de primera clase. Para casos de uso de cumplimiento y gestión de registros, result.SaveAsSearchablePdf() produce salida PDF con capa de texto en una sola llamada sin bibliotecas adicionales.

Precios transparentes y soporte comercial. La licencia perpetua Lite de IronOCR cubre un desarrollador y un único lugar de implementación con un año de actualizaciones incluido. Los precios son públicos, la estructura de niveles es clara y se ofrece asistencia comercial sin necesidad de un contrato Enterprise. Los equipos que pagaban las tarifas de Patagames por la envoltura de Tesseract solo para Windows obtienen ahora implementación multiplataforma, preprocesamiento, compatibilidad con PDF y más de 125 idiomas, al tiempo que pasan a un modelo de precios en el que el coste se conoce antes de que finalice la evaluación. Consulte las condiciones de licencia de IronOCR para obtener todos los detalles de los planes y la página del producto IronOCR para obtener una licencia de prueba gratuita.

Por favor nota: PDFium, PDFSharp, Tesseract, e iText son marcas registradas de sus respectivos propietarios. Este sitio no está afiliado, respaldado ni patrocinado por Chromium Project, Google, empira Software GmbH o iText Group. Todos los nombres de productos, logotipos y marcas son propiedad de sus respectivos propietarios. Las comparaciones son solo para fines informativos y reflejan información públicamente disponible en el momento de la redacción.

Artículos Relacionados

Key in blue circle

Obtenga su clave de prueba gratuita de 30 días al instante.

Your trial license will be sent to your email address

Sin limitaciones. 100 % desbloqueado. Sin tarjeta de crédito.

bullet_checkedNo se requiere tarjeta de crédito ni creación de cuentaSin limitaciones. 100 % desbloqueado. Sin tarjeta de crédito.
  • Logo Aetna
  • Logo NASA
  • Logo GE
  • Logo Porsche
  • Logo USDA
  • Logo Qatar
Join Millions of Engineers who’ve tried IronPDF
Obtén tu Consulta Sin Compromiso
Completa el formulario a continuación o envía un correo a sales@ironsoftware.com
Tus detalles siempre serán mantenidos confidenciales.
Confiado por millones de ingenieros en todo el mundo
Logos de clientes de Iron Software
Obtenga su Clave de Prueba de 30 días gratis al instante.
No se requiere tarjeta de crédito ni creación de cuenta