IRONSOFTWAREHOME
VIDEOS

Migración de Aspose.OCR a IronOCR

Kannaopat Udonpant
Kannapat Udonpant
Updated: 20 de junio de 2026

Esta guía acompaña a los desarrolladores .NET a través de una migración completa de Aspose.OCR a IronOCR . Abarca el intercambio de paquetes, los cambios de espacio de nombres, la inicialización de la licencia y cuatro ejemplos concretos de migración de código extraídos de patrones de uso reales de Aspose.OCR: configuración de los ajustes de reconocimiento, modos de detección de áreas, reconocimiento por lotes con filtrado basado en la confianza y manejo de la salida estructurada. Cada ejemplo muestra el enfoque de Aspose.OCR junto con su equivalente en IronOCR para que pueda traducir su código existente sin tener que adivinar.

¿Por qué migrar desde Aspose.OCR?

Los motivos por los que los equipos abandonan Aspose.OCR se centran en dos puntos clave: el modelo de facturación por suscripción y la carga de configuración que supone el proceso de reconocimiento manual.

Los costos de suscripción se acumulan sin límite máximo. Aspose.OCR no tiene una licencia perpetua. La licencia para desarrolladores de pequeñas empresas cuesta 999 dólares por desarrollador al año. Un equipo de cinco personas que renueva su contrato por tres años paga 14.985 dólares antes de escribir una sola línea de lógica de negocio. El plan Professional de IronOCR cuesta 2999 dólares por única vez: la misma cobertura, para siempre, sin obligación de renovación. Las matemáticas se vuelven inevitables cuando el departamento de finanzas pregunta por qué una dependencia de OCR se renueva anualmente como una suscripción a SaaS.

Cada llamada de reconocimiento requiere una ceremonia de objetos de configuración. Aspose.OCR separa su superficie de configuración en RecognitionSettings, DocumentRecognitionSettings, DetectAreasMode, y la colección PreprocessingFilter. Antes de que puedas llamar a RecognizeImage, construyes un objeto de configuración, lo llenas y lo pasas explícitamente.IronOCR colapsa eso en .Read(). La diferencia es pequeña por llamada; Se acumula a lo largo de todo el código fuente.

La selección manual del modo de detección de área es consecuente. Aspose.OCR expone valores de DetectAreasMode (COMBINE, DOCUMENT, TABLE, NONE) que el desarrollador debe elegir para cada tipo de documento. El uso de un modo incorrecto en un formulario estructurado reduce la precisión del reconocimiento.IronOCR analiza automáticamente el diseño del documento y muestra el resultado estructurado (párrafos, líneas, palabras) sin necesidad de declarar el modo previamente.

El procesamiento por lotes requiere manejar listas de resultados a mano. Guardar un lote de páginas reconocidas como un PDF buscable o un archivo de datos estructurados en Aspose.OCR significa acumular objetos RecognitionResult en un List<RecognitionResult>, luego pasar esa lista a SaveMultipageDocument. La organización de la lista es responsabilidad suya.IronOCR acepta múltiples entradas a través de un solo objeto OcrInput y produce un OcrResult que cubre todas las páginas.

El cambio de formato de salida toca múltiples superficies de API. Exportar a JSON, XML o texto plano en Aspose.OCR requiere un valor de enumeración SaveFormat separado pasado a SaveMultipageDocument. Filtrar esos resultados por confianza antes de guardar requiere iterar la lista e inspeccionar cada matriz RecognitionAreasConfidence.IronOCR expone result.Text, result.Confidence, y result.Pages en un único objeto de resultado, el filtrado de confianza es una expresión LINQ de una línea.

El modelo de licencias de IronOCR elimina por completo el riesgo de renovación. Una licencia adquirida es suya de forma permanente. Las actualizaciones están incluidas durante un año; Posteriormente, la última versión recibida continúa funcionando en producción sin riesgos de incumplimiento normativo. No existe ningún escenario en el que un pago omitido interrumpa su implementación.

El problema fundamental

Aspose.OCR vincula la configuración de reconocimiento a un objeto de configuración que debe construirse, rellenarse y pasarse en cada llamada. El modo, el idioma, los filtros y la estrategia de área son todas propiedades de ese objeto:

// Aspose.OCR: build a settings object for every recognition call
var api = new AsposeOcr();
var settings = new RecognitionSettings
{
    Language = Language.Eng,
    DetectAreasMode = DetectAreasMode.DOCUMENT, // must choose the right mode
    RecognizeSingleLine = false,
    AutoSkew = true
};
var result = api.RecognizeImage("form.jpg", settings);
string text = result.RecognitionText;

