IRONSOFTWAREHOME
VÍDEOS

Migrando do SDK Tesseract.NET da Patagames para o IronOCR

Kannaopat Udonpant
Kannapat Udonpant
Updated: 1 de agosto de 2026

Este guia orienta os desenvolvedores .NET em uma migração completa do SDK .NET do Patagames Tesseract para o IronOCR . Este documento aborda a tradução mecânica da API, o desbloqueio da implantação multiplataforma que impulsiona a maioria das migrações e as alterações práticas de código necessárias para migrar um pipeline de OCR de produção de um wrapper comercial exclusivo para Windows para uma biblioteca que funciona no Windows, Linux, macOS, Docker, Azure e AWS sem modificações.

Por que migrar do SDK .NET Tesseract da Patagames?

A maioria das equipes que avaliam o Patagames para substituição não se mostra insatisfeita com a precisão do OCR. Eles se deparam com um obstáculo na implantação — um contêiner Linux, um projeto de migração para a nuvem ou um pipeline de CI no Ubuntu — e descobrem que o binário nativo, exclusivo para Windows, simplesmente não tem solução nessa plataforma. Essa única restrição direciona o restante da avaliação da migração.

A implantação exclusiva para Windows bloqueia a pilha .NET moderna. A Patagames fornece binários nativos para Windows para seu wrapper do mecanismo Tesseract. Não existem pacotes de tempo de execução para Linux x64, macOS ou ARM. A classe OcrApi carrega uma DLL do Windows em tempo de execução; em qualquer outro sistema operacional, o aplicativo falha ao iniciar. Adicione a dependência System.Drawing.Bitmap, que a Microsoft marcou formalmente como não suportada para novos desenvolvimentos multiplataforma, e a biblioteca é incompatível com o modelo de implantação padrão de todos os provedores de nuvem e orquestradores de contêiner.

Pagar preços comerciais por um motor gráfico gratuito, sem acesso multiplataforma. O motor gráfico Tesseract, que está na base do Patagames, é de código aberto e gratuito. Empacotadores comunitários gratuitos como tesseractocr também são fornecidos hoje com binários pré-compilados para Windows, o que remove o principal argumento de conveniência que Patagames oferecia historicamente. Uma licença comercial para o Patagames oferece uma interface de API ligeiramente mais limpa do que o Tesseract puro, mas não adiciona pré-processamento, suporte a PDF, saída de PDF pesquisável ou implantação multiplataforma — as quatro funcionalidades que definem uma biblioteca OCR completa em 2026.

Preços opacos tornam o planejamento orçamentário impossível. A Patagames não divulga os preços das licenças. A avaliação da biblioteca exige um contato com a equipe de vendas antes que qualquer comparação de custos possa ser feita. O preço do IronOCR começa em $999 para uma licença Lite perpétua para um único desenvolvedor com um ano de atualizações incluídas. As equipes podem avaliar o custo versus a capacidade sem um processo de vendas. Consulte a página de licenciamento do IronOCR para obter detalhes completos sobre os níveis de licenciamento.

Variáveis Brutas do Tesseract Vazando pela API. Configurar o modo de segmentação de página no Patagames requer chamar api.SetVariable("tessedit_pageseg_mode", "3") — uma atribuição de variável bruta baseada em string do Tesseract sem IntelliSense, verificação em tempo de compilação e sem descoberta. Se você digitar o nome da variável incorretamente, a chamada simplesmente não fará nada. O IronOCR encapsula cada opção de configuração do Tesseract em propriedades fortemente tipadas no IronTesseract.Configuration.

Nenhuma Saída Estruturada Além de uma String Simples. Patagames GetTextFromImage retorna uma única string. Não há acesso a limites de palavras, agrupamentos de linhas, estrutura de parágrafos ou pontuações de confiança por palavra. Aplicações que precisam extrair campos específicos de formulários ou validar a precisão do OCR palavra por palavra não encontram na API da Patagames uma base sólida para se desenvolver.

Os pipelines de CI/CD falham na etapa do Linux. As equipes modernas de desenvolvimento .NET executam CI no Linux — GitHub Actions, GitLab CI e Azure DevOps utilizam, por padrão, executores baseados em Linux. Um projeto que referencia Tesseract.Net.SDK falhará ao construir a referência binária nativa ou falhará em tempo de execução durante os testes de integração. Cada execução de teste requer um executor de CI específico para Windows ou uma solução alternativa que simule completamente a camada de OCR.

O problema fundamental

