Ir para o conteúdo do rodapé
COMPARAR COM OUTROS COMPONENTES

IronOCR ou OCR baseado em LLM: qual os desenvolvedores .NET devem escolher?

Quatro arquivos de modelo. Essa é a primeira coisa que o RapidOCR .NET exige antes que um único caractere possa ser reconhecido: um modelo de detecção, um classificador de direção, um modelo de reconhecimento e um dicionário de caracteres, cada um baixado separadamente de uma página de lançamentos do GitHub e interligados por meio de uma configuração de caminho explícita. Antes que a sua primeira chamada engine.Run() retorne um resultado, você já gerenciou uma sequência de download manual, editou caminhos de arquivos no código, adicionou regras de cópia do MSBuild ao seu .csproj, e confirmou que os binários nativos do ONNX Runtime correspondem ao seu alvo de implantação. Para uma equipe que avalia opções de OCR para produção, essa cerimônia de configuração representa a história completa do RapidOCR .NET .

Entendendo o RapidOCR .NET

RapidOCR .NET é um wrapper .NET mantido pela comunidade para o projeto RapidOCR, que por sua vez é uma adaptação otimizada para CPU dos modelos de aprendizado profundo PaddleOCR da Baidu para o formato ONNX. O pacote NuGet (RapidOcrNet) é mantido por um único desenvolvedor (BobLd no GitHub) sob uma licença Apache 2.0. Entender que a linhagem importa: a biblioteca está a três camadas de abstração da tecnologia original — do Baidu PaddlePaddle ao PaddleOCR, passando pela conversão ONNX do RapidOCR da comunidade, até o wrapper .NET .

Principais características arquitetônicas:

  • Requisito de modelo de 4 arquivos: Detecção (det.onnx), classificador de direção (cls.onnx), reconhecimento (rec.onnx) e dicionário de caracteres (keys.txt) devem estar todos presentes nos caminhos configurados antes da inicialização do motor.
  • Dependência do ONNX Runtime: Requer Microsoft.ML.OnnxRuntime (CPU) ou Microsoft.ML.OnnxRuntime.Gpu (CUDA), adicionando 30–50 MB ao tamanho da aplicação. Os binários de tempo de execução devem ser compatíveis com a plataforma de implantação.
  • Restrição de idioma: os modelos são treinados principalmente em chinês e inglês. Línguas europeias (espanhol, francês, alemão), alfabetos cirílicos (russo, ucraniano), árabe, hebraico e alfabetos indianos não são suportados. Os modelos experimentais japoneses e coreanos são limitados e foram desenvolvidos com a contribuição da comunidade.
  • Entrada somente de imagem: o RapidOCR .NET não possui suporte nativo para PDF. O processamento de um PDF requer uma biblioteca de renderização externa para converter as páginas em imagens, realizar o OCR de cada imagem individualmente e remontar os resultados manualmente.
  • Latência de inicialização a frio: O carregamento do modelo leva de 2 a 5 segundos na primeira execução e consome de 300 a 500 MB de memória em tempo de execução.
  • Escala da comunidade: O projeto tem presença limitada no Stack Overflow, documentação mínima além do arquivo README e nenhum suporte comercial ou SLA de manutenção.
  • Sem saída em PDF pesquisável: A biblioteca extrai texto das imagens. Não é possível gravar os resultados do OCR de volta em um PDF como uma camada de texto pesquisável.

Sobrecarga da configuração de 4 modelos

Todas as aplicações RapidOCR .NET começam com este bloco de inicialização, independentemente da complexidade:

// RapidOcrNet: 4 paths required — any missing file throws at runtime
var engine = new RapidOcrEngine(new RapidOcrOptions
{
    DetModelPath = "./models/det.onnx",      // ~3 MB download
    ClsModelPath = "./models/cls.onnx",      // ~1 MB download
    RecModelPath = "./models/rec_en.onnx",   // ~2–10 MB depending on language
    KeysPath     = "./models/en_keys.txt"    // ~100 KB character dictionary
});

// Text blocks returned — must be sorted and joined manually
var result = engine.Run(imagePath);
var text = string.Join("\n", result.TextBlocks
    .OrderBy(b => b.BoundingBox.Top)
    .ThenBy(b => b.BoundingBox.Left)
    .Select(b => b.Text));
// RapidOcrNet: 4 paths required — any missing file throws at runtime
var engine = new RapidOcrEngine(new RapidOcrOptions
{
    DetModelPath = "./models/det.onnx",      // ~3 MB download
    ClsModelPath = "./models/cls.onnx",      // ~1 MB download
    RecModelPath = "./models/rec_en.onnx",   // ~2–10 MB depending on language
    KeysPath     = "./models/en_keys.txt"    // ~100 KB character dictionary
});

// Text blocks returned — must be sorted and joined manually
var result = engine.Run(imagePath);
var text = string.Join("\n", result.TextBlocks
    .OrderBy(b => b.BoundingBox.Top)
    .ThenBy(b => b.BoundingBox.Left)
    .Select(b => b.Text));
Imports System.Linq

' RapidOcrNet: 4 paths required — any missing file throws at runtime
Dim engine = New RapidOcrEngine(New RapidOcrOptions With {
    .DetModelPath = "./models/det.onnx",      ' ~3 MB download
    .ClsModelPath = "./models/cls.onnx",      ' ~1 MB download
    .RecModelPath = "./models/rec_en.onnx",   ' ~2–10 MB depending on language
    .KeysPath = "./models/en_keys.txt"        ' ~100 KB character dictionary
})

' Text blocks returned — must be sorted and joined manually
Dim result = engine.Run(imagePath)
Dim text = String.Join(vbCrLf, result.TextBlocks _
    .OrderBy(Function(b) b.BoundingBox.Top) _
    .ThenBy(Function(b) b.BoundingBox.Left) _
    .Select(Function(b) b.Text))
$vbLabelText   $csharpLabel

Mudar para OCR em chinês não é uma mudança de configuração — é uma troca de arquivos. O modelo de reconhecimento em inglês (en_rec.onnx / en_keys.txt) e o modelo de reconhecimento em chinês (ch_rec.onnx / ch_keys.txt) são downloads separados. Se um documento contiver texto em chinês e espanhol, não há como prosseguir: os modelos em espanhol não existem no catálogo de modelos do RapidOCR.

O .csproj também requer entradas explícitas do MSBuild para copiar todos os quatro arquivos na compilação:

<ItemGroup>
  <Content Include="models\**\*.*">
    <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
  </Content>
</ItemGroup>
<ItemGroup>
  <Content Include="models\**\*.*">
    <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
  </Content>
</ItemGroup>
XML

Se essa etapa for omitida, a implantação em produção falhará silenciosamente em tempo de execução quando os caminhos não retornarem nenhum resultado.

Entendendo o IronOCR