IronOCR utiliza una única llamada .Read(). La configuración reside en la instancia de IronTesseract cuando es necesario, no en un objeto por llamada:

// IronOCR: one call, no settings object required
var text = new IronTesseract().Read("form.jpg").Text;

##IronOCR vs Aspose.OCR: Comparación de características

La tabla que aparece a continuación muestra la relación entre las dos bibliotecas en función de las dimensiones más importantes a la hora de tomar una decisión sobre la migración.

CaracterísticaAspose.OCRIronOCR
Modelo de licenciaSuscripción anual (sin opción perpetua)Compra única perpetua
1-costo del desarrollador$999 al año$999 una vez
Costo del desarrollador 10$4,995/año (Licencia de sitio)$2,399 una sola vez (Professional)
Consecuencia del vencimiento de la licenciaNo se pueden implementar nuevas compilaciones, no hay parches de seguridad.Ninguno: la versión comprada funciona indefinidamente.
Clase OCR primariaAsposeOcrIronTesseract
Se requiere el objeto de configuraciónSí (RecognitionSettings o DocumentRecognitionSettings)No — opcional OcrInput para escenarios avanzados
Detección de áreaSelección manual de enum DetectAreasModeAnálisis automático de la disposición
PreprocesamientoRecolección manual de PreprocessingFilterAutomático con anulación explícita opcional
Entrada de PDFPDFs estándar vía RecognizePdf()Nativo vía .Read() o OcrInput.LoadPdf()
PDF protegido con contraseñaRequiere Aspose.PDF (licencia aparte).Parámetro Password: incorporado
Salida en PDF con capacidad de búsquedaSaveMultipageDocument(path, SaveFormat.Pdf, list)result.SaveAsSearchablePdf(path)
Valor de confianzaresult.RecognitionAreasConfidence.Average() (matriz)result.Confidence (doble único, 0–100)
Datos estructurados a nivel de palabraGeometría a nivel de área vía RecognitionAreasRectanglesresult.Words con X, Y, Ancho, Altura, Confianza
Datos estructurados a nivel de páginaNo expuestoresult.Pages con párrafos, líneas, palabras, caracteres
Multilingüe simultáneoUn solo idioma por llamadaOcrLanguage.French + OcrLanguage.German
Idiomas incluidosMás de 130 en el paquete principalMás de 125 paquetes de idiomas NuGet
Lectura de BarCodesNo disponibleIncorporado (ocr.Configuration.ReadBarCodes = true)
Seguridad de los hilosSe recomienda una nueva instancia por hilo.Instancia compartida única y totalmente segura para subprocesos
TIFF multifotogramaNo es nativoinput.LoadImageFrames("file.tiff")
Exportación hOCRLimitadoresult.SaveAsHocrFile(path)
NuGet multiplataformaSí (Windows, Linux, macOS, Docker, Azure, AWS)
Número de paquetes NuGet1 idioma principal + paquetes de idiomas opcionales1 idioma principal + paquetes de idiomas opcionales

Inicio rápido: Migración de Aspose.OCR a IronOCR

Paso 1: Sustituir el paquete NuGet

Eliminar Aspose.OCR:

dotnet remove package Aspose.OCR
SHELL

Instala IronOCR desde NuGet :

dotnet add package IronOcr

Paso 2: Actualizar los espacios de nombres

Reemplaza todas las importaciones de espacio de nombres de Aspose.OCR:

// Before (Aspose.OCR)
using Aspose.OCR;
using Aspose.OCR.Models;
using Aspose.OCR.Models.PreprocessingFilters;

// After (IronOCR)
using IronOcr;

Paso 3: Inicializar licencia

Elimine la llamada a la licencia basada en archivos de Aspose y reemplácela con la clave de cadena de IronOCR. Coloque esto al iniciar la aplicación, una vez por proceso, no una vez por solicitud:

// Remove Aspose license setup
// var license = new Aspose.OCR.License();
// license.SetLicense("Aspose.OCR.lic");

// Add IronOCR license at startup
IronOcr.License.LicenseKey = "YOUR-LICENSE-KEY";

// Production pattern: read from environment variable
IronOcr.License.LicenseKey = Environment.GetEnvironmentVariable("IRONOCR_LICENSE");

Ejemplos de migración de código

Configuración de los ajustes de reconocimiento

Aspose.OCR centraliza todo el comportamiento de reconocimiento en un objeto RecognitionSettings. El idioma, el modo de detección de área, el indicador de línea única y el umbral se encuentran allí como propiedades. Se construye desde cero para cada tipo de documento o patrón de llamada.

Enfoque Aspose.OCR:

// Configuring recognition settings for a structured form
var api = new AsposeOcr();

var settings = new RecognitionSettings
{
    Language = Language.Eng,
    DetectAreasMode = DetectAreasMode.DOCUMENT,
    RecognizeSingleLine = false,
    AutoSkew = true,
    RecognitionAreas = new List<Rectangle>
    {
        new Rectangle(0, 0, 800, 100)  // header zone
    }
};

var result = api.RecognizeImage("structured-form.jpg", settings);
Console.WriteLine(result.RecognitionText);

Enfoque IronOCR:

// Recognition behavior configured once on the IronTesseract instance
var ocr = new IronTesseract();
ocr.Language = OcrLanguage.English;

// Region targeting replaces RecognitionAreas in RecognitionSettings
var headerRegion = new CropRectangle(0, 0, 800, 100);
using var input = new OcrInput();
input.LoadImage("structured-form.jpg", headerRegion);

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

No hay ningún objeto de configuración que crear por cada llamada. El idioma va en la instancia de IronTesseract; la orientación de la región va en OcrInput en el momento de la carga. Las decisiones de DetectAreasMode y RecognizeSingleLine son manejadas automáticamente por el motor. Para obtener instrucciones detalladas sobre el OCR basado en regiones, consulte la guía práctica sobre OCR basado en regiones .

Migración del modo de detección de área

Aspose.OCR requiere que elijas un valor de DetectAreasMode antes de cada llamada de reconocimiento. COMBINE fusiona texto de diferentes regiones de diseño, DOCUMENT trata la imagen como un documento estándar, TABLE optimiza para diseños de cuadrícula. Seleccionar el modo incorrecto para el tipo de documento provoca una salida desalineada o incompleta.

Enfoque Aspose.OCR:

// Three separate calls with different modes for different document types
var api = new AsposeOcr();

// For a document with mixed prose and table content
var docSettings = new RecognitionSettings
{
    DetectAreasMode = DetectAreasMode.COMBINE,
    Language = Language.Eng
};

// For a pure tabular document
var tableSettings = new RecognitionSettings
{
    DetectAreasMode = DetectAreasMode.TABLE,
    Language = Language.Eng
};

// For a single-column text document
var linearSettings = new RecognitionSettings
{
    DetectAreasMode = DetectAreasMode.DOCUMENT,
    Language = Language.Eng
};

string mixedResult = api.RecognizeImage("mixed-layout.jpg", docSettings).RecognitionText;
string tableResult = api.RecognizeImage("data-table.jpg", tableSettings).RecognitionText;
string linearResult = api.RecognizeImage("text-document.jpg", linearSettings).RecognitionText;

Enfoque IronOCR:

// Single API surface handles all layout types automatically
var ocr = new IronTesseract();

// Same code path for every document type
var mixedResult = ocr.Read("mixed-layout.jpg").Text;
var tableResult = ocr.Read("data-table.jpg").Text;
var linearResult = ocr.Read("text-document.jpg").Text;

// For table documents, structured data is immediately available
var result = ocr.Read("data-table.jpg");
foreach (var page in result.Pages)
{
    foreach (var paragraph in page.Paragraphs)
    {
        Console.WriteLine($"Block at ({paragraph.X}, {paragraph.Y}): {paragraph.Text}");
    }
}

IronOCR elimina por completo la decisión de selección de modo. El motor analiza el diseño y expone el resultado a través de la jerarquía Pages, Paragraphs, Lines, y Words. La guía de lectura de resultados explica cómo navegar por el modelo completo de resultados estructurados para el análisis del diseño del documento. Para conocer los patrones de extracción específicos de cada tabla, consulte la guía de lectura de tablas .

Reconocimiento de lotes con filtrado basado en la confianza

Los flujos de trabajo por lotes de Aspose.OCR acumulan objetos RecognitionResult en una lista. Filtrar por confianza requiere iterar esa lista y calcular el promedio por región antes de aceptar un resultado. La lista debe ser manejada explícitamente y pasada a SaveMultipageDocument si deseas exportar múltiples páginas como un solo archivo.

Enfoque Aspose.OCR:

// Batch recognition with confidence filtering before output
var api = new AsposeOcr();
var settings = new RecognitionSettings
{
    Language = Language.Eng,
    DetectAreasMode = DetectAreasMode.DOCUMENT
};

string[] documentPaths = Directory.GetFiles("invoice-archive", "*.jpg");
var acceptedResults = new List<RecognitionResult>();
var rejectedPaths = new List<string>();