Patagames é direcionado apenas ao Windows. Não momento em que o destino da sua implantação for alterado, a biblioteca não poderá acompanhar:

// 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#

Não existe diretório tessdata. Não há caminho de DLL nativo. Sem condições de plataforma. O gráfico de dependências do NuGet resolve automaticamente o ambiente de execução correto para cada destino.

Comparação de recursos entre o SDK Tesseract .NET da Patagames e o IronOCR.

A tabela a seguir descreve as funcionalidades relevantes para equipes que atualmente executam o Patagames em produção.

RecursoSDK .NET do Tesseract da PatagamesIronOCR
Suporte do WindowsSimSim
Suporte para LinuxNãoSim
Suporte para macOSNãoSim
Implantação do DockerNãoSim
Serviço de Aplicativos do AzureNãoSim
AWS LambdaNãoSim
Pacote NuGetTesseract.Net.SDKIronOcr
Modelo de licençaComercial (entre em contato para obter o preço)Perpétua ($999–$2,399, público)
mecanismo OCRTesseract (código aberto)Tesseract 5 otimizado (incluído)
Gestão de dados TessDiretório manual com arquivos .traineddataPacotes de idioma NuGet
Pré-processamento automáticoNoneCorrigir distorção, reduzir ruído, contraste, binarizar, nitidez, dimensionar, dilatar, erodir
Remoção profunda de ruído de fundoNoneSim (DeepCleanBackgroundNoise())
Entrada nativa de PDFNão (renderizador externo necessário)Sim
Entrada TIFF de várias páginasLimitadoSim (input.LoadImageFrames())
Saída em PDF pesquisávelNãoSim (result.SaveAsSearchablePdf())
Exportação hOCRNãoSim
Idiomas suportadosArquivos tessdata do TesseractMais de 125 pacotes NuGet
Simultaneidade multilíngueSim (concatenação de strings)Sim (enum OcrLanguage fortemente tipada)
OCR baseado em regiãoNãoSim (CropRectangle)
Leitura de código de barrasNãoSim
Saída estruturadacorda plana apenasPáginas, parágrafos, linhas, palavras, caracteres com coordenadas
Pontuações de confiança por palavraNãoSim
Configuração de segmentação de páginaChamada de string bruta SetVariableConfiguration.PageSegmentationMode fortemente tipada
Dependência de desenho do sistemaObrigatórioOpcional
Segurança da roscaLimites padrão do TesseractCompleto (criar IronTesseract por thread)
Apoio comercialSimSim
Downloads do NuGetLimitadoMais de 5,3 milhões

Guia de Início Rápido: Migração do SDK .NET do Patagames Tesseract para o IronOCR

Passo 1: Substitua o pacote NuGet

Remover o SDK .NET do Patagames Tesseract:

dotnet remove package Tesseract.Net.SDK
SHELL

Instale o IronOCR a partir do NuGet :

dotnet add package IronOcr

Para suporte a idiomas além do inglês, instale o pacote de idioma correspondente:

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

Etapa 2: Atualizar Namespaces

Substitua os namespaces do Patagames pelo namespace do IronOCR:

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

// After (IronOCR)
using IronOcr;
C#

Etapa 3: Inicializar a licença

Adicione a inicialização da licença na inicialização do aplicativo (antes da primeira chamada IronTesseract):

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

Uma licença de avaliação gratuita está disponível em ironsoftware.com/C#/ocr/ para começar a testar a migração sem necessidade de compra.

Exemplos de migração de código

Processamento de pastas em lote

A Fase 1 demonstrou a extração de imagem única. Implantações de produção do Patagames geralmente inicializam um OcrApi dentro de um loop, chamando api.Init() a cada iteração — o que recarrega o tessdata e reinicializa o mecanismo Tesseract para cada arquivo. Esse padrão compõe o custo de inicialização em centenas de documentos.

Abordagem 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#

Abordagem 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#

A instância IronTesseract do IronOCR mantém o estado do mecanismo entre as chamadas. Reutilizar uma única instância para um lote inteiro elimina a sobrecarga de inicialização por arquivo e remove completamente a dependência do caminho do tessdata. Para processamento em lote paralelo em vários núcleos de CPU, consulte o exemplo de multithreading — crie um IronTesseract por thread em vez de compartilhar uma única instância.

Migração do Modo de Segmentação de Páginas