IronOCR é uma biblioteca OCR comercial para .NET , construída sobre um mecanismo Tesseract 5 otimizado, projetada para funcionar a partir de um único pacote NuGet , sem arquivos de modelo externos, sem gerenciamento de tessdata e sem configuração binária nativa. Ele abrange toda a gama de cenários de desenvolvimento .NET — aplicativos web ASP.NET , processadores em lote de console, ferramentas de desktop WPF, Azure Functions, AWS Lambda, contêineres Docker e aplicativos móveis MAUI — em Windows, Linux, macOS e ARM.

Principais características:

  • Implantação de pacote único: dotnet add package IronOcr é a instalação completa. Todos os binários do mecanismo, os dados de idioma para a configuração padrão (inglês) e os algoritmos de pré-processamento são fornecidos dentro do pacote.
  • Fluxo de trabalho de pré-processamento automático: Correção de distorção, redução de ruído, aprimoramento de contraste, binarização e normalização de resolução são executados automaticamente em imagens que necessitam desses recursos. A aplicação manual do filtro está disponível quando necessário.
  • Suporte nativo a PDF: PDFs são alimentados diretamente em IronTesseract.Read() sem etapas de conversão. PDFs protegidos por senha aceitam um parâmetro Password. A saída em PDF pesquisável é obtida com uma única chamada de método no resultado.
  • 125+ idiomas via NuGet: Cada pacote de idioma (IronOcr.Languages.French, IronOcr.Languages.Arabic, etc.) instala-se como uma dependência do NuGet. A troca de idiomas é uma atribuição de propriedade, não um download de arquivo.
  • Modelo de resultado estruturado: OcrResult expõe .Pages, .Paragraphs, .Lines, .Words, e pontuações de confiança por palavra com coordenadas de caixa delimitadora.
  • Seguro para threads e sem estado: Múltiplas instâncias de IronTesseract executam em paralelo sem bloqueios ou estado compartilhado.
  • Suporte comercial: Licenciado perpetuamente a partir de $999 (Lite), com suporte por e-mail e uma API versionada sob manutenção ativa.

Comparação de recursos

Recurso RapidOCR.NET IronOCR
Instalação NuGet + 4 downloads de modelos manuais Pacote NuGet único
Suporte linguístico ~5(somente CJK + inglês) Mais de 125 idiomas disponíveis através dos pacotes NuGet.
Entrada nativa de PDF Não Sim
Saída em PDF pesquisável Não Sim
Pré-processamento integrado Não Sim (filtros automáticos + manuais)
Suporte comercial Nenhum (comunidade) Sim (incluído na licença)

Comparação Detalhada de Recursos

Categoria/Funcionalidade RapidOCR.NET IronOCR
Configuração e instalação
Instalação NuGet Sim Sim
É necessário fazer o download de modelos externos. Sim (4 arquivos) Não
Configuração de caminho necessária Sim Não
Regras de cópia do MSBuild necessárias Sim Não
Funciona imediatamente após a instalação do NuGet. Não Sim
Suporte de Idiomas
Inglês Sim Sim
Chinês Simplificado / Tradicional Sim (foco principal) Sim
japonês Apenas para uso experimental Sim
coreano Apenas para uso experimental Sim
Línguas europeias (espanhol, francês, alemão, etc.) Não Sim (30+)
Cirílico (russo, ucraniano, etc.) Não Sim (15+)
Árabe / Hebraico Não Sim
Escritas indianas (hindi, bengali, tâmil) Não Sim (10+)
OCR simultâneo multilíngue Não Sim
Total de idiomas suportados ~5 125+
Formatos de entrada
JPEG / PNG / BMP / TIFF Sim Sim
PDF (nativo, sem conversão) Não Sim
PDF protegido por senha Não Sim
Fluxo / matriz de bytes Limitado Sim
Entrada de URL Não Sim
Saída
Texto simples Sim Sim
caixas delimitadoras de blocos de texto Sim Sim
Palavras/linhas/parágrafos estruturados Parcial (somente blocos) Sim
Pontuações de confiança por palavra Sim (por bloco) Sim
PDF pesquisável Não Sim
Exportação hOCR Não Sim
Pré-processamento
Pré-processamento automático Não Sim
Desvio Não Sim
Redução de ruído Não Sim
Contrastar / binarizar Não Sim
Melhoria de resolução Não Sim
Implantação
Embalagem individual autossuficiente Não (4 ou mais arquivos externos) Sim
Suporte a Docker É necessária uma cópia do modelo do manual. Sim (pronto para usar)
Suporte para Linux Requer binários nativos do ONNX Runtime. Sim
Suporte para macOS Requer binários nativos do ONNX Runtime. Sim
Suporte e manutenção
Suporte comercial / SLA Não Sim
Manutenção ativa com suporte da empresa Não (desenvolvedor comunitário único) Sim
Tipo de licença Apache 2.0 (gratuito) Comercial perpétuo ($999+)

Gerenciamento de modelos ONNX versus configuração zero

A principal diferença operacional entre o RapidOCR .NET e o IronOCR não é a precisão, mas sim o custo contínuo de gerenciar quatro arquivos de modelo externos em todos os ambientes em que seu aplicativo é utilizado.

Abordagem RapidOCR .NET

Os arquivos do modelo não estão incluídos no pacote NuGet . Eles estão localizados nas páginas de lançamento do GitHub para o projeto RapidOCR e devem ser baixados separadamente, versionados manualmente e implantados com seu aplicativo. Quando o projeto RapidOCR lançar modelos atualizados para maior precisão, você repete a sequência de download e substitui os arquivos em sua implantação.

Em um pipeline CI/CD, os arquivos de modelo devem ser comitados no repositório (adicionando 15–25 MB de dados binários ao histórico do Git) ou buscados durante a etapa de compilação com scripts personalizados. Em um contêiner Docker, cada conjunto de modelos de idioma adiciona uma instrução COPY dedicada e uma camada não-trivial. Em uma implantação do Kubernetes, os arquivos de modelo normalmente acabam em um volume montado ou incorporados à imagem, ambos exigindo políticas sobre como as atualizações se propagam.

A lógica de validação nos arquivos de origem torna a fragilidade concreta:

// RapidOcrNet: Runtime validation needed because any missing file crashes the engine
public static bool ValidateModelFiles()
{
    var requiredFiles = new[]
    {
        Path.Combine(ModelDirectory, "det.onnx"),
        Path.Combine(ModelDirectory, "cls.onnx"),
        Path.Combine(ModelDirectory, "rec_en.onnx"),
        Path.Combine(ModelDirectory, "en_keys.txt")
    };

    var missingFiles = requiredFiles.Where(f => !File.Exists(f)).ToList();

    if (missingFiles.Any())
    {
        Console.WriteLine("ERROR: Missing required model files:");
        foreach (var file in missingFiles)
            Console.WriteLine($"  - {file}");
        return false;
    }

    return true;
}
// RapidOcrNet: Runtime validation needed because any missing file crashes the engine
public static bool ValidateModelFiles()
{
    var requiredFiles = new[]
    {
        Path.Combine(ModelDirectory, "det.onnx"),
        Path.Combine(ModelDirectory, "cls.onnx"),
        Path.Combine(ModelDirectory, "rec_en.onnx"),
        Path.Combine(ModelDirectory, "en_keys.txt")
    };

    var missingFiles = requiredFiles.Where(f => !File.Exists(f)).ToList();

    if (missingFiles.Any())
    {
        Console.WriteLine("ERROR: Missing required model files:");
        foreach (var file in missingFiles)
            Console.WriteLine($"  - {file}");
        return false;
    }

    return true;
}
Imports System
Imports System.IO
Imports System.Linq

Public Class RapidOcrNet
    Public Shared Function ValidateModelFiles() As Boolean
        Dim requiredFiles = {
            Path.Combine(ModelDirectory, "det.onnx"),
            Path.Combine(ModelDirectory, "cls.onnx"),
            Path.Combine(ModelDirectory, "rec_en.onnx"),
            Path.Combine(ModelDirectory, "en_keys.txt")
        }

        Dim missingFiles = requiredFiles.Where(Function(f) Not File.Exists(f)).ToList()

        If missingFiles.Any() Then
            Console.WriteLine("ERROR: Missing required model files:")
            For Each file In missingFiles
                Console.WriteLine($"  - {file}")
            Next
            Return False
        End If

        Return True
    End Function
End Class
$vbLabelText   $csharpLabel

Aplicações de produção que utilizam o RapidOCR .NET incluem rotineiramente validações de inicialização como esta, pois a ausência de um arquivo de modelo não gera um erro claro durante a instalação do pacote — ela causa uma falha em tempo de execução quando o mecanismo é inicializado pela primeira vez. Essa falha se manifesta na produção, não no desenvolvimento.

Abordagem IronOCR

Não há arquivos de modelo para gerenciar. Após dotnet add package IronOcr, o motor está pronto:

// IronOCR: no model downloads, no path configuration, no validation boilerplate
IronOcr.License.LicenseKey = "YOUR-LICENSE-KEY";
var text = new IronTesseract().Read("document.jpg").Text;
// IronOCR: no model downloads, no path configuration, no validation boilerplate
IronOcr.License.LicenseKey = "YOUR-LICENSE-KEY";
var text = new IronTesseract().Read("document.jpg").Text;
' IronOCR: no model downloads, no path configuration, no validation boilerplate
IronOcr.License.LicenseKey = "YOUR-LICENSE-KEY"
Dim text = New IronTesseract().Read("document.jpg").Text
$vbLabelText   $csharpLabel

O guia de instalação do IronTesseract mostra o caminho completo da instalação. Pacotes de idiomas que se estendem além do inglês são pacotes NuGet — dotnet add package IronOcr.Languages.French — e a etapa de restauração cuida de tudo, incluindo em pipelines CI/CD que já restauram dependências do NuGet. Não há decisões .gitignore sobre arquivos de modelo binários, sem camadas de CÓPIA em Dockerfiles, sem scripts de validação de inicialização.

Para equipes que implantam no Docker, o guia oficial do IronOCR para Docker cobre a única dependência de sistema necessária (libgdiplus em imagens baseadas em Debian/Ubuntu) e nada mais.

Suporte linguístico

Abordagem RapidOCR .NET

A abrangência linguística do RapidOCR.NET reflete sua origem. O PaddleOCR foi desenvolvido pela Baidu para servir como serviço de busca na internet em língua chinesa. Seus modelos são excelentes para chinês simplificado e chinês tradicional. O suporte para inglês está incluído, mas não era o objetivo principal do projeto. Os modelos japoneses e coreanos, contribuídos pela comunidade, foram classificados como experimentais. Todas as outras línguas — espanhol, francês, alemão, russo, árabe, hindi, português e mais de 100 outras — não possuem modelo disponível.

A troca entre idiomas suportados requer o download de arquivos de modelo diferentes:

// RapidOcrNet: Inglês engine
var englishEngine = new RapidOcrEngine(new RapidOcrOptions
{
    DetModelPath = Path.Combine(modelPath, "det.onnx"),
    ClsModelPath = Path.Combine(modelPath, "cls.onnx"),
    RecModelPath = Path.Combine(modelPath, "en_rec.onnx"),   // English-specific
    KeysPath     = Path.Combine(modelPath, "en_keys.txt")    // English-specific
});

// RapidOcrNet: Chinese engine — different rec and keys files required
var chineseEngine = new RapidOcrEngine(new RapidOcrOptions
{
    DetModelPath = Path.Combine(modelPath, "det.onnx"),
    ClsModelPath = Path.Combine(modelPath, "cls.onnx"),
    RecModelPath = Path.Combine(modelPath, "ch_rec.onnx"),   // Different download
    KeysPath     = Path.Combine(modelPath, "ch_keys.txt")    // Different download
});

// Spanish? NotSupportedException — no model exists
// RapidOcrNet: Inglês engine
var englishEngine = new RapidOcrEngine(new RapidOcrOptions
{
    DetModelPath = Path.Combine(modelPath, "det.onnx"),
    ClsModelPath = Path.Combine(modelPath, "cls.onnx"),
    RecModelPath = Path.Combine(modelPath, "en_rec.onnx"),   // English-specific
    KeysPath     = Path.Combine(modelPath, "en_keys.txt")    // English-specific
});

// RapidOcrNet: Chinese engine — different rec and keys files required
var chineseEngine = new RapidOcrEngine(new RapidOcrOptions
{
    DetModelPath = Path.Combine(modelPath, "det.onnx"),
    ClsModelPath = Path.Combine(modelPath, "cls.onnx"),
    RecModelPath = Path.Combine(modelPath, "ch_rec.onnx"),   // Different download
    KeysPath     = Path.Combine(modelPath, "ch_keys.txt")    // Different download
});

// Spanish? NotSupportedException — no model exists
Imports System.IO

' RapidOcrNet: Inglês engine
Dim englishEngine = New RapidOcrEngine(New RapidOcrOptions With {
    .DetModelPath = Path.Combine(modelPath, "det.onnx"),
    .ClsModelPath = Path.Combine(modelPath, "cls.onnx"),
    .RecModelPath = Path.Combine(modelPath, "en_rec.onnx"),   ' English-specific
    .KeysPath = Path.Combine(modelPath, "en_keys.txt")        ' English-specific
})