foreach (var path in documentPaths)
{
    var result = api.RecognizeImage(path, settings);

    // Confidence is an array of per-region values — must average manually
    float avgConfidence = result.RecognitionAreasConfidence != null
        ? result.RecognitionAreasConfidence.Average()
        : 0f;

    if (avgConfidence >= 0.70f)
    {
        acceptedResults.Add(result);
    }
    else
    {
        rejectedPaths.Add(path);
        Console.WriteLine($"Rejected: {path} ({avgConfidence:P0} confidence)");
    }
}

// Save accepted pages as a single searchable PDF
if (acceptedResults.Any())
{
    api.SaveMultipageDocument("high-confidence-invoices.pdf",
        SaveFormat.Pdf, acceptedResults);
}

Console.WriteLine($"Accepted: {acceptedResults.Count}, Rejected: {rejectedPaths.Count}");

Enfoque IronOCR:

// Batch recognition with confidence filtering using unified result model
var ocr = new IronTesseract();
string[] documentPaths = Directory.GetFiles("invoice-archive", "*.jpg");

var acceptedResults = new List<OcrResult>();
var rejectedPaths = new List<string>();

foreach (var path in documentPaths)
{
    var result = ocr.Read(path);

    // Single confidence value — no averaging required
    if (result.Confidence >= 70.0)
    {
        acceptedResults.Add(result);
    }
    else
    {
        rejectedPaths.Add(path);
        Console.WriteLine($"Rejected: {path} ({result.Confidence:F1}% confidence)");
    }
}

// Save accepted pages — each result becomes a page in the output PDF
if (acceptedResults.Any())
{
    using var outputInput = new OcrInput();
    foreach (var path in documentPaths
        .Where(p => !rejectedPaths.Contains(p)))
    {
        outputInput.LoadImage(path);
    }
    var combined = ocr.Read(outputInput);
    combined.SaveAsSearchablePdf("high-confidence-invoices.pdf");
}

Console.WriteLine($"Accepted: {acceptedResults.Count}, Rejected: {rejectedPaths.Count}");

result.Confidence es un único double que va de 0 a 100. El promedio del array RecognitionAreasConfidence de Aspose devuelve un float en un rango que varía según la versión: el umbral de comparación necesita ajustes durante la migración. Las puntuaciones de confianza guían los documentos con valores de confianza por palabra, por línea y por página para los flujos de trabajo de validación de documentos. Para patrones de procesamiento por lotes de alto volumen, consulte el ejemplo de multihilo .

Manejo de salida estructurada

Aspose.OCR exporta datos estructurados a través de SaveMultipageDocument con valores de enumeración de formato específico SaveFormat. La salida JSON escribe un archivo legible por máquina; la salida XML escribe un archivo de documento anotado. Acceder a los datos estructurados crudos — posiciones de palabras, límites de líneas — requiere iterar RecognitionAreasRectangles, que devuelve la geometría al nivel de región, no al nivel de palabra.

Enfoque Aspose.OCR:

// Structured output: JSON and XML via SaveMultipageDocument
var api = new AsposeOcr();
var settings = new RecognitionSettings
{
    Language = Language.Eng,
    DetectAreasMode = DetectAreasMode.COMBINE
};

var results = new List<RecognitionResult>();
foreach (var path in new[] { "page1.jpg", "page2.jpg", "page3.jpg" })
{
    results.Add(api.RecognizeImage(path, settings));
}

// Export as JSON
api.SaveMultipageDocument("output.json", SaveFormat.Json, results);

// Export as XML
api.SaveMultipageDocument("output.xml", SaveFormat.Xml, results);

// Accessing area-level geometry (not word-level)
foreach (var result in results)
{
    var areas = result.RecognitionAreasRectangles;
    if (areas != null)
    {
        foreach (var area in areas)
        {
            Console.WriteLine($"Area at ({area.X},{area.Y}): {area.Width}x{area.Height}");
        }
    }
    // No direct word-level collection with individual confidence values
}

Enfoque IronOCR:

// Structured output: navigate a rich result object model
var ocr = new IronTesseract();

using var input = new OcrInput();
input.LoadImage("page1.jpg");
input.LoadImage("page2.jpg");
input.LoadImage("page3.jpg");

var result = ocr.Read(input);

// Export as searchable PDF (preserves layout)
result.SaveAsSearchablePdf("output.pdf");

// Export as hOCR (XHTML with bounding box coordinates — feeds downstream tools)
result.SaveAsHocrFile("output.hocr");