Patagames expõe o modo de segmentação de página através de uma chamada SetVariable bruta com uma chave de string e um valor inteiro convertido para string. Sem IntelliSense, sem validação de enumeração, sem dica de documentação no local da chamada. Um único dígito controla se o Tesseract trata a entrada como um único bloco de texto, uma coluna, uma palavra ou um único caractere — e não há feedback quando o nome da variável é digitado incorretamente.

Abordagem 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#

Abordagem 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 opção de configuração do Tesseract que Patagames expõe através de SetVariable tem um equivalente diretamente fortemente tipado em IronTesseract.Configuration. A migração é uma substituição mecânica de literais de string por valores de enumeração nomeados. Consulte a documentação da API do IronTesseract para obter informações completas sobre a configuração. O guia de leitura de documentos específicos aborda quando aplicar cada modo de segmentação de página em diferentes tipos de documentos.

Substituição do padrão de iterador de resultado

Patagames retorna uma string simples de GetTextFromImage. Extrair palavras individuais, suas caixas delimitadoras ou seus níveis de confiança da saída do Patagames exige escrever um analisador sintático sobre a string retornada — ou acessar diretamente a API do iterador de resultados do Tesseract por meio de interoperabilidade. Nenhuma das duas abordagens é confiável ou de fácil manutenção.IronOCR expõe um OcrResult totalmente estruturado com acesso nativo a todos os níveis da hierarquia do documento.

Abordagem 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);
    // corda plana apenas — 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)
    {
        // Não X, Y, Width, Height — position information is lost
        Console.WriteLine(word);
    }
}
C#

Abordagem 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#

A estrutura completa OcrResult — páginas, parágrafos, linhas, palavras e caracteres — elimina a necessidade de qualquer analisador de pós-processamento. As coordenadas das palavras permitem a extração de campos por posição, o que é fundamental para o processamento de faturas, OCR de formulários e extração de tabelas. Consulte o guia de resultados estruturados para obter a hierarquia completa e o guia de pontuações de confiança para filtrar palavras com baixa confiança.

Processamento TIFF de múltiplas páginas

Patagames aceita um System.Drawing.Bitmap. Um TIFF de vários quadros contém várias imagens incorporadas, mas System.Drawing.Bitmap não enumera automaticamente os quadros — você deve usar Image.SelectActiveFrame() para percorrê-los manualmente e passar cada bitmap de quadro para GetTextFromImage em um loop. A API de enumeração de quadros não é óbvia e as mensagens de erro quando falha não são descritivas.

Abordagem 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#

Abordagem 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() lida com a enumeração de quadros internamente e aplica pré-processamento a cada quadro no pipeline. A cerimônia de seleção de quadros System.Drawing desaparece completamente. Consulte o guia de entrada TIFF e GIF para obter opções adicionais, incluindo a seleção de um único quadro quando apenas páginas específicas forem necessárias.

Entrada de PDF sem um renderizador externo

Patagames não possui suporte nativo para PDF. Um pipeline de OCR PDF baseado em Patagames requer uma biblioteca de renderização PDF externa — PdfiumViewer, iText ou PDFSharp — para converter cada página em um Bitmap antes de passá-lo para GetTextFromImage. Essa dependência externa adiciona sobrecarga de gerenciamento de pacotes, uma consideração de licenciamento separada e um ponto de falha secundário. A qualidade da renderização também varia entre as bibliotecas, o que afeta a precisão do OCR independentemente do mecanismo Tesseract.

Abordagem 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#

Abordagem 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#

Um pacote NuGet substitui dois. A etapa de renderização desaparece. O guia de entrada de PDF abrange PDFs de página única, de várias páginas e protegidos por senha. Para o fluxo de trabalho de saída de PDF pesquisável — que produz um documento pesquisável por Ctrl+F a partir de um PDF digitalizado — o guia de PDF pesquisável e o exemplo de PDF pesquisável mostram todo o processo em cinco linhas.

API Patagames Tesseract .NET SDK para referência de mapeamento IronOCR

