IRONSOFTWAREHOME
VÍDEOS

Migrando do Asprise OCR para o IronOCR

Kannaopat Udonpant
Kannapat Udonpant
Updated: 20 de junho de 2026

Este guia orienta os desenvolvedores .NET em cada etapa da substituição doAsprise OCRpelo IronOCR . Este documento aborda a troca mecânica de pacotes, as alterações de namespace e os quatro padrões de migração de código que representam a maior parte do uso do Asprise em aplicações .NET de produção. O público-alvo são os desenvolvedores que já decidiram migrar e precisam de um plano de ação concreto.

Por que migrar do Asprise OCR?

OAsprise OCRfoi projetado inicialmente como um produto Java. A interface .NET é um wrapper em torno de um mecanismo nativo originado em Java, e essa origem molda todos os aspectos do comportamento da biblioteca no .NET — desde a implantação até o design da API e as restrições de licenciamento.

**Dependência de Binário Nativo e JRE.**Asprise OCRfor .NET requer binários nativos específicos da plataforma (aocr.dll, aocr_x64.dll, libaocr.so, libaocr.dylib) para estar presente em cada máquina onde o aplicativo é executado. Cada arquivo binário deve corresponder exatamente à plataforma de destino e à arquitetura do processo. Um contêiner Docker de 64 bits construído com o DLL de 32 bits lança BadImageFormatException durante a execução. Uma implantação Linux sem libaocr.so de LD_LIBRARY_PATH lança DllNotFoundException. Nenhum dos erros aparece durante a compilação. Cada novo destino de implantação — um novo servidor, uma nova imagem de contêiner, um agente de CI — torna-se um exercício manual de busca de binários.

API de Constante de String de Herança Java. Asprise expõe constantes inteiras para tipo de reconhecimento e formato de saída: Ocr.RECOGNIZE_TYPE_TEXT, Ocr.OUTPUT_FORMAT_PLAINTEXT, Ocr.OUTPUT_FORMAT_XML. Essas constantes correspondem diretamente à API baseada em números inteiros do SDK Java. Os desenvolvedores .NET não recebem nenhuma orientação do IntelliSense sobre valores constantes válidos, nenhuma segurança em tempo de compilação sobre combinações de argumentos e nenhum objeto de resultado fortemente tipado. A extração de dados estruturados requer a análise manual de strings XML.

Sem suporte assíncrono sem soluções alternativas. A Asprise não fornece uma API assíncrona nativa. Embrulhar chamadas síncronas Asprise em Task.Run para evitar bloquear threads do ASP.NET cria pressão no pool de threads e não resolve a restrição de licença que proíbe a execução simultânea nos níveis LITE e STANDARD. Padrões assíncronos em aplicações .NET modernas — serviços em segundo plano, endpoints de API mínimos, Azure Functions — não têm um equivalente direto no Asprise.

O processamento de TIFF com múltiplos quadros requer divisão manual. O Asprise opera com arquivos de imagem individuais. O processamento de um TIFF com várias páginas requer código externo para dividir os frames em arquivos individuais e, em seguida, processar cada arquivo em um loop. Nenhum metadado de frame ou numeração de página é transferido para o arquivo de saída.

Restrições de threads impedem a implantação em produção. As licenças Lite (aproximadamente US$ 299) e STANDARD (aproximadamente US$ 699) restringem contratualmente a execução a uma única thread e um único processo. O ASP.NET Core processa todas as solicitações HTTP em um pool de threads. Cada endpoint de API web que chama o Asprise nesses planos constitui uma violação de licença desde a primeira requisição simultânea. A atualização para o plano Enterprise remove a restrição, mas exige contato com o departamento de vendas, cujo preço não foi divulgado — as estimativas variam de US$ 2.000 a mais de US$ 5.000, dependendo do escopo da implementação.

O Manuseio do Formato de Saída Requer Análise de String. Quando OUTPUT_FORMAT_XML é especificado, Asprise retorna uma string XML bruta. O aplicativo é responsável por desserializar essa string, validar sua estrutura e extrair palavras e suas coordenadas. Os índices de confiança por palavra estão incorporados em atributos XML. Não existe modelo de objetos — apenas manipulação de strings.

O problema fundamental

O Asprise requer configuração binária nativa adjacente ao JRE antes que a primeira chamada de OCR possa ser executada. O IronOCR não requer nada além de um pacote NuGet :