// Word-level structured access — direct collection, no indirection
foreach (var page in result.Pages)
{
    Console.WriteLine($"Page {page.PageNumber}: {page.Words.Length} words, " +
                      $"{page.Confidence:F1}% confidence");

    foreach (var word in page.Words)
    {
        Console.WriteLine($"  '{word.Text}' at ({word.X},{word.Y}) " +
                          $"size {word.Width}x{word.Height}{word.Confidence:F1}%");
    }
}

// Paragraph-level layout for document structure analysis
foreach (var paragraph in result.Pages[0].Paragraphs)
{
    Console.WriteLine($"Paragraph at ({paragraph.X},{paragraph.Y}): {paragraph.Text}");
}

IronOCR expone datos a nivel de palabra como una colección Words directa en cada página, con valores individuales Confidence por palabra. El RecognitionAreasRectangles de Aspose.OCR proporciona geometría de región sin un desglose de confianza a nivel de palabra. La exportación hOCR genera código XHTML compatible con herramientas que procesan la salida anotada con cuadros delimitadores; consulte la guía de exportación hOCR para obtener más detalles sobre el formato. Para el modelo completo de resultado estructurado, la referencia API de OcrResult documenta cada propiedad en OcrResult.Page, OcrResult.Paragraph, OcrResult.Line, y OcrResult.Word.

Referencia de mapeo de la API de Aspose.OCR a IronOCR

Aspose.OCREquivalente a IronOCR
AsposeOcrIronTesseract
RecognitionSettingsPropiedades en IronTesseract + OcrInput
DocumentRecognitionSettingsOcrInput con LoadPdf() / LoadPdfPages()
api.RecognizeImage(path, settings)ocr.Read(path) o ocr.Read(input)
api.RecognizePdf(path, settings)ocr.Read(path) o ocr.Read(input)
result.RecognitionTextresult.Text
result.RecognitionAreasConfidence.Average()result.Confidence (doble único, 0–100)
result.RecognitionAreasRectanglesresult.Words (con X, Y, Ancho, Altura, Confianza)
RecognitionResultOcrResult
Language.EngOcrLanguage.English
DetectAreasMode.COMBINEAutomático: no se requiere enumeración
DetectAreasMode.TABLEAutomático — usar result.Pages[n].Paragraphs para el diseño
DetectAreasMode.DOCUMENTAutomático: el motor realiza el análisis de diseño.
settings.RecognizeSingleLine = trueocr.Configuration.WhiteListCharacters o recorte de una sola región
settings.RecognitionAreas = new List<Rectangle> { r }input.LoadImage(path, cropRectangle)
settings.AutoSkew = trueAutomático, o input.Deskew() explícito
PreprocessingFilter.AutoSkew()input.Deskew()
PreprocessingFilter.AutoDenoising()input.DeNoise()
PreprocessingFilter.ContrastCorrectionFilter()input.Contrast()
PreprocessingFilter.Binarize()input.Binarize()
PreprocessingFilter.Threshold(value)input.Binarize() (umbral automático)
PreprocessingFilter.Median()input.DeNoise()
PreprocessingFilter.Scale(factor)input.Scale(percent)
PreprocessingFilter.Invert()input.Invert()
PreprocessingFilter.Rotate(angle)input.Rotate(angle)
api.SaveMultipageDocument(path, SaveFormat.Pdf, list)result.SaveAsSearchablePdf(path)
api.SaveMultipageDocument(path, SaveFormat.Docx, list)Vía exportación hOCR: result.SaveAsHocrFile(path)
api.SaveMultipageDocument(path, SaveFormat.Json, list)Navegar result.Pages y serializar directamente
api.PreprocessImage(path, filters)input.GetPages()[0].SaveAsImage(path)
api.CalculateSkew(imagePath)input.Deskew() (aplica ángulo detectado automáticamente)
new Aspose.OCR.License().SetLicense("file.lic")IronOcr.License.LicenseKey = "key"
settings.ThreadsCount = nSeguro para subprocesos por defecto; usa Parallel.ForEach

Problemas comunes de migración y soluciones

Problema 1: DetectAreasMode no tiene un equivalente directo.

Aspose.OCR: El código establece settings.DetectAreasMode = DetectAreasMode.TABLE o DetectAreasMode.COMBINE esperando un comportamiento de diseño específico. Eliminar la enumeración plantea la cuestión de cómo IronOCR maneja el mismo diseño.

Solución: Eliminar la enumeración por completo.IronOCR realiza el análisis de diseño automáticamente. Si necesitas inspeccionar la estructura de diseño detectada, navega por result.Pages[n].Paragraphs — cada párrafo lleva una caja delimitadora con X, Y, Ancho, Altura y el texto que contiene. Para la extracción explícita de tablas, consulte el tutorial sobre cómo leer tablas :