SDK .NET do Tesseract da PatagamesEquivalente de IronOCR
Tesseract.Net.SDK (pacote NuGet)IronOcr (pacote NuGet)
Patagames.Ocr (namespace)IronOcr (namespace)
Patagames.Ocr.Enums (namespace)IronOcr (namespace)
OcrApi.Create()new IronTesseract()
api.Init(tessDataPath, "eng")ocr.Language = OcrLanguage.English (sem caminho)
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) (qualquer variável bruta)ocr.Configuration.[TypedProperty]
new Bitmap(imagePath) (preparação de entrada)input.LoadImage(imagePath)
OcrBitmap.FromFile(path)input.LoadImage(path)
Sem suporte para TIFF com múltiplos quadrosinput.LoadImageFrames(tiffPath)
Sem entrada de PDFinput.LoadPdf(pdfPath) ou ocr.Read(pdfPath)
Não há PDF pesquisávelresult.SaveAsSearchablePdf("output.pdf")
Sem pré-processamentoinput.Deskew(), input.DeNoise(), input.Contrast(), input.Binarize()
OCR sem regiãoinput.LoadImage(path, new CropRectangle(x, y, w, h))
Sem leitura de código de barrasocr.Configuration.ReadBarCodes = true
resultado de corda plana apenasresult.Pages, result.Lines, result.Words, result.Paragraphs
Sem confiança por palavraresult.Words[i].Confidence, result.Confidence
PageSegmentationMode enumTesseractPageSegmentationMode enum
Sem exportação hOCRResultado .ToHOcrString() saída
Somente Windows x64/x86Windows, Linux, macOS, Docker, Azure, AWS

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

Problema 1: Diretório Tessdata ausente no novo ambiente

Patagames: A chamada api.Init(@"./tessdata", "eng") falha em tempo de execução se o diretório tessdata estiver ausente ou o arquivo eng.traineddata estiver faltando. Em ambientes conteinerizados, isso representa uma falha no momento da implantação, sem qualquer aviso prévio durante a compilação. As equipes que implantam em Docker frequentemente descobrem isso depois que a imagem já foi enviada.

Solução: O IronOCR remove completamente o conceito de diretório tessdata. Instale os dados de idioma como pacotes NuGet :

dotnet add package IronOcr.Languages.English

Os dados de linguagem são resolvidos em tempo de compilação e são incluídos na saída dotnet publish automaticamente. Não há como errar no caminho e nenhum item na lista de verificação de implantação para arquivos de idioma.

Problema 2: System.Drawing.Bitmap falha no Linux

Patagames: O construtor System.Drawing.Bitmap lança TypeInitializationException ou PlatformNotSupportedException no Linux a menos que libgdiplus esteja instalado como um pacote do sistema. Mesmo com libgdiplus presente, o comportamento é inconsistente entre distribuições. A Microsoft recomenda explicitamente não usar System.Drawing em plataformas não Windows em novos desenvolvimentos.

Solução: O IronOCR aceita caminhos de arquivos, matrizes de bytes e fluxos de dados diretamente. A dependência System.Drawing não é necessária:

// 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 o guia de entrada de imagem para obter informações sobre todos os tipos de entrada compatíveis, incluindo matrizes de bytes e fluxos.

Problema 3: Falhas silenciosas na configuração de variáveis

Patagames: api.SetVariable("tessedit_pageseg_mode", someValue) retorna bool mas a maioria dos chamadores descarta o valor de retorno. Quando o nome de uma variável está escrito incorretamente ou um valor não suportado é passado, o Tesseract aplica silenciosamente um valor padrão e continua. A consequente degradação da precisão é difícil de atribuir à chamada de configuração.

Solução: As propriedades de configuração do IronOCR são fortemente tipadas. Uma atribuição inválida gera um erro de compilação, não um comportamento padrão silencioso em tempo de execução:

// 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 um loop

Patagames: As equipes que inicializam OcrApi dentro de um loop de processamento incorrem em sobrecarga de carregamento de tessdata a cada iteração. O padrão típico — OcrApi.Create() e api.Init() dentro de um foreach — é correto do ponto de vista do isolamento de threads, mas caro ao processar centenas de documentos.

Solução: Crie um IronTesseract por thread e reutilize-o em todos os documentos atribuídos a esse thread. A instância é sem estado entre as chamadas de .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 trabalho em lote paralelas, crie uma instância por tarefa. Consulte o guia de otimização de velocidade para opções de ajuste de rendimento incluindo IronTesseract.Configuration.TesseractVersion e predefinições de velocidade de leitura.

Problema 5: Nenhuma imagem base Docker para Linux funciona

Patagames: Não existe um binário Patagames compatível com Linux. Qualquer tentativa de executar um aplicativo baseado em Patagames em um contêiner Docker Linux falha. A única solução alternativa é um contêiner baseado em Windows (FROM mcr.microsoft.com/windows/servercore), que é significativamente maior, mais lento de puxar e incompatível com a maioria das configurações do Kubernetes que usam grupos de nós Linux.