// Asprise: native binary must exist in PATH or application directory
// aocr_x64.dll missing → DllNotFoundException at runtime, not at build
Ocr.SetUp();                              // Static init — touches native binary
Ocr ocr = new Ocr();
ocr.StartEngine("eng", Ocr.SPEED_FAST);  // Allocates native engine memory
string text = ocr.Recognize(imagePath, Ocr.RECOGNIZE_TYPE_TEXT, Ocr.OUTPUT_FORMAT_PLAINTEXT);
ocr.StopEngine();                         // Must call or native memory leaks
C#
// IronOCR: dotnet add package IronOcr — no binary sourcing, no lifecycle calls
IronOcr.License.LicenseKey = "YOUR-LICENSE-KEY";
string text = new IronTesseract().Read(imagePath).Text;
C#

##IronOCR vs Asprise OCR: Comparação de Recursos

A tabela abaixo abrange as funcionalidades mais relevantes para os desenvolvedores que avaliam essa migração.

RecursoAsprise OCRIronOCR
Plataforma principalJava (legado).NET nativo
Instalação do NuGetWrapper + DLLs nativas da plataformaPacote único (IronOcr)
Binário nativo necessário em tempo de execução.Sim (DLL por plataforma)Não
Estilo da API .NETConstantes inteiras, retornos de stringClasses e enumerações fortemente tipadas
IDisposable / using padrãoNão implementadoSim (OcrInput)
OCR assíncronoSem suporte nativoSim (ReadAsync)
Multithreading — Nível Lite/STANDARDProibido por licençaPermitido
Multithreading — todos os níveisSOMENTE PARA EnterpriseTodos os níveis
Suporte à API Web do ASP.NET CoreEnterprise necessáriaQualquer nível
Azure Functions / AWS LambdaEnterprise necessáriaQualquer nível
Entrada nativa de PDFNãoSim
Entrada TIFF multiframeNão (divisão manual de quadros)Sim (LoadImageFrames)
entrada de matriz de bytes e fluxoLimitadoSim
Pré-processamento de imagem integradoNãoSim (mais de 9 filtros)
Saída em PDF pesquisávelNãoSim (SaveAsSearchablePdf)
Modelo de objeto de resultado estruturadoNão (somente string XML)Sim (páginas, parágrafos, palavras, caracteres)
Pontuações de confiança por palavraNão (análise de atributos XML)Sim (result.Confidence)
Coordenadas de pixel da palavraanálise de atributos XMLPropriedades fortemente tipadas
Contagem de idiomas20+125+
Seleção de linguagem fortemente tipificadaNão (códigos de string)Sim (OcrLanguage enum)
Leitura de código de barrasSim (tipo de reconhecimento separado)Sim (flag de configuração)
Exportação hOCRNãoSim
Implantação multiplataformaBinário manual por plataformaO NuGet é compatível com todas as plataformas.
Docker / Linux / macOSConfiguração manual LD_LIBRARY_PATHFunciona perfeitamente assim que é conectado.
Compatibilidade com .NETLimitado (ponte Java).NET Framework 4.6.2+, .NET 5–9
Preço de entrada para uso do servidorEnterprise (a partir de US$ 2.000)$999 (Lite, todos os recursos)
Tipo de licençaPara obter informações sobre preços por nível, entre em contato com a equipe de vendas para Enterprise.Perpétuo (compra única)

Guia rápido: Migração doAsprise OCRpara o IronOCR

Passo 1: Substitua o pacote NuGet

Remover OCR Asprise:

dotnet remove package asprise-ocr-api
SHELL

Instale o IronOCR a partir da página de pacotes NuGet :

dotnet add package IronOcr

Etapa 2: Atualizar Namespaces

Substitua os namespaces Asprise pelo namespace IronOCR:

// Before (Asprise)
using asprise.ocr;

// After (IronOCR)
using IronOcr;
C#

Etapa 3: Inicializar a licença

Adicione a atribuição da chave de licença ao iniciar o aplicativo — em Program.cs antes de qualquer chamada OCR, em Startup.Configure, ou em um construtor estático:

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

Uma chave de avaliação gratuita está disponível na página de licenciamento do IronOCR . Durante o desenvolvimento e a avaliação, o IronOCR é executado sem chave e adiciona uma marca d'água de teste à saída.

Exemplos de migração de código

Remoção da configuração do caminho do JRE e da inicialização do mecanismo

Os aplicativos Asprise que são executados em Linux ou macOS normalmente incluem um código de inicialização que define o caminho do JRE ou valida a presença de binários nativos antes que qualquer trabalho de OCR seja iniciado. Essa infraestrutura não tem equivalente no IronOCR.

Abordagem OCR da Asprise:

// AppStartup.cs — native binary validation before accepting any requests
public static void InitializeOcr()
{
    // Validate native library is reachable before first use
    string nativePath = RuntimeInformation.IsOSPlatform(OSPlatform.Windows)
        ? Path.Combine(AppContext.BaseDirectory, "aocr_x64.dll")
        : RuntimeInformation.IsOSPlatform(OSPlatform.Linux)
            ? "/usr/lib/libaocr.so"
            : "/usr/local/lib/libaocr.dylib";

    if (!File.Exists(nativePath))
        throw new FileNotFoundException(
            $"Asprise native binary not found: {nativePath}. " +
            "Deploy the correct platform binary before starting.");

    // Static global init — must run before any Ocr instance is created
    Ocr.SetUp();
}
C#

Abordagem IronOCR:

// Program.cs — license key assignment is the entire initialization
IronOcr.License.LicenseKey = "YOUR-LICENSE-KEY";

// That is it. Não binary validation, no path configuration, no SetUp() call.
// NuGet resolved the correct native runtime during package restore.
C#

O padrão Asprise é tipicamente de 15 a 30 linhas em múltiplos arquivos — um validador de inicialização, um comutador de plataforma, uma exceção com uma mensagem de implantação, e a chamada SetUp(). O IronOCR substitui tudo isso por uma única tarefa. O guia de configuração do IronTesseract aborda opções de configuração de implantação para ambientes que exigem caminhos de tessdata personalizados ou operação offline.

Substituição do formato de saída XML por objetos de resultado estruturados

Asprise produz saída estruturada como uma string XML bruta quando OUTPUT_FORMAT_XML é especificado. Extrair o texto, as coordenadas e o nível de confiança dessa string requer código de análise XML. O IronOCR retorna um grafo de objetos tipados.

Abordagem OCR da Asprise:

// Asprise: structured output is an XML string — must parse manually
Ocr.SetUp();
Ocr ocr = new Ocr();
try
{
    ocr.StartEngine("eng", Ocr.SPEED_FAST);
    string xmlOutput = ocr.Recognize(
        imagePath,
        Ocr.RECOGNIZE_TYPE_TEXT,
        Ocr.OUTPUT_FORMAT_XML);   // Returns raw XML, not an object

    // Parse the XML manually to extract words and coordinates
    var doc = System.Xml.Linq.XDocument.Parse(xmlOutput);
    var words = doc.Descendants("word")
        .Select(w => new
        {
            Text       = (string)w.Attribute("text"),
            Confidence = (float)w.Attribute("confidence"),
            X          = (int)w.Attribute("x"),
            Y          = (int)w.Attribute("y"),
        })
        .ToList();

    foreach (var word in words)
        Console.WriteLine($"{word.Text} @ ({word.X},{word.Y}) conf={word.Confidence}");
}
finally
{
    ocr.StopEngine();
}
C#

Abordagem IronOCR:

// IronOCR: structured result is a typed object — no XML parsing
var result = new IronTesseract().Read(imagePath);

foreach (var page in result.Pages)
{
    foreach (var paragraph in page.Paragraphs)
    {
        foreach (var word in paragraph.Words)
        {
            Console.WriteLine(
                $"{word.Text} @ ({word.X},{word.Y}) conf={word.Confidence:F1}%");
        }
    }
}
C#

Sem desserialização XML, sem conversão de atributos, sem suposições de esquema. O modelo de objeto OcrResult expõe páginas, parágrafos, linhas, palavras, e caracteres com propriedades tipadas. O guia de resultados de leitura abrange toda a hierarquia e o sistema de coordenadas, incluindo como filtrar por limite de confiança para fluxos de trabalho automatizados.

Processamento TIFF de múltiplos quadros

O Asprise aceita arquivos de imagem individuais. Um arquivo TIFF com vários quadros — comum em fluxos de trabalho de digitalização de documentos — precisa ser dividido em arquivos de quadro individuais antes que o Asprise possa processá-lo.IronOCR aceita TIFFs de múltiplos quadros diretamente através de LoadImageFrames.

Abordagem OCR da Asprise:

// Asprise: no multi-frame TIFF support — split frames externally first
// Using an external imaging library (e.g., System.Drawing or Magick.NET)
var frameFiles = new List<string>();
using (var tiff = System.Drawing.Image.FromFile("scanned-batch.tiff"))
{
    int frameCount = tiff.GetFrameCount(System.Drawing.Imaging.FrameDimension.Page);
    for (int i = 0; i < frameCount; i++)
    {
        tiff.SelectActiveFrame(System.Drawing.Imaging.FrameDimension.Page, i);
        string framePath = $"frame_{i}.png";
        tiff.Save(framePath);
        frameFiles.Add(framePath);
    }
}