' RapidOcrNet: Chinese engine — different rec and keys files required
Dim chineseEngine = New RapidOcrEngine(New RapidOcrOptions With {
    .DetModelPath = Path.Combine(modelPath, "det.onnx"),
    .ClsModelPath = Path.Combine(modelPath, "cls.onnx"),
    .RecModelPath = Path.Combine(modelPath, "ch_rec.onnx"),   ' Different download
    .KeysPath = Path.Combine(modelPath, "ch_keys.txt")        ' Different download
})

' Spanish? NotSupportedException — no model exists
$vbLabelText   $csharpLabel

Uma aplicação que precisa processar documentos em inglês, chinês e espanhol da mesma fila não possui um caminho viável no RapidOCR .NET para os documentos em espanhol.

Abordagem IronOCR

O IronOCR suporta mais de 125 idiomas , cada um disponível como um pacote de idiomas NuGet . A troca é uma atribuição de propriedade enum na instância IronTesseract — sem downloads de arquivos, sem recriação do motor:

// IronOCR: language switching is a property change, not a file swap
var ocr = new IronTesseract();

// English
ocr.Language = OcrLanguage.English;

// Chinese Simplified
ocr.Language = OcrLanguage.ChineseSimplified;

// Spanish — no model download needed
ocr.Language = OcrLanguage.Spanish;

// Arabic — just works
ocr.Language = OcrLanguage.Arabic;

// Russian — just works
ocr.Language = OcrLanguage.Russian;

var result = ocr.Read("document.jpg");
// IronOCR: language switching is a property change, not a file swap
var ocr = new IronTesseract();

// English
ocr.Language = OcrLanguage.English;

// Chinese Simplified
ocr.Language = OcrLanguage.ChineseSimplified;

// Spanish — no model download needed
ocr.Language = OcrLanguage.Spanish;

// Arabic — just works
ocr.Language = OcrLanguage.Arabic;

// Russian — just works
ocr.Language = OcrLanguage.Russian;

var result = ocr.Read("document.jpg");
Imports IronOcr

Dim ocr As New IronTesseract()

' English
ocr.Language = OcrLanguage.English

' Chinese Simplified
ocr.Language = OcrLanguage.ChineseSimplified

' Spanish — no model download needed
ocr.Language = OcrLanguage.Spanish

' Arabic — just works
ocr.Language = OcrLanguage.Arabic

' Russian — just works
ocr.Language = OcrLanguage.Russian

Dim result = ocr.Read("document.jpg")
$vbLabelText   $csharpLabel

Documentos com idiomas mistos usam AddSecondaryLanguage:

var ocr = new IronTesseract();
ocr.Language = OcrLanguage.ChineseSimplified;
ocr.AddSecondaryLanguage(OcrLanguage.English);
var result = ocr.Read("mixed-document.jpg");
var ocr = new IronTesseract();
ocr.Language = OcrLanguage.ChineseSimplified;
ocr.AddSecondaryLanguage(OcrLanguage.English);
var result = ocr.Read("mixed-document.jpg");
Imports IronOcr

Dim ocr As New IronTesseract()
ocr.Language = OcrLanguage.ChineseSimplified
ocr.AddSecondaryLanguage(OcrLanguage.English)
Dim result = ocr.Read("mixed-document.jpg")
$vbLabelText   $csharpLabel

O guia sobre vários idiomas e o exemplo de idiomas internacionais abordam detalhadamente a instalação de pacotes de idiomas e a configuração de idiomas secundários.

Recursos de processamento e saída de PDF

Abordagem RapidOCR .NET

RapidOCR .NET processa imagens. Os PDFs não são imagens. A biblioteca não possui capacidade de renderização de PDF, nem de escrita de PDF, e nenhum mecanismo para produzir PDFs pesquisáveis. Extrair texto de um PDF digitalizado com o RapidOCR .NET requer pelo menos três componentes distintos:

// RapidOcrNet: PDF processing requires external library + manual assembly
public async Task<string> ExtractTextFromPdf(string pdfPath)
{
    // Step 1: Requires PdfPig, Docotic, or similar external library
    var pageImages = await RenderPdfToImages(pdfPath);

    // Step 2: Initialize RapidOcr with 4 model files (must already be downloaded)
    using var engine = new RapidOcrEngine(new RapidOcrOptions
    {
        DetModelPath = "models/det.onnx",
        ClsModelPath = "models/cls.onnx",
        RecModelPath = "models/rec_en.onnx",
        KeysPath     = "models/en_keys.txt"
    });

    // Step 3: OCR each image individually
    var results = new List<string>();
    foreach (var pageImage in pageImages)
    {
        var result = engine.Run(pageImage);
        results.Add(string.Join("\n", result.TextBlocks.Select(b => b.Text)));
    }

    // Step 4: Combine manually — page structure not preserved
    return string.Join("\n\n", results);
}
// RapidOcrNet: PDF processing requires external library + manual assembly
public async Task<string> ExtractTextFromPdf(string pdfPath)
{
    // Step 1: Requires PdfPig, Docotic, or similar external library
    var pageImages = await RenderPdfToImages(pdfPath);

    // Step 2: Initialize RapidOcr with 4 model files (must already be downloaded)
    using var engine = new RapidOcrEngine(new RapidOcrOptions
    {
        DetModelPath = "models/det.onnx",
        ClsModelPath = "models/cls.onnx",
        RecModelPath = "models/rec_en.onnx",
        KeysPath     = "models/en_keys.txt"
    });

    // Step 3: OCR each image individually
    var results = new List<string>();
    foreach (var pageImage in pageImages)
    {
        var result = engine.Run(pageImage);
        results.Add(string.Join("\n", result.TextBlocks.Select(b => b.Text)));
    }

    // Step 4: Combine manually — page structure not preserved
    return string.Join("\n\n", results);
}
Imports System.Threading.Tasks
Imports System.Collections.Generic
Imports System.Linq

Public Class PdfTextExtractor
    ' RapidOcrNet: PDF processing requires external library + manual assembly
    Public Async Function ExtractTextFromPdf(pdfPath As String) As Task(Of String)
        ' Step 1: Requires PdfPig, Docotic, or similar external library
        Dim pageImages = Await RenderPdfToImages(pdfPath)

        ' Step 2: Initialize RapidOcr with 4 model files (must already be downloaded)
        Using engine As New RapidOcrEngine(New RapidOcrOptions With {
            .DetModelPath = "models/det.onnx",
            .ClsModelPath = "models/cls.onnx",
            .RecModelPath = "models/rec_en.onnx",
            .KeysPath = "models/en_keys.txt"
        })

            ' Step 3: OCR each image individually
            Dim results As New List(Of String)()
            For Each pageImage In pageImages
                Dim result = engine.Run(pageImage)
                results.Add(String.Join(vbLf, result.TextBlocks.Select(Function(b) b.Text)))
            Next

            ' Step 4: Combine manually — page structure not preserved
            Return String.Join(vbLf & vbLf, results)
        End Using
    End Function

    ' Placeholder for the RenderPdfToImages method
    Private Async Function RenderPdfToImages(pdfPath As String) As Task(Of List(Of Object))
        ' Implementation goes here
        Return New List(Of Object)()
    End Function