// No mode to set — read directly and inspect the structure
var result = new IronTesseract().Read("data-table.jpg");
foreach (var paragraph in result.Pages[0].Paragraphs)
{
    Console.WriteLine($"Block ({paragraph.X},{paragraph.Y}): {paragraph.Text}");
}

Problema 2: Desajuste del umbral de confianza de las áreas de reconocimiento

Aspose.OCR: El código existente compara result.RecognitionAreasConfidence.Average() contra un umbral como 0.75f. El result.Confidence de IronOCR está en una escala diferente.

Solución: result.Confidence es un porcentaje de 0 a 100. Multiplica tu umbral de Aspose por 100 para convertirlo: 0.75f se convierte en 75.0. Luego, actualice toda la lógica de comparación:

// Aspose.OCR threshold pattern
// if (result.RecognitionAreasConfidence.Average() >= 0.75f)

//IronOCR equivalent — multiply old threshold by 100
var result = new IronTesseract().Read("document.jpg");
if (result.Confidence >= 75.0)
{
    Console.WriteLine($"High confidence result: {result.Text}");
}
C#

Problema 3: La salida JSON/XML de SaveMultipageDocument no tiene un método directo.

Aspose.OCR: api.SaveMultipageDocument("out.json", SaveFormat.Json, results) escribe un archivo JSON con metadatos de reconocimiento. Los equipos que consumen este resultado posteriormente deben encontrar el equivalente.

**Solución:**IronOCR no tiene un método equivalente a SaveFormat.Json. El reemplazo es navegar por result.Pages y serializar con System.Text.Json. Esto te da control total sobre el esquema:

using var input = new OcrInput();
input.LoadImage("document.jpg");
var result = new IronTesseract().Read(input);

// Build your own structured JSON from the result model
var pageData = result.Pages.Select(p => new
{
    PageNumber = p.PageNumber,
    Confidence = p.Confidence,
    Text = p.Text,
    Words = p.Words.Select(w => new
    {
        Text = w.Text,
        X = w.X,
        Y = w.Y,
        Width = w.Width,
        Height = w.Height,
        Confidence = w.Confidence
    }).ToArray()
}).ToArray();

File.WriteAllText("output.json",
    System.Text.Json.JsonSerializer.Serialize(pageData,
        new System.Text.Json.JsonSerializerOptions { WriteIndented = true }));

Para la salida XHTML con coordenadas incrustadas que las herramientas posteriores pueden analizar, result.SaveAsHocrFile("output.hocr") es el equivalente semántico más cercano.

Problema 4: DocumentRecognitionSettings.StartPage utiliza un índice basado en 0.

Aspose.OCR: DocumentRecognitionSettings.StartPage = 2 significa la tercera página (basado en 0). Este es el error de desplazamiento de uno más común en las migraciones de Aspose a IronOCR.

**Solución:**IronOCR utiliza la indexación de páginas basada en 1 en todo el proceso. Agrega 1 a cada valor StartPage y recalcula la página final en consecuencia. Escriba una prueba específica contra un PDF multipágina conocido para detectar esto antes de la producción:

// Aspose.OCR: StartPage = 2 means the 3rd page (0-based)
// var settings = new DocumentRecognitionSettings { StartPage = 2, PagesNumber = 3 };

// IronOCR: page 3 is index 3 (1-based), range of 3 ends at page 5
using var input = new OcrInput();
input.LoadPdfPages("document.pdf", 3, 5);
var result = new IronTesseract().Read(input);

Problema 5: RecognizeSingleLine no tiene indicador directo

Aspose.OCR: settings.RecognizeSingleLine = true le dice al motor que trate toda la imagen como una sola línea de texto. Esto se usa para el reconocimiento de etiquetas, la extracción de campos y otras entradas de formato fijo.

Solución: Usa un CropRectangle para aislar la línea de texto precisamente, lo que evita que el motor ejecute una detección de diseño completa en una imagen de línea única. Para zonas o formatos de etiquetas legibles por máquina, la guía de lectura de documentos específicos abarca el enfoque adecuado:

// Aspose.OCR: single-line flag
// var settings = new RecognitionSettings { RecognizeSingleLine = true };

// IronOCR: crop to the line region — layout detection skips automatically
var lineRegion = new CropRectangle(10, 45, 600, 30); // x, y, width, height
using var input = new OcrInput();
input.LoadImage("label.jpg", lineRegion);
var result = new IronTesseract().Read(input);
Console.WriteLine(result.Text.Trim());

Problema 6: No se requieren instancias de Aspose.OCR por subproceso