// Now process each frame individually — sequential on LITE/STANDARD
var allText = new System.Text.StringBuilder();
Ocr.SetUp();
Ocr ocr = new Ocr();
try
{
    ocr.StartEngine("eng", Ocr.SPEED_FAST);
    foreach (var framePath in frameFiles)
    {
        string pageText = ocr.Recognize(
            framePath,
            Ocr.RECOGNIZE_TYPE_TEXT,
            Ocr.OUTPUT_FORMAT_PLAINTEXT);
        allText.AppendLine(pageText);
    }
}
finally
{
    ocr.StopEngine();
    // Clean up temporary frame files
    foreach (var f in frameFiles)
        File.Delete(f);
}
Console.WriteLine(allText.ToString());
C#

Abordagem IronOCR:

// IronOCR: multi-frame TIFF loads directly — no frame splitting, no temp files
using var input = new OcrInput();
input.LoadImageFrames("scanned-batch.tiff");  // All frames, one call

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

// Access each page independently with its page number
foreach (var page in result.Pages)
    Console.WriteLine($"Page {page.PageNumber}: {page.Text}");
C#

A abordagem Asprise requer dependência de imagem externa, gerenciamento de arquivos temporários, limpeza manual e processamento sequencial por quadro. O IronOCR processa todos os frames em uma única passagem. O guia de entrada TIFF e GIF aborda a seleção do intervalo de quadros para TIFFs grandes, onde apenas páginas específicas são necessárias.

Geração de PDF pesquisável

O Asprise não oferece a funcionalidade de gerar PDFs pesquisáveis ​​em nenhum nível de licença. Criar um PDF com texto OCR incorporado a partir de um documento digitalizado requer uma biblioteca PDF externa, uma etapa OCR separada para obter as posições do texto e a construção manual da sobreposição. O IronOCR gera PDFs pesquisáveis ​​diretamente a partir do resultado do reconhecimento.

Abordagem OCR da Asprise:

// Asprise: no searchable PDF output — external PDF library required
// Step 1: OCR the document to get text
Ocr.SetUp();
Ocr ocr = new Ocr();
string recognizedText;
try
{
    ocr.StartEngine("eng", Ocr.SPEED_FAST);
    recognizedText = ocr.Recognize(
        "scanned-contract.jpg",
        Ocr.RECOGNIZE_TYPE_TEXT,
        Ocr.OUTPUT_FORMAT_PLAINTEXT);   // Only plain text — no position data
}
finally
{
    ocr.StopEngine();
}

// Step 2: Use an external PDF library to embed text over the image
// (iTextSharp, PdfSharp, or similar — adds another dependency and license)
// Text positioning requires coordinate data Asprise cannot provide in plain text mode
// ... 40-80 lines of PDF construction code
Console.WriteLine("Searchable PDF: not achievable with Asprise alone");
C#

Abordagem IronOCR:

// IronOCR: searchable PDF in two lines — no external PDF library
var result = new IronTesseract().Read("scanned-contract.jpg");
result.SaveAsSearchablePdf("searchable-contract.pdf");

// Batch: convert a folder of scanned images to searchable PDFs
foreach (var imagePath in Directory.GetFiles("scans", "*.jpg"))
{
    var batchResult = new IronTesseract().Read(imagePath);
    string outputPath = Path.ChangeExtension(imagePath, ".searchable.pdf");
    batchResult.SaveAsSearchablePdf(outputPath);
    Console.WriteLine($"Converted: {outputPath}");
}
C#

O PDF pesquisável contém a imagem original como camada visual, com o texto OCR invisível sobreposto nas coordenadas corretas — o formato padrão para fluxos de trabalho de arquivamento e conformidade. Consulte o guia prático de PDF pesquisável e o exemplo de PDF pesquisável para opções que incluem a saída em PDF/A para arquivamento de longo prazo.

OCR assíncrono em aplicações web

A Asprise não possui uma API assíncrona. Os desenvolvedores o integram em aplicativos .NET assíncronos ao embrulhar chamadas síncronas em Task.Run, que consome threads do pool de threads e não elimina o bloqueio. O IronOCR oferece um caminho assíncrono nativo.

Abordagem OCR da Asprise:

// Asprise: no async API — must offload to Task.Run
// This blocks a thread pool thread during the entire OCR operation
// On LITE/STANDARD, concurrent Task.Run calls = license violation
public async Task<string> ProcessUploadAsync(Stream fileStream, string fileName)
{
    string tempPath = Path.GetTempFileName();
    await using (var fs = new FileStream(tempPath, FileMode.Create))
        await fileStream.CopyToAsync(fs);

    // Task.Run wraps synchronous Asprise — occupies a thread pool thread
    // Two concurrent requests still violate LITE/STANDARD license
    return await Task.Run(() =>
    {
        Ocr ocr = new Ocr();
        try
        {
            ocr.StartEngine("eng", Ocr.SPEED_FAST);
            return ocr.Recognize(
                tempPath,
                Ocr.RECOGNIZE_TYPE_TEXT,
                Ocr.OUTPUT_FORMAT_PLAINTEXT);
        }
        finally
        {
            ocr.StopEngine();
            File.Delete(tempPath);
        }
    });
}
C#