End Class
$vbLabelText   $csharpLabel

Isso adiciona mais uma dependência do NuGet , mais um conjunto de APIs para aprender e pressão de memória devido à necessidade de manter bitmaps renderizados na memória para documentos grandes. A geração de PDFs pesquisáveis ​​— que consiste em sobrepor o texto reconhecido como uma camada OCR oculta sobre a digitalização original — não é possível em nenhum ponto desse processo.

Abordagem IronOCR

O IronOCR lê PDFs nativamente. O mesmo método IronTesseract.Read() aceita tanto caminhos de imagem quanto caminhos de PDF:

// IronOCR: direct PDF OCR — no conversion, no external library
var text = new IronTesseract().Read("scanned-document.pdf").Text;

// PDF protegido por senha — one parameter
using var input = new OcrInput();
input.LoadPdf("encrypted.pdf", Password: "secret");
var result = new IronTesseract().Read(input);

// PDF pesquisável — one method call on the result
var result = new IronTesseract().Read("scanned.pdf");
result.SaveAsSearchablePdf("searchable-output.pdf");
// IronOCR: direct PDF OCR — no conversion, no external library
var text = new IronTesseract().Read("scanned-document.pdf").Text;

// PDF protegido por senha — one parameter
using var input = new OcrInput();
input.LoadPdf("encrypted.pdf", Password: "secret");
var result = new IronTesseract().Read(input);

// PDF pesquisável — one method call on the result
var result = new IronTesseract().Read("scanned.pdf");
result.SaveAsSearchablePdf("searchable-output.pdf");
Imports IronOcr

' IronOCR: direct PDF OCR — no conversion, no external library
Dim text As String = New IronTesseract().Read("scanned-document.pdf").Text

' PDF protegido por senha — one parameter
Using input As New OcrInput()
    input.LoadPdf("encrypted.pdf", Password:="secret")
    Dim result = New IronTesseract().Read(input)
End Using

' PDF pesquisável — one method call on the result
Dim result2 = New IronTesseract().Read("scanned.pdf")
result2.SaveAsSearchablePdf("searchable-output.pdf")
$vbLabelText   $csharpLabel

O guia de entrada de PDF aborda a seleção de páginas, o gerenciamento de senhas e o processamento de várias páginas. O guia prático de PDF pesquisável demonstra como criar uma saída com nível de conformidade que permanece visualmente idêntica à digitalização original, adicionando ao mesmo tempo uma camada de pesquisa de texto completo. Para equipes que desenvolvem fluxos de trabalho de arquivamento de documentos, esse formato de saída é o objetivo final — e não requer nenhuma dependência adicional além do próprio pacote IronOCR.

Prontidão para a Produção e Maturidade da Comunidade

Abordagem RapidOCR .NET

RapidOCR .NET é um projeto mais recente. Seu repositório no GitHub tem um número limitado de estrelas e de contribuições em comparação com bibliotecas OCR .NET já estabelecidas. O Stack Overflow tem cobertura mínima. Quando surgem casos extremos em produção — orientações de imagem incomuns, conjuntos de caracteres específicos, conflitos de versão do ONNX Runtime, configuração do modo GPU — o principal recurso é o rastreador de problemas do GitHub . Não existe um nível de suporte comercial, nenhum SLA de manutenção e nenhum prazo de resposta garantido.

A cadeia de dependência introduz riscos adicionais. O RapidOCR .NET depende das versões de modelo do projeto RapidOCR. O projeto RapidOCR depende da arquitetura de modelo do PaddleOCR. Uma alteração incompatível em qualquer camada dessa cadeia exige que o mantenedor do wrapper .NET responda antes que os usuários possam atualizar — e o wrapper é mantido por um único desenvolvedor da comunidade, sem nenhum apoio organizacional.

A implementação também revela problemas de versionamento do ONNX Runtime. O pacote Microsoft.ML.OnnxRuntime teve alterações significativas entre versões menores, e os binários nativos que o acompanham são específicos para plataforma. Uma imagem de contêiner construída em linux/amd64 não pode usar os mesmos binários ONNX Runtime que uma construída em linux/arm64. Cada destino de implantação requer validação.

Abordagem IronOCR

O IronOCR está em desenvolvimento comercial ativo há mais de uma década. A biblioteca é distribuída sob uma API versionada com alterações incompatíveis documentadas, lançamentos regulares alinhados com os lançamentos do SDK .NET e suporte por e-mail incluído em todas as licenças comerciais. As equipes que desenvolvem pipelines de produção recebem um canal de suporte direto, em vez de uma fila de problemas do GitHub monitorada por um desenvolvedor em seu tempo livre.

O design de pacote único elimina completamente o ciclo de validação de implantação. A etapa de restauração do NuGet é determinística: a mesma versão do pacote produz a mesma instalação funcional no Windows, Linux e macOS, sem a necessidade de gerenciamento de binários nativos específicos da plataforma. Para implantações no AWS Lambda e no Azure , o pacote de funções contém apenas o aplicativo publicado — sem arquivos auxiliares de modelo, sem montagens de volume e sem lógica de validação de inicialização.

O exemplo de digitalização de baixa qualidade e o guia de correção da qualidade da imagem abordam os cenários de pré-processamento que geralmente exigem código personalizado em fluxos de trabalho baseados em ONNX — digitalizações distorcidas, fundos ruidosos, documentos de baixo contraste — sem qualquer código além da seleção dos métodos de filtro apropriados.

Referência de Mapeamento de API

RapidOCR.NET Equivalente de IronOCR
new RapidOcrEngine(new RapidOcrOptions { ... }) new IronTesseract()
RapidOcrOptions.DetModelPath Não é necessário — incluído
RapidOcrOptions.ClsModelPath Não é necessário — incluído
RapidOcrOptions.RecModelPath Não é necessário — incluído
RapidOcrOptions.KeysPath Não é necessário — incluído
RapidOcrOptions.UseGpu Não existe equivalente direto (otimizado internamente para CPU).
RapidOcrOptions.NumThreads IronTesseract (seguro para threads; usar Parallel.ForEach)
engine.Run(imagePath) new IronTesseract().Read(imagePath)
result.TextBlocks result.Words / result.Lines / result.Paragraphs
result.TextBlocks[i].Text result.Words[i].Text
result.TextBlocks[i].Confidence result.Words[i].Confidence
result.TextBlocks[i].BoundingBox result.Words[i].X, .Y, .Width, .Height
string.Join("\n", result.TextBlocks.Select(b => b.Text)) result.Text
Troca manual de arquivos de idioma ocr.Language = OcrLanguage.French
PDF para imagem + engine.Run() new IronTesseract().Read("doc.pdf")
Não disponível result.SaveAsSearchablePdf("output.pdf")
Não disponível result.SaveAsHocrFile("output.hocr")
engine.Dispose() using var ocr = new IronTesseract()