Solução: O IronOCR suporta imagens base padrão do Linux. O guia de implantação do Docker aborda a configuração exata do 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

Não é necessário nenhum contêiner do Windows. Não há distribuição binária separada. A mesma imagem Docker funciona em qualquer host de contêiner baseado em Linux.

Problema 6: O OCR de PDF requer dois pacotes NuGet

Patagames: Adicionar OCR de PDF a um aplicativo Patagames requer um segundo pacote NuGet para renderização de PDF (PdfiumViewer, iTextSharp.LGPLv2.Core ou similar). Cada uma adiciona seus próprios termos de licenciamento, frequência de atualizações e potenciais problemas de compatibilidade. Quando a versão do renderizador de PDF e a versão do Patagames entram em conflito, ambas as equipes devem ser envolvidas para resolver o problema.

Solução: O IronOCR processa a entrada de PDFs nativamente, sem a necessidade de um pacote adicional. Remova completamente a dependência do 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 verificação para migração do SDK .NET do Tesseract da Patagames

Pré-migração

Antes de começar, faça uma auditoria no código-fonte para identificar todas as referências a Patagames:

# 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: contagem total dos locais de chamada OcrApi.Create(), número de configurações de linguagem distintas api.Init(), localização do diretório tessdata em cada ambiente de implantação, e qualquer código de pré-processamento escrito em System.Drawing ou ImageSharp que encapsula chamadas Patagames.

Migração de código

  1. Remova a referência do pacote NuGet Tesseract.Net.SDK de todos os projetos.
  2. Remova qualquer pacote NuGet de renderização de PDF (PdfiumViewer, iText, etc.) usado exclusivamente para alimentar o Patagames.
  3. Instale o pacote NuGet IronOcr.
  4. Instale IronOcr.Languages.English e quaisquer outros pacotes de linguagem necessários.
  5. Adicione IronOcr.License.LicenseKey = "YOUR-LICENSE-KEY" na inicialização do aplicativo.
  6. Substitua using Patagames.Ocr; e using Patagames.Ocr.Enums; por using IronOcr;.
  7. Substitua cada bloco OcrApi.Create() + api.Init(path, lang) por new IronTesseract() + ocr.Language = OcrLanguage.[Language].
  8. Substitua cada chamada api.GetTextFromImage(bitmap) por ocr.Read(imagePath).Text (removendo o construtor Bitmap).
  9. Substitua cada chamada api.SetVariable("tessedit_pageseg_mode", value) pelo tipo ocr.Configuration.PageSegmentationMode = TesseractPageSegmentationMode.[Value].
  10. Remova toda a instanciação System.Drawing.Bitmap que existiu apenas para passar imagens para o Patagames.
  11. Substitua loops de renderização de PDF (se presentes) por input.LoadPdf(pdfPath).
  12. Substitua loops TIFF de múltiplos quadros usando Image.SelectActiveFrame() por input.LoadImageFrames(tiffPath).
  13. Substitua qualquer código de pré-processamento personalizado (redimensionamento System.Drawing, contraste, limiar) pelas chamadas de filtro equivalentes OcrInput.
  14. Remova o diretório tessdata de todos os manifestos de implantação, Dockerfiles e etapas de cópia de CI.
  15. Atualize os testes de integração para serem executados em ambientes de CI Linux (GitHub Actions ubuntu-latest, etc.) para verificar o comportamento entre plataformas.

Pós-migração

  • Execute o Suite completo de testes no Linux (e não apenas no Windows) para confirmar se o desbloqueio da implantação multiplataforma está funcionando.
  • Verificar se a precisão do OCR é igual ou superior à linha de base do Patagames no mesmo conjunto de imagens de teste.
  • Confirme que documentos multilíngues produzem saída correta usando a abordagem enum OcrLanguage.
  • Teste a entrada de PDF diretamente, sem a biblioteca de renderização externa, e compare a precisão da saída com o caminho antigo do bitmap renderizado.
  • Validar se o processamento TIFF de múltiplos quadros produz a mesma quantidade de páginas e conteúdo de texto que o loop de enumeração de quadros anterior.
  • Confirme se o diretório tessdata está ausente do artefato de implantação e se não ocorrem erros de caminho em tempo de execução.
  • Execute uma construção Docker direcionada a linux/amd64 e execute pelo menos uma chamada OCR dentro do contêiner.
  • Verifique se o pipeline de CI (GitHub Actions, GitLab CI, Azure DevOps) é concluído com sucesso em seu executor Linux padrão.
  • Verifique se os níveis de confiança estão disponíveis no resultado e se qualquer lógica de filtragem baseada em confiança funciona conforme o esperado.
  • Confirme que a inicialização da chave de licença ocorre antes que a primeira instância IronTesseract seja criada no código de inicialização de produção.

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