Abordagem IronOCR:

// IronOCR: native async, concurrent requests permitted on all tiers
public async Task<string> ProcessUploadAsync(Stream fileStream, string fileName)
{
    using var input = new OcrInput();
    input.LoadImage(fileStream);       // Stream input directly — no temp file

    var ocr = new IronTesseract();
    var result = await ocr.ReadAsync(input);
    return result.Text;
}
C#

A versão IronOCR elimina a gravação de arquivo temporário, o embrulho Task.Run, e o comportamento de bloqueio de threads. Múltiplas solicitações simultâneas cada uma cria sua própria instância IronTesseract — a classe é sem estado e cada instância é independente. O guia de OCR assíncrono cobre padrões ReadAsync e suporte a token de cancelamento para operações em lote de longa duração em serviços hospedados.

Referência de mapeamento da API OCR da Asprise para o IronOCR

Asprise OCREquivalente de IronOCR
asprise.ocr namespaceIronOcr namespace
Ocr.SetUp()Não é necessário
new Ocr()new IronTesseract()
ocr.StartEngine("eng", Ocr.SPEED_FAST)Não é necessário
ocr.StartEngine("eng+fra", speed)ocr.Language = OcrLanguage.English + OcrLanguage.French
ocr.Recognize(path, type, format)ocr.Read(path) ou ocr.Read(input)
Ocr.RECOGNIZE_TYPE_TEXTComportamento padrão
Ocr.RECOGNIZE_TYPE_BARCODEocr.Configuration.ReadBarCodes = true
Ocr.RECOGNIZE_TYPE_ALLocr.Configuration.ReadBarCodes = true
Ocr.OUTPUT_FORMAT_PLAINTEXTresult.Text
Ocr.OUTPUT_FORMAT_XMLresult.Pages / result.Pages[n].Words
Ocr.OUTPUT_FORMAT_PDFresult.SaveAsSearchablePdf(path)
Ocr.SPEED_FASTESTocr.Configuration.TesseractEngineMode ajuste
Ocr.SPEED_FASTConfiguração padrão
Ocr.SPEED_SLOWConfigurações de maior precisão
ocr.StopEngine()Não é necessário — OcrInput é IDisposable
result.StartsWith("ERROR:") verificaçãoTratamento de exceções padrão do .NET (try/catch)
DLL nativa da plataforma (aocr_x64.dll)Pacote de tempo de execução NuGet (automático)
Arquivo temporário manual para entrada de fluxoinput.LoadImage(stream) diretamente
Biblioteca externa para TIFF com múltiplos quadrosinput.LoadImageFrames(path)
Biblioteca externa para PDFs pesquisáveisresult.SaveAsSearchablePdf(path)

Problemas e soluções comuns em migrações

Problema 1: DllNotFoundException após a remoção de binários nativos

Asprise OCR: Remover o pacote Asprise NuGet, mas deixar referências binárias nativas (nas regras de cópia de arquivos do projeto, instruções Docker COPY, ou scripts de implantação) pode causar a reemergência de DllNotFoundException de uma configuração obsoleta apontando para um binário inexistente.

Solução: Pesquisar artefatos de implantação por qualquer referência a configurações aocr, libaocr ou LD_LIBRARY_PATH e removê-las. O IronOCR não possui requisitos de configuração correspondentes. Não Dockerfile:

# Remove: COPY aocr_x64.dll /app/
# Remove: ENV LD_LIBRARY_PATH=/app
# IronOCR: nothing to add — NuGet handles native runtime packaging
RUN dotnet restore
RUN dotnet publish -c Release -o /app/publish
Text

Para implantação multiplataforma, o guia de implantação do Docker abrange os requisitos básicos de imagem para o IronOCR em contêineres Linux.

Problema 2: Falha na Remoção de Ocr.SetUp() Prejudica a Inicialização

Asprise OCR: Ocr.SetUp() realiza inicialização global nativa. Algumas bases de código a chamam em um construtor estático ou Startup.Configure. Após a migração, remover o namespace Asprise remove o erro de compilação, mas se SetUp() estiver embrulhado em um try/catch que suprime a exceção, o código pode compilar e executar silenciosamente sem inicializar nada.

Solução: Grep para todas as chamadas SetUp() e remova todo o bloco de inicialização. Substitua o gancho de inicialização equivalente pela atribuição da chave de licença do IronOCR:

grep -rn "Ocr.SetUp\|StartEngine\|StopEngine" --include="*.cs" .
SHELL
// Remove all occurrences of the engine lifecycle pattern:
// Ocr.SetUp();
// ocr.StartEngine(...);
// ocr.StopEngine();

// Replace application startup initialization with:
IronOcr.License.LicenseKey = "YOUR-LICENSE-KEY";
C#

Problema 3: O código de análise de saída XML não possui substituto direto.

Asprise OCR: Código que analisa strings OUTPUT_FORMAT_XML usando XDocument, XmlReader, ou padrões regex não tem estrutura XML equivalente em IronOCR. O esquema XML gerado pelo Asprise não corresponde diretamente ao modelo de objetos do IronOCR.

Solução: Substitua o código de análise XML por acesso direto à propriedade em OcrResult. O mapeamento é:

// Asprise XML parsing (remove)
var words = XDocument.Parse(xmlOutput)
    .Descendants("word")
    .Select(w => new { Text = (string)w.Attribute("text"), X = (int)w.Attribute("x") });

//IronOCR object model (replace with)
var result = new IronTesseract().Read(imagePath);
var words = result.Pages
    .SelectMany(p => p.Paragraphs)
    .SelectMany(para => para.Words)
    .Select(w => new { w.Text, w.X });
C#

O guia de resultados de leitura abrange toda a hierarquia de objetos, incluindo dados em nível de caractere com caixas delimitadoras.

Problema 4: Wrappers Task.Run causando esgotamento do pool de threads

Asprise OCR: Aplicações web de alta concorrência que envolvem Asprise em Task.Run podem esgotar o pool de threads quando o volume de OCR aumenta. Cada Task.Run enfileirado retém um thread do pool de threads durante toda a operação OCR.

Solução: Substitua Task.Run(() =&gt; { asprise... }) padrões com chamadas assíncronas nativas do IronOCR. Cada instância IronTesseract é independente — crie uma por solicitação:

// Remove: await Task.Run(() => { ocr.Recognize(...) });

// Replace with:
using var input = new OcrInput();
input.LoadImage(stream);
var result = await new IronTesseract().ReadAsync(input);
return result.Text;
C#

Problema 5: Validação de código de linguagem baseado em strings

Asprise OCR: Códigos de idioma são passados como strings ("eng", "fra", "eng+fra"). Aplicações que validam essas strings em tempo de execução — verificando contra uma lista codificada, lendo da configuração — precisam ser atualizadas quando o formato da string muda para o enum OcrLanguage.

Solução: Substitua parâmetros de linguagem em string por valores enum OcrLanguage. A seleção de idioma orientada por configuração se mapeia perfeitamente para Enum.Parse:

// Asprise string-based (remove)
string language = config["OcrLanguage"];  // e.g. "eng+fra"
ocr.StartEngine(language, Ocr.SPEED_FAST);

//IronOCR enum-based (replace with)
// For single language from config:
var ocr = new IronTesseract();
ocr.Language = Enum.Parse<OcrLanguage>(config["OcrLanguage"]);  // e.g. "English"
var result = ocr.Read(input);
C#

O guia de múltiplos idiomas lista todos os valores enum OcrLanguage válidos e seus pacotes de idiomas NuGet correspondentes.

Edição 6: A lógica de verificação de nível de licença não é mais necessária.

OCR da Asprise: Algumas bases de código de produção incluem verificações em tempo de execução que detectam o nível de licença da Asprise e serializam o trabalho de OCR quando executado em uma versão inferior à Enterprise. Essas proteções evitam violações de licença, mas aumentam a complexidade e reduzem a produtividade.

Solução: Remova todas as proteções de detecção de níveis e serialização. O IronOCR não possui restrições de threading em nenhum nível. Os padrões ConcurrentQueue, SemaphoreSlim, ou despachantes de um único thread usados para serializar chamadas Asprise não servem para nada após a migração:

// Remove: SemaphoreSlim _ocrLock = new SemaphoreSlim(1, 1);
// Remove: await _ocrLock.WaitAsync(); ... _ocrLock.Release();

// IronOCR: direct concurrent access, no guards needed
Parallel.ForEach(documentPaths, path =>
{
    var text = new IronTesseract().Read(path).Text;
    results[path] = text;
});
C#

Lista de verificação para migração do Asprise OCR

Pré-migração

Antes de escrever qualquer código de substituição, faça uma auditoria no código-fonte para verificar se há alguma utilização do Asprise:

# Find all files importing asprise namespace
grep -rn "using asprise" --include="*.cs" .