Quando as equipes consideram migrar do RapidOCR .NET para o IronOCR

Quando o gerenciamento de arquivos de modelo se torna um gargalo de implantação

As equipes que começaram a usar o RapidOCR .NET para um protótipo geralmente se deparam com a dificuldade de gerenciar os arquivos de modelo ao tentar colocá-lo em produção. Os quatro arquivos de modelo precisam ser versionados, rastreados, copiados durante a compilação, incluídos nos artefatos de CI, implantados em ambiente de teste e, finalmente, em produção — tudo isso separadamente do grafo de dependências do NuGet . Em uma equipe pequena, essa sobrecarga operacional é absorvida uma única vez e esquecida. Em uma equipe que mantém múltiplos serviços, múltiplos ambientes, e múltiplos pipelines CI, a criação de scripts personalizados em torno da distribuição de arquivos de modelo acumula-se em um custo significativo de manutenção. Quando um companheiro de equipe pergunta "por que temos esta pasta models/ no repositório e o que acontece se eu a deletar?" e a resposta requer uma explicação de cinco minutos, geralmente é quando a avaliação começa. O IronOCR elimina toda a complexidade de gerenciamento de modelos: nada para baixar separadamente, nada para copiar na integração contínua, nada para validar na inicialização.

Quando um documento chega em um idioma não suportado

A falta de cobertura linguística é um impedimento definitivo, não um problema de configuração. Se uma organização recebe contratos alemães, faturas francesas, pedidos de compra russos ou correspondências em árabe, o RapidOCR .NET não oferece um caminho para esses documentos — não se trata de "precisão limitada", mas sim de ausência de modelo e, consequentemente, de resultado. As equipes que inicialmente escolheram o RapidOCR .NET para um caso de uso focado em CJK descobrem essa limitação na primeira vez que precisam processar um documento fora desse conjunto. Os recursos de idioma do IronOCR abrangem mais de 125 idiomas instaláveis ​​via NuGet, de modo que o escopo do que o pipeline de OCR pode lidar se expande sem alterar o código do aplicativo — basta adicionar o pacote de idiomas e alterar uma propriedade de enumeração.

Quando o aplicativo precisa de entrada ou saída de PDF

Uma categoria significativa de OCR em documentos comerciais envolve PDFs: contratos digitalizados, faturas arquivadas, formulários enviados por fax e convertidos para PDF por impressoras multifuncionais. O RapidOCR .NET não consegue ler nenhum deles sem uma biblioteca de renderização de PDF separada, código de conversão personalizado e gerenciamento de memória para bitmaps do tamanho de uma página. As equipes que desenvolvem fluxos de trabalho de ingestão de documentos descobrem rapidamente que a pilha RapidOCR .NET requer pelo menos duas bibliotecas — uma para renderização de PDF e outra para OCR — cada uma com seus próprios ciclos de atualização e superfícies de compatibilidade. O IronOCR lida com ambos em um único pacote. A capacidade de também produzir PDFs pesquisáveis, transformando um arquivo digitalizado em um índice pesquisável, está totalmente fora do escopo do RapidOCR .NET e é uma chamada de método única com o IronOCR. As equipes que desenvolvem aplicativos de gerenciamento de documentos com requisitos de conformidade frequentemente citam a possibilidade de busca em PDF como o recurso decisivo.

Quando surgem incidentes de produção sem um caminho de suporte definido

Os projetos comunitários dependem da disponibilidade de colaboradores. Quando uma implementação de produção do RapidOCR .NET se depara com um caso extremo inédito — um conflito específico de versão do ONNX Runtime, uma falha na inferência do modelo em um formato de imagem incomum, um vazamento de memória sob carga sustentada — o caminho de suporte é um problema relatado no GitHub e aguardando resolução. Para equipes com obrigações de SLA ou fluxos de processamento de documentos críticos para os negócios, esse não é um modelo viável de resposta a incidentes. A licença comercial do IronOCR inclui suporte direto por e-mail, oferecendo às equipes um ponto de contato real caso algo dê errado na sexta-feira à noite, antes do prazo final na segunda-feira.

Quando o projeto ultrapassa as premissas do protótipo

O RapidOCR .NET é uma escolha razoável para uma prova de conceito experimental: gratuito, sem necessidade de negociar licenças e rápido de instalar, além da configuração do modelo. Quando essa prova de conceito se torna um recurso de produção, as limitações que eram aceitáveis ​​em um laboratório — sem suporte a PDF, cobertura linguística limitada, gerenciamento manual do modelo, sem suporte comercial — tornam-se obstáculos. O processo de migração do RapidOCR .NET para o IronOCR é mecânico: remova os pacotes, exclua o diretório de modelos, remova as regras de cópia do MSBuild, substitua o bloco de inicialização do mecanismo por um único construtor de mecanismo OCR sem argumentos e desbloqueie simultaneamente a entrada de PDF, a cobertura de 125 idiomas, o pré-processamento automático e a saída pesquisável.

Considerações Comuns de Migração

Substituindo a inicialização do motor

A mudança de código mais direta é substituir o bloco de inicialização RapidOcrEngine por uma instanciação IronTesseract. O objeto de configuração de quatro caminhos desaparece completamente:

// Before: RapidOcrNet — engine needs all 4 paths populated
var engine = new RapidOcrEngine(new RapidOcrOptions
{
    DetModelPath = "models/det.onnx",
    ClsModelPath = "models/cls.onnx",
    RecModelPath = "models/rec_en.onnx",
    KeysPath     = "models/en_keys.txt"
});
var result = engine.Run(imagePath);
var text = string.Join("\n", result.TextBlocks
    .OrderBy(b => b.BoundingBox.Top)
    .Select(b => b.Text));

// After:IronOCR— no configuration required
IronOcr.License.LicenseKey = "YOUR-LICENSE-KEY";
var text = new IronTesseract().Read(imagePath).Text;
// Before: RapidOcrNet — engine needs all 4 paths populated
var engine = new RapidOcrEngine(new RapidOcrOptions
{
    DetModelPath = "models/det.onnx",
    ClsModelPath = "models/cls.onnx",
    RecModelPath = "models/rec_en.onnx",
    KeysPath     = "models/en_keys.txt"
});
var result = engine.Run(imagePath);
var text = string.Join("\n", result.TextBlocks
    .OrderBy(b => b.BoundingBox.Top)
    .Select(b => b.Text));

// After:IronOCR— no configuration required
IronOcr.License.LicenseKey = "YOUR-LICENSE-KEY";
var text = new IronTesseract().Read(imagePath).Text;
Imports System.Linq