Aspose.OCR: La documentación recomienda crear una nueva instancia AsposeOcr() por hilo para evitar problemas de seguridad de hilo en el procesamiento paralelo. El código existente crea instancias dentro de lambdas Parallel.ForEach.

Solución: IronTesseract es seguro para hilos. Una única instancia gestiona cargas de trabajo paralelas. Eliminar la instanciación por hilo y compartir una única instancia:

// Aspose.OCR: per-thread instance due to thread-safety concerns
// Parallel.ForEach(paths, path => { var api = new AsposeOcr(); ... });

// IronOCR: single shared instance, fully thread-safe
var ocr = new IronTesseract();

Parallel.ForEach(documentPaths, path =>
{
    var result = ocr.Read(path);
    Console.WriteLine($"{Path.GetFileName(path)}: {result.Confidence:F1}%");
});

Lista de verificación de migración de Aspose.OCR

Tareas previas a la migración

Audite todas las referencias a Aspose.OCR en el código fuente:

grep -rn "using Aspose.OCR" --include="*.cs" .
grep -rn "AsposeOcr\|RecognitionSettings\|DocumentRecognitionSettings" --include="*.cs" .
grep -rn "DetectAreasMode\|SaveFormat\|RecognitionResult" --include="*.cs" .
grep -rn "RecognitionAreasConfidence\|RecognitionText\|RecognizePdf" --include="*.cs" .
grep -rn "PreprocessingFilter\|SaveMultipageDocument" --include="*.cs" .
grep -rn "Aspose.OCR.License\|SetLicense" --include="*.cs" .
SHELL

Documente cada ocurrencia por categoría: llamadas de reconocimiento, objetos de configuración, procesos de preprocesamiento, llamadas de salida e inicialización de licencias. Toma nota de todos los valores de DetectAreasMode en uso — estos determinan qué ruta de migración de diseño se aplica. Registra todos los valores de enum SaveFormat — cada formato que no es PDF necesita el enfoque de serialización personalizada descrito en el Problema 3 arriba.

Migración de código

  1. Elimina el paquete NuGet Aspose.OCR de todos los proyectos en la solución
  2. Instala el paquete NuGet IronOcr en todos los proyectos
  3. Reemplaza using Aspose.OCR; y using Aspose.OCR.Models; con using IronOcr;
  4. Reemplaza new Aspose.OCR.License().SetLicense("file.lic") con IronOcr.License.LicenseKey = "key" al iniciar la app
  5. Reemplaza new AsposeOcr() con new IronTesseract()
  6. Elimina todos los bloques de construcción de RecognitionSettings y DocumentRecognitionSettings
  7. Elimina todas las referencias de enum DetectAreasMode — no se necesita equivalente
  8. Reemplaza api.RecognizeImage(path, settings) con ocr.Read(path)
  9. Reemplaza api.RecognizePdf(path, settings) con ocr.Read(path) o ocr.Read(input) usando input.LoadPdf()
  10. Reemplaza result.RecognitionText con result.Text
  11. Reemplaza result.RecognitionAreasConfidence.Average() con result.Confidence y multiplica el umbral antiguo por 100
  12. Reemplaza api.SaveMultipageDocument(path, SaveFormat.Pdf, list) con result.SaveAsSearchablePdf(path)
  13. Reemplaza api.SaveMultipageDocument(path, SaveFormat.Json, list) con la serialización directa de result.Pages
  14. Convierte todas las cadenas PreprocessingFilter a llamadas de método OcrInput (ver tabla de mapeo de API)
  15. Actualiza DocumentRecognitionSettings.StartPage de basado en 0 a basado en 1 (agrega 1 a cada valor)
  16. Elimina la instanciación por hilo de AsposeOcr — comparte una única instancia de IronTesseract

Pruebas posteriores a la migración

  • Ejecutar OCR en una muestra representativa de cada tipo de documento en uso en producción y comparar el recuento de caracteres con la salida de referencia de Aspose.OCR.
  • Verificar los valores de confianza:IronOCR devuelve valores entre 0 y 100; confirme que todas las comparaciones de umbrales utilizan la nueva escala
  • Pruebe la selección de rango de páginas en un PDF de más de 10 páginas utilizando una numeración de página basada en 1 y verifique que se devuelvan las páginas correctas.
  • Prueba la ingesta de archivos PDF protegidos con contraseña sin tener Aspose.PDF instalado: confirma que no haya ninguna excepción de dependencia.
  • Confirma que result.Text coincide con la salida esperada para cada DetectAreasMode que estaba en uso (COMBINAR, TABLA, DOCUMENTO)
  • Prueba la ruta de salida JSON: serializa result.Pages y valida el esquema contra cualquier consumidor posterior
  • Ejecuta el procesador por lotes en paralelo y verifica que no haya excepciones de hilos (instancia compartida de IronTesseract)
  • Confirme que el archivo PDF con capacidad de búsqueda se abre en un visor de PDF y que el texto se puede seleccionar en las ubicaciones correctas.
  • Validar que la clave de licencia se inicialice sin errores en cada entorno de implementación (inicio de ASP.NET , función de Azure, contenedor Docker).
  • Verifica que las entradas TIFF preprocesadas sigan produciendo la salida esperada a través de input.LoadImageFrames()