# Find all engine lifecycle calls
grep -rn "SetUp\|StartEngine\|StopEngine" --include="*.cs" .

# Find all integer constant references
grep -rn "RECOGNIZE_TYPE\|OUTPUT_FORMAT\|SPEED_FAST\|SPEED_SLOW" --include="*.cs" .

# Find native binary references in project files and deployment scripts
grep -rn "aocr\|libaocr" --include="*.csproj" --include="Dockerfile" --include="*.yml" .

# Find XML output parsing code
grep -rn "OUTPUT_FORMAT_XML\|XDocument.Parse\|Descendants.*word" --include="*.cs" .

# Find Task.Run wrappers around OCR calls
grep -rn "Task.Run.*ocr\|Task.Run.*Recognize" --include="*.cs" .
SHELL

Faça um levantamento dos resultados:

  • Contar arquivos importando asprise.ocr — todos eles precisam de atualizações de namespace
  • Listar todos os sites de chamada StartEngine — cada um se torna uma chamada Read
  • Identificar o código de análise sintática da saída XML — cada bloco precisa de substituição do modelo de objeto.
  • Observe quaisquer proteções de nível de licença ou encapsulamentos de serialização — estes são removíveis.
  • Localize os scripts de implantação de binários nativos e a configuração do contêiner.

Migração de código

  1. Remova o pacote NuGet asprise-ocr-api de todos os projetos
  2. Instale o pacote NuGet IronOcr em cada projeto que execute OCR
  3. Substitua using asprise.ocr por using IronOcr em todos os arquivos
  4. Adicione IronOcr.License.LicenseKey = "YOUR-LICENSE-KEY" na inicialização do aplicativo.
  5. Remova chamadas Ocr.SetUp() de todo o código de inicialização e inicialização
  6. Substitua todo bloco Ocr.StartEngine / Recognize / StopEngine por new IronTesseract().Read(path).Text
  7. Substitua blocos de análise OUTPUT_FORMAT_XML por tentativa de objeto result.Pages
  8. Substitua alternativas OUTPUT_FORMAT_PDF por result.SaveAsSearchablePdf(path)
  9. Substitua código de divisão de TIFF multi-frame por input.LoadImageFrames(tiffPath)
  10. Substitua envoltórios baseados em fluxo Task.Run por await ocr.ReadAsync(input)
  11. Remova SemaphoreSlim ou proteções de serialização que protegiam Asprise do uso simultâneo
  12. Remova instruções de cópia de binário nativo de arquivos .csproj e Dockerfiles
  13. Remova configurações LD_LIBRARY_PATH da configuração do ambiente e scripts de CI
  14. Substitua códigos de idioma em string ("eng", "eng+fra") por valores enum OcrLanguage
  15. Substitua verificações result.StartsWith("ERROR:") por blocos try/catch

Pós-migração

  • Verifique se dotnet build conclui com zero avisos sobre bibliotecas nativas ausentes
  • Confirme que nenhuma ocorrência de DllNotFoundException ou BadImageFormatException ocorre na inicialização em todos os ambientes alvo (Windows, Linux, Docker)
  • Execute o OCR em uma imagem representativa e confirme se o texto de saída corresponde à linha de base pré-migração.
  • Testar o processamento TIFF de múltiplos quadros e verificar se todas as páginas são retornadas com a numeração correta.
  • Gere um PDF pesquisável e verifique se o texto é selecionável e pesquisável em um visualizador de PDF.
  • Enviar solicitações HTTP simultâneas para qualquer endpoint da API que invoque o OCR e confirmar se todas as solicitações foram concluídas sem erros.
  • Verificar se os endpoints assíncronos retornam resultados sem deadlock sob carga concorrente.
  • Confirmar se a extração de dados estruturados (coordenadas de palavras e nível de confiança) produz resultados corretos em um documento conhecido.
  • Verifique o uso de memória da aplicação ao longo do tempo para confirmar a ausência de vazamentos de memória nativa (anteriormente causados por chamadas StopEngine() perdidas) Execute a aplicação no Linux ou em um contêiner Docker para confirmar se a implantação multiplataforma funciona sem configuração binária.

Principais benefícios da migração para o IronOCR

A implantação se resume a uma única referência NuGet . Após a migração, todos os destinos de implantação — estações de trabalho de desenvolvimento, servidores de teste, contêineres Linux, agentes de CI — instalam o mesmo pacote com o mesmo comando. Não existe lógica de detecção de plataforma, nem busca de binários específicos para cada arquitetura, nem configuração de caminho de tempo de execução. Uma imagem Docker que anteriormente exigia instruções de cópia de binários nativos agora não requer nada além de dotnet restore. O guia de implantação do Linux e o guia de implantação do Azure incluem observações específicas do ambiente, quando aplicável.