' Before: RapidOcrNet — engine needs all 4 paths populated
Dim engine = New RapidOcrEngine(New RapidOcrOptions With {
    .DetModelPath = "models/det.onnx",
    .ClsModelPath = "models/cls.onnx",
    .RecModelPath = "models/rec_en.onnx",
    .KeysPath = "models/en_keys.txt"
})
Dim result = engine.Run(imagePath)
Dim text = String.Join(vbCrLf, result.TextBlocks _
    .OrderBy(Function(b) b.BoundingBox.Top) _
    .Select(Function(b) b.Text))

' After: IronOCR— no configuration required
IronOcr.License.LicenseKey = "YOUR-LICENSE-KEY"
Dim text = New IronTesseract().Read(imagePath).Text
$vbLabelText   $csharpLabel

A coleção result.TextBlocks com sua cadeia manual OrderBy e Select colapsa para result.Text. Para aplicações que precisam dos dados de caixa delimitadora que TextBlocks forneceu, result.Words expõe as mesmas coordenadas por palavra e valores de confiança através de uma API estruturada documentada em como ler resultados.

Removendo a infraestrutura de arquivos do modelo

Após substituir o código, exclua o diretório models/, remova as entradas <Content> do MSBuild que copiavam os arquivos de modelo na compilação, e remova qualquer lógica de validação de inicialização que verificava arquivos ausentes. Esses itens não são necessários — o IronOCR envia seus dados internamente. Em pipelines de CI/CD, remova quaisquer etapas que busquem ou armazenem em cache arquivos de modelo. O guia de entrada de imagem aborda padrões de tratamento de entrada para os cenários comuns de caminho de arquivo, fluxo e matriz de bytes que o código RapidOCR .NET existente provavelmente utiliza.

Lidando com imagens de baixa qualidade

Os modelos ONNX do RapidOCR.NET aplicam pré-processamento interno durante a inferência, mas a biblioteca não expõe nenhuma API de pré-processamento para quem a utiliza. Se o código existente aplicar manipulação de imagem antes de passar para engine.Run(), esse código foi escrito contra uma biblioteca de imagem separada.IronOCR expõe uma API de pré-processamento diretamente em OcrInput:

using var input = new OcrInput();
input.LoadImage("low-quality-scan.jpg");
input.Deskew();           // Correct skewed scans
input.DeNoise();          // Remove scanner noise
input.Contrast();         // Enhance contrast
input.Binarize();         // Convert to black/white
input.EnhanceResolution(300);

var result = new IronTesseract().Read(input);
Console.WriteLine($"Confidence: {result.Confidence}%");
using var input = new OcrInput();
input.LoadImage("low-quality-scan.jpg");
input.Deskew();           // Correct skewed scans
input.DeNoise();          // Remove scanner noise
input.Contrast();         // Enhance contrast
input.Binarize();         // Convert to black/white
input.EnhanceResolution(300);

var result = new IronTesseract().Read(input);
Console.WriteLine($"Confidence: {result.Confidence}%");
Imports IronOcr

Using input As New OcrInput()
    input.LoadImage("low-quality-scan.jpg")
    input.Deskew()           ' Correct skewed scans
    input.DeNoise()          ' Remove scanner noise
    input.Contrast()         ' Enhance contrast
    input.Binarize()         ' Convert to black/white
    input.EnhanceResolution(300)

    Dim result = New IronTesseract().Read(input)
    Console.WriteLine($"Confidence: {result.Confidence}%")
End Using
$vbLabelText   $csharpLabel

Os tutoriais sobre correção da orientação da imagem e configurações de DPI abordam as duas questões de pré-processamento que mais comumente afetam a precisão em documentos digitalizados. Pontuações de confiança estão disponíveis em result.Confidence e por palavra via result.Words[i].Confidence.

Adicionando suporte a PDF

Qualquer código que realizava conversão de PDF para imagem antes de chamar engine.Run() pode ser excluído sem cerimônia. IronTesseract.Read() aceita um caminho de PDF diretamente. Remova a dependência da biblioteca de renderização de PDF juntamente com o código do pipeline de conversão — isso representa uma redução líquida de dependências, não um aumento.

Funcionalidades adicionais do IronOCR

Além dos recursos abordados nas seções de comparação, o IronOCR oferece funcionalidades que não têm equivalente no RapidOCR .NET:

  • OCR baseado em região: Extrai texto de uma área específica de uma imagem sem processar a página inteira. O guia de OCR baseado em região e o exemplo de corte de retângulo cobrem o uso de CropRectangle para extração de cabeçalhos de fatura, direcionamento de campos de formulário, e cenários de documento parcial similares.
  • Leitura de código de barras durante OCR: Defina ocr.Configuration.ReadBarCodes = true para extrair valores de código de barras junto ao texto em uma única passagem. O guia de OCR com código de barras e exemplo de OCR com código de barras mostram como result.Barcodes se integra com a saída padrão do OCR.
  • Tipos de documentos especializados: O IronOCR fornece orientações testadas para passaportes , placas de veículos , texto manuscrito e extração de tabelas .
  • OCR assíncrono: O guia de OCR assíncrono mostra padrões de processamento não bloqueante para manipuladores de requisições ASP.NET e serviços em segundo plano.
  • hOCR e exportação estruturada: o IronOCR pode salvar os resultados do OCR como XML hOCR, preservando as caixas delimitadoras em nível de palavra em um formato padrão compatível com ferramentas de processamento de documentos subsequentes. O guia de exportação hOCR aborda as opções de formato de saída.

Compatibilidade com .NET e Preparação para o Futuro

O IronOCR é compatível com .NET 8, .NET 9, .NET Standard 2.0 e .NET Framework 4.6.2 e versões posteriores, abrangendo todo o espectro de ambientes .NET Enterprise atuais. A biblioteca é acompanhada por binários cross-platform para Windows x64/x86, Linux x64, macOS x64 e macOS ARM (Apple Silicon), com imagens de contêiner testadas contra imagens base mcr.microsoft.com/dotnet/aspnet padrão. A compatibilidade do RapidOCR.NET é limitada pela matriz de suporte de plataforma do ONNX Runtime, que cobre alvos semelhantes mas requer seleção de pacote NuGet específico para plataforma (Microsoft.ML.OnnxRuntime para CPU vs. Microsoft.ML.OnnxRuntime.Gpu para CUDA) e não garante a mesma simplicidade de binário-em-pacote. O IronOCR mantém a compatibilidade com o .NET 10 (previsto para novembro de 2026) por meio de seu ciclo de lançamentos ativo, sem necessidade de alterações no código do aplicativo quando o SDK é atualizado.

Conclusão

O RapidOCR .NET resolve bem um problema específico: executar modelos PaddleOCR otimizados para CPU em .NET sem exigir todo o ecossistema Python. Para equipes que processam exclusivamente imagens em chinês ou inglês em um ambiente controlado, onde os arquivos de modelo podem ser gerenciados manualmente, oferece uma precisão razoável gratuitamente. Essa é toda a extensão de sua aplicação na produção.