Principales ventajas de migrar a IronOCR

Coste total de propiedad predecible desde el primer día. La licencia Professional de 2999 dólares cubre a 10 desarrolladores en 10 proyectos sin renovación anual. El departamento de finanzas cierra la partida OCR una sola vez. El impacto presupuestario de añadir ingenieros, lanzar nuevos proyectos o extender el ciclo de vida del producto es nulo: no hay que realizar cálculos de niveles de licencia, ni controlar la fecha de renovación, ni existe riesgo de incumplimiento por un pago atrasado. La página de licencias de IronOCR documenta lo que cubre cada nivel.

Llamadas de reconocimiento que expresan intención, no infraestructuras. Después de la migración, cada llamada de reconocimiento es ocr.Read("document"). La construcción RecognitionSettings, la selección DetectAreasMode, y la población PreprocessingFilter que precedían a cada llamada de Aspose.OCR desaparecen por completo. Los nuevos ingenieros que leen la capa de reconocimiento óptico de caracteres (OCR) del código fuente ven la intención del negocio —"lea este documento"— en lugar de un objeto de configuración que se está ensamblando antes de que comience el trabajo real. La documentación de la API de IronTesseract abarca todas las propiedades de configuración disponibles.

Compatibilidad con PDF cifrados sin necesidad de un segundo producto. Los sistemas de gestión de documentos Enterprise manejan habitualmente archivos PDF protegidos con contraseña. Después de la migración, input.LoadPdf("doc.pdf", Password: "secret") los maneja de manera nativa. No hay que gestionar ninguna suscripción a Aspose.PDF, ni mantener ningún proceso de descifrado a imagen, ni realizar un seguimiento de la segunda fecha de renovación. Cada formato PDF en el proceso pasa por un único paquete, una única licencia y una única ruta de código. El tutorial sobre la entrada de archivos PDF abarca rangos de páginas, selección no contigua y entrada de flujo de datos.

Datos de resultados estructurados a nivel de palabra y carácter. result.Pages[n].Words devuelve una colección donde cada palabra lleva su caja delimitadora, su texto y su puntuación de confianza individual. La geometría a nivel de área de Aspose.OCR abarca regiones, no tokens individuales. Tras la migración, los analizadores de diseño de documentos, los extractores de campos de formulario y los procesos de procesamiento de facturas pueden acceder al posicionamiento palabra por palabra sin pasos de procesamiento adicionales. Consulte la página de características de los resultados de OCR para ver la jerarquía completa de resultados.

**Implementación de un único paquete en todas las plataformas.**IronOCR se distribuye como un único paquete NuGet que se ejecuta en Windows, Linux, macOS, Docker, Azure App Service y AWS Lambda sin necesidad de configuración específica de la plataforma. Aspose.OCR funciona en diferentes plataformas, pero puede requerir ajustes en la biblioteca nativa en entornos de contenedores. Tras la migración, el Dockerfile para un servicio OCR es una imagen base .NET estándar sin pasos de configuración específicos para OCR más allá de la instalación del paquete. Las guías de implementación abarcan Docker , Azure , AWS y Linux .

Lectura de códigos de barras en el mismo paso que OCR. Configurar ocr.Configuration.ReadBarCodes = true extrae códigos de barras, códigos QR y símbolos Code 128 de la misma imagen en una sola pasada del motor. Aspose.OCR no tiene capacidad para códigos de barras; se requeriría una biblioteca de códigos de barras independiente. Después de la migración, los documentos que mezclan texto impreso con códigos de barras (etiquetas de envío, formularios de inventario, boletos de eventos) son manejados por una sola llamada con resultados en result.Barcodes. Consulte la guía de OCR para códigos de barras para conocer las simbologías compatibles.

Por favor nota: Aspose y Tesseract son marcas registradas de sus respectivos propietarios. Este sitio no está afiliado, respaldado ni patrocinado por Aspose Pty Ltd ni Google. Todos los nombres de producto, logotipos y marcas son propiedad de sus respectivos dueños. 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