Todos os Níveis de Licença Desbloqueiam Implantação de Nível de Servidor. A licença Lite $999 suporta APIs Web ASP.NET Core, Serviços Windows, Funções do Azure, AWS Lambda, e qualquer outra carga de trabalho .NET multi-thread. O recurso de threading de nível empresarial, pelo qual a Asprise cobra de US$ 2.000 a mais de US$ 5.000, está incluído em todos os planos do IronOCR. As equipes que migram do Asprise Enterprise para o IronOCR Lite reduzem seus custos de licenciamento de OCR, ao mesmo tempo que ganham recursos que o Enterprise não oferecia — PDF nativo, saída estruturada, geração de PDF pesquisável e 125 idiomas.

Resultados Estruturados de OCR Substituem Análise de String XML. O modelo de objeto OcrResult expõe uma hierarquia completa de documentos: páginas, parágrafos, linhas, palavras, e caracteres, cada um com coordenadas de caixa delimitadora precisas em pixel e escores de confiança. O código que anteriormente analisava strings XML do Asprise com XDocument ou regex passa a ter acesso direto às propriedades. A página de resultados do OCR aborda sistemas de coordenadas e como filtrar os resultados por nível de confiança para verificações de qualidade automatizadas.

Pré-processamento Integrado Remove Dependências de Imagem Externa. O pipeline de pré-processamento disponível através de OcrInputDeskew, DeNoise, Contrast, Binarize, Sharpen, Dilate, Erode, Scale, Invert, e DeepCleanBackgroundNoise — elimina a biblioteca de imagens externa que as integrações Asprise requerem. Remover essa dependência elimina uma preocupação com a licença, reduz o fator de compilação e coloca a configuração de pré-processamento diretamente ao lado da configuração OCR no mesmo arquivo de código. A página de recursos de pré-processamento e o guia de correção de qualidade de imagem cobrem quando aplicar cada filtro e os ganhos de precisão mensuráveis que cada um proporciona em varreduras de baixa qualidade.

Async Nativo e Verdadeiro Paralelismo Melhoram a Taxa de Processamento. ReadAsync integra-se no padrão async/await sem bloqueio do pool de threads. O processamento em lote paralelo com Parallel.ForEach ou PLINQ escala linearmente com os núcleos disponíveis. Um lote de documentos que o Asprise Lite/STANDARD forçou a executar sequencialmente — 100 documentos a 2 segundos cada leva mais de 3 minutos — é executado em aproximadamente 25 segundos em uma máquina de 8 núcleos com o IronOCR. O exemplo de multithreading demonstra padrões de taxa de processamento paralela e mostra como usar ConcurrentBag para coleção de resultados segura para threads.

125+ Idiomas sem Distribuição Binária. Os pacotes de idiomas são instalados como pacotes NuGet — dotnet add package IronOcr.Languages.Arabic, dotnet add package IronOcr.Languages.Japanese — e implantados com o aplicativo como qualquer outra dependência. Não há pasta tessdata manual para preencher, nenhum binário de idioma para localizar e nenhuma configuração de caminho necessária na máquina de destino. O índice de idiomas lista todos os mais de 125 pacotes de idiomas disponíveis.

Observe: Asprise OCR, PDFSharp, Tesseract e iText são marcas registradas de seus respectivos proprietários. Este site não é afiliado, endossado ou patrocinado por Asprise, Google, empira Software GmbH, ou iText Group. Todos os nomes de produtos, logotipos e marcas são propriedade de seus respectivos proprietários. As comparações são apenas para fins informativos e refletem informações disponíveis publicamente no momento da redação.

Artigos relacionados

Key in blue circle

Obtenha sua chave de avaliação gratuita de 30 dias instantaneamente.

Your trial license will be sent to your email address

Sem limitações. 100% desbloqueado. Sem cartão de crédito.

bullet_checkedNão é necessário cartão de crédito nem criação de conta.Sem limitações. 100% desbloqueado. Sem cartão de crédito.
  • Logo Aetna
  • Logo NASA
  • Logo GE
  • Logo Porsche
  • Logo USDA
  • Logo Qatar
Join Millions of Engineers who’ve tried IronPDF
Agende sua consulta sem compromisso.
Preencha o formulário abaixo ou envie um e-mail para sales@ironsoftware.com
Os seus dados serão sempre mantidos em sigilo.
Aprovado por milhões de engenheiros em todo o mundo.
Logotipos dos clientes da Iron Software
Obtenha sua chave de avaliação gratuita de 30 dias instantaneamente.
Não é necessário cartão de crédito nem criação de conta.