A sobrecarga de gerenciamento do modelo é a restrição determinante. Quatro arquivos separados, provenientes de um repositório externo do GitHub , implantados juntamente com o aplicativo, validados em tempo de execução e atualizados manualmente sempre que o projeto original lança novos pesos — isso não é uma preocupação para um protótipo. Para um serviço de produção com pipelines de CI/CD, implantações em múltiplos ambientes e vários desenvolvedores, esse é o tipo de atrito operacional que silenciosamente consome horas ao longo de um trimestre de engenharia. A limitação na cobertura de idiomas agrava o problema: no momento em que uma exigência comercial introduz um idioma que não seja CJK, o RapidOCR .NET deixa de ser uma opção viável.

O IronOCR começa onde as limitações do RapidOCR.NET começam. Um único pacote NuGet , sem arquivos externos, mais de 125 idiomas, entrada nativa em PDF e saída pesquisável em PDF, pré-processamento automático, extração estruturada de resultados e suporte comercial por meio de uma API versionada. A licença $999 Lite é um custo único sem medição por transação ou requisitos de renovação anual. Equipes que calcularam o custo das horas de engenharia gastas com gerenciamento de modelos, soluções alternativas para conversão de PDF e escalonamento de problemas com idiomas não suportados constataram, consistentemente, que a biblioteca comercial é mais vantajosa do que a alternativa gratuita.

Para equipes que já utilizam o RapidOCR .NET em produção ou que estão avaliando sua utilização em um novo projeto, a central de tutoriais e guias práticos do IronOCR oferece um ponto de partida útil. A migração é mecânica, o código é mais simples e a superfície operacional se reduz a uma única referência de pacote.

ObserveBitmiracle Docotic.Pdf, PaddleOCR, PdfPig, RapidOCR e Tesseract são marcas registradas de seus respectivos proprietários. Este site não é afiliado, endossado ou patrocinado por Baidu, Bit Miracle, Google, PaddlePaddle, RapidOCR ou UglyToad. 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.

Perguntas frequentes

O que é o RapidOCR.NET?

RapidOCR.NET é uma solução de OCR usada por desenvolvedores e empresas para extrair texto de imagens e documentos. É uma das várias opções de OCR avaliadas juntamente com o IronOCR para desenvolvimento de aplicações .NET.

Como o IronOCR se compara ao RapidOCR.NET para desenvolvedores .NET?

IronOCR é uma biblioteca OCR .NET nativa do NuGet que utiliza o IronTesseract como mecanismo principal. Comparada ao RapidOCR.NET, oferece implantação mais simples (sem instaladores de SDK), preço fixo e uma API C# limpa, sem interoperabilidade COM ou dependências de nuvem.

O IronOCR é mais fácil de configurar do que o RapidOCR.NET?

O IronOCR é instalado por meio de um único pacote NuGet. Não há instaladores de SDK, arquivos de licença para copiar, componentes COM para registrar ou binários de tempo de execução separados para gerenciar. Todo o mecanismo de OCR está incluído no pacote.

Quais são as diferenças de precisão entre o RapidOCR.NET e o IronOCR?

O IronOCR alcança alta precisão de reconhecimento para documentos comerciais padrão, faturas, recibos e formulários digitalizados. Para documentos muito degradados ou com escritas incomuns, a precisão varia de acordo com a qualidade da fonte. O IronOCR inclui filtros de pré-processamento de imagem para melhorar o reconhecimento em entradas de baixa qualidade.

O IronOCR suporta extração de texto de PDFs?

Sim. O IronOCR extrai texto tanto de PDFs nativos quanto de imagens digitalizadas de PDFs em uma única chamada. Ele também suporta arquivos TIFF com várias páginas, imagens e fluxos de dados. Para PDFs digitalizados, o OCR é aplicado página por página, com objetos de resultado por página.

Como se compara o licenciamento do RapidOCR.NET ao do IronOCR?

O IronOCR utiliza uma licença perpétua com preço fixo, sem cobranças por página ou por digitalização. Organizações que processam grandes volumes de documentos pagam o mesmo valor de licença, independentemente do volume. Detalhes e preços por volume estão disponíveis na página de licenciamento do IronOCR.

Quais idiomas o IronOCR suporta?

O IronOCR suporta 127 idiomas através de pacotes de idiomas NuGet separados. Adicionar um idioma requer um único comando 'dotnet add package IronOcr.Languages.{Idioma}'. Não é necessário inserir arquivos manualmente nem configurar caminhos.

Como faço para instalar o IronOCR em um projeto .NET ?

Instale via NuGet: 'Install-Package IronOcr' no Console do Gerenciador de Pacotes ou 'dotnet add package IronOcr' na CLI. Pacotes de idiomas adicionais são instalados da mesma forma. Não é necessário instalar o SDK nativo.

O IronOCR é adequado para Docker e implantações em contêineres, ao contrário do RapidOCR.NET?

Sim. O IronOCR funciona em contêineres Docker por meio de seu pacote NuGet. A chave de licença é definida por meio de uma variável de ambiente. Não são necessários arquivos de licença, caminhos de SDK ou montagens de volume para o próprio mecanismo de OCR.

Posso experimentar o IronOCR antes de comprar, em comparação com o RapidOCR.NET?

Sim. O modo de avaliação do IronOCR processa documentos e retorna resultados de OCR com uma marca d'água sobreposta. Você pode verificar a precisão em seus próprios documentos antes de adquirir uma licença.

O IronOCR suporta leitura de código de barras juntamente com extração de texto?

O IronOCR concentra-se na extração de texto e OCR. Para leitura de código de barras, a Iron Software fornece o IronBarcode como uma biblioteca complementar. Ambos estão disponíveis individualmente ou como parte do pacote Iron Suite.

É fácil migrar do RapidOCR.NET para o IronOCR?

A migração do RapidOCR.NET para o IronOCR normalmente envolve a substituição das sequências de inicialização pela instanciação do IronTesseract, a remoção do gerenciamento do ciclo de vida COM e a atualização das chamadas de API. A maioria das migrações reduz significativamente a complexidade do código.

Kannaopat Udonpant
Engenheiro de Software
Antes de se tornar Engenheiro de Software, Kannapat concluiu um doutorado em Recursos Ambientais pela Universidade de Hokkaido, no Japão. Durante o doutorado, Kannapat também integrou o Laboratório de Robótica Veicular, que faz parte do Departamento de Engenharia de Bioprodução. Em 2022, ele utilizou suas habilidades ...
Leia mais

Equipe de Suporte Iron

Estamos online 24 horas por dia, 5 dias por semana.
Bater papo
E-mail
Liga para mim