Implantação multiplataforma sem alterações de código. Após a migração, o mesmo binário é executado no Windows Server, em contêineres Docker do Ubuntu, em máquinas de desenvolvimento macOS, no Azure App Service no Linux e no AWS Lambda. Não existem condicionais de plataforma, sinalizadores de identificação de tempo de execução ou artefatos de implantação separados por sistema operacional. Uma migração para a nuvem que antes era bloqueada pela biblioteca OCR exclusiva para Windows passa a ser uma implantação de contêiner padrão. Os guias de implantação para Linux , Docker , Azure e AWS abrangem configurações de produção para cada plataforma.

O gerenciamento do Tessdata desaparece das operações. O diretório tessdata — sua localização, seu conteúdo, sua presença em todos os ambientes — deixa de ser uma preocupação operacional. Os dados de linguagem são uma dependência do NuGet resolvida em tempo de compilação. Aparece na saída dotnet publish automaticamente. Não há manuais de implantação para atualizar ao adicionar um novo idioma, nenhuma camada Docker para invalidar quando os arquivos tessdata são alterados e nenhum incidente de produção relacionado à ausência de dados tessdata para investigar.

A Saída Estruturada Substitui a Análise de Strings. Aplicações que anteriormente analisavam a string simples de GetTextFromImage para extrair campos, validar conteúdo ou computar confiança agora acessam esses dados diretamente de OcrResult. As coordenadas das palavras, os limites das linhas, os agrupamentos de parágrafos e os índices de confiança por palavra são propriedades de primeira classe. A extração de campo por caixa delimitadora — o alicerce do processamento de faturas e OCR de formulários — é uma chamada CropRectangle direta em vez de uma busca frágil por sub-string.

O Pré-processamento Integrado Substitui Pipelines de Imagem Personalizados. Qualquer código de pré-processamento escrito para compensar a falta de filtros integrados do Patagames pode ser substituído por chamadas de método OcrInput. Correção de distorção, remoção de ruído, aprimoramento de contraste, binarização e normalização de resolução são operações realizadas em uma única linha de código. Equipes que gastaram 20-40 horas construindo e ajustando um pipeline de pré-processamento System.Drawing podem substituí-lo por cinco chamadas de método e redirecionar esse esforço de manutenção para outro lugar. Consulte a visão geral dos recursos de pré-processamento para obter o catálogo completo de filtros.

O suporte nativo a PDF remove uma classe de dependência. As bibliotecas de renderização de PDF adicionadas exclusivamente para suprir a falta de compatibilidade com PDFs no Patagames foram eliminadas. Um sistema de OCR de produção que anteriormente exigia coordenar atualizações entre três pacotes — Tesseract.Net.SDK, um renderizador de PDF, e sua dependência compartilhada System.Drawing — agora tem um pacote de OCR sem dependências de ponte. A entrada de PDFs, incluindo documentos protegidos por senha e com várias páginas, é um tipo de entrada de primeira classe. Para casos de uso de conformidade e gerenciamento de registros, result.SaveAsSearchablePdf() produz saída PDF com camada de texto em uma única chamada sem bibliotecas adicionais.

Preço Transparente e Suporte Comercial. A licença perpétua Lite do IronOCR$999 cobre um desenvolvedor e um local de implantação com um ano de atualizações incluídas. Os preços são públicos, a estrutura de níveis é clara e o suporte comercial está disponível sem um contrato Enterprise . As equipes que pagavam à Patagames as taxas para o uso exclusivo do Tesseract no Windows agora obtêm implantação multiplataforma, pré-processamento, suporte a PDF e mais de 125 idiomas — além de migrarem para um modelo de preços em que o custo é conhecido antes da conclusão da avaliação. Consulte a licença do IronOCR para obter detalhes completos sobre os níveis de licenciamento e a página do produto IronOCR para obter uma licença de avaliação gratuita.

Observe: PDFium, PDFSharp, Tesseract e iText são marcas registradas de seus respectivos proprietários. Este site não é afiliado, endossado ou patrocinado pelo Chromium Project, Google, empira Software GmbH ou iText Group. Todos os nomes de produtos, logos 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.