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

MODI OCR C# vs. IronOCR: Escolhendo a Biblioteca Certa de Reconhecimento Óptico de Caracteres em C#

Microsoft Office Document Imaging (MODI) era outrora um componente OCR incluído no MS Office 2003 e 2007, permitindo que os desenvolvedores extraíssem texto de imagens digitalizadas diretamente através de um modelo de objeto baseado em COM. Por anos, a classe MODI.Document alimentou inúmeros projetos de digitalização de documentos, convertendo arquivos de imagem TIFF e BMP em texto legível por máquina dentro de soluções do Visual Studio.

No entanto, a história do MODI tem um ponto importante: a Microsoft o removeu do Office 2010 e das versões posteriores, deixando os desenvolvedores a depender de instalações antigas do Office ou instaladores autônomos apenas para manter sua funcionalidade OCR viva. Para qualquer projeto moderno do .NET visando implantação multiplataforma, ambientes de nuvem ou versões recentes do Windows, o MODI apresenta sérios atritos.

Este artigo examina como oMODI OCRC# se compara ao IronOCR, uma biblioteca de reconhecimento óptico de caracteres .NET desenvolvida especificamente, através da implementação de código, recursos, suporte a plataformas e licenciamento. Seja mantendo código legado ou iniciando um novo projeto, os detalhes aqui ajudarão a informar a escolha certa.

Experimente oIronOCRgratuitamente por 30 dias para seguir junto com os exemplos de código abaixo.

Como a Comparação se Desdobra de Relance?

Categoria MODI OCR IronOCR
Arquitetura Principal Interoperação COM; requer referência do DLL Microsoft Office Document Imaging Biblioteca pura .NET; Motor Tesseract 5 otimizado para C#
Suporte da plataforma Apenas Windows; requer Office 2003/2007 instalado no computador Windows, Linux, macOS, Azure, Docker, iOS, Android
Formatos de Imagem TIFF, MDI, BMP TIFF, PNG, JPEG, BMP, GIF, PDF, imagens de múltiplas páginas
Suporte de Idioma ~22 idiomas via parâmetro miLANG 125+ idiomas via pacotes de idioma NuGet
Precisão do OCR Alta em documentos limpos, com fonte padrão 99,8%+ com filtros de correção de imagem automáticos
Opções de Saída Texto simples do objeto Layout Texto simples, PDF pesquisável, dados estruturados (páginas, linhas, palavras, códigos de barras)
Instalação Instalador do Office + referência COM no Solution Explorer Pacote NuGet: Install-Package IronOcr
Desenvolvimento Ativo Descontinuado após o Office 2007 Mantido ativamente com atualizações regulares
Licenciamento Requer licença qualificada do Microsoft Office Licenças perpétuas a partir de $749; teste gratuito de 30 dias
Apoiar Somente fóruns da comunidade Suporte técnico direto via email, chat ao vivo e telefone

How Does Microsoft Office Document Imaging Perform OCR in C#?

MODI realiza reconhecimento ótico de caracteres (OCR) através de um modelo de objeto baseado em COM. O processo começa criando um objeto MODI.Document, carregando um caminho de arquivo de imagem e invocando o método OCR para analisar imagens e identificar caracteres. Após a conclusão do processo de OCR, texto e informações de layout estão acessíveis através dos objetos Image e Layout de cada página.

Para usar MODI em um projeto do Visual Studio, uma referência à Microsoft Office Document Imaging Type Library deve ser adicionada. No Solution Explorer, clique com o botão direito na pasta Referências, selecione a aba COM e escolha a versão apropriada do MODI (11.0 para Office 2003 ou 12.0 para Office 2007).

// MODI OCR: Extracting text from a scanned TIFF document
private string ExtractTextFromImage(string path)
{
    string extractedText = "";
    MODI.Document doc = new MODI.Document();
    try
    {
        // Create the document object from the image file path
        doc.Create(path);
        // Run optical character recognition with English language
        doc.OCR(MODI.MiLANGUAGES.miLANG_ENGLISH, true, true);
        // Access the first page image and retrieve recognized text
        MODI.Image modiImage = (MODI.Image)doc.Images[0];
        extractedText = modiImage.Layout.Text;
    }
    catch (Exception ex)
    {
        // Handle OCR exceptions for unsupported or corrupted image files
        string message = ex.Message;
        Console.WriteLine(message);
    }
    finally
    {
        doc.Close(false);
        System.Runtime.InteropServices.Marshal.ReleaseComObject(doc);
    }
    return extractedText;
}
// MODI OCR: Extracting text from a scanned TIFF document
private string ExtractTextFromImage(string path)
{
    string extractedText = "";
    MODI.Document doc = new MODI.Document();
    try
    {
        // Create the document object from the image file path
        doc.Create(path);
        // Run optical character recognition with English language
        doc.OCR(MODI.MiLANGUAGES.miLANG_ENGLISH, true, true);
        // Access the first page image and retrieve recognized text
        MODI.Image modiImage = (MODI.Image)doc.Images[0];
        extractedText = modiImage.Layout.Text;
    }
    catch (Exception ex)
    {
        // Handle OCR exceptions for unsupported or corrupted image files
        string message = ex.Message;
        Console.WriteLine(message);
    }
    finally
    {
        doc.Close(false);
        System.Runtime.InteropServices.Marshal.ReleaseComObject(doc);
    }
    return extractedText;
}
' MODI OCR: Extracting text from a scanned TIFF document
Private Function ExtractTextFromImage(ByVal path As String) As String
    Dim extractedText As String = ""
    Dim doc As New MODI.Document()
    Try
        ' Create the document object from the image file path
        doc.Create(path)
        ' Run optical character recognition with English language
        doc.OCR(MODI.MiLANGUAGES.miLANG_ENGLISH, True, True)
        ' Access the first page image and retrieve recognized text
        Dim modiImage As MODI.Image = CType(doc.Images(0), MODI.Image)
        extractedText = modiImage.Layout.Text
    Catch ex As Exception
        ' Handle OCR exceptions for unsupported or corrupted image files
        Dim message As String = ex.Message
        Console.WriteLine(message)
    Finally
        doc.Close(False)
        System.Runtime.InteropServices.Marshal.ReleaseComObject(doc)
    End Try
    Return extractedText
End Function
$vbLabelText   $csharpLabel

Esta função demonstra o fluxo de trabalho padrão do MODI: o método Create carrega o arquivo, o método OCR realiza o reconhecimento usando um idioma especificado, e Layout.Text fornece a string extraída. A declaração retorno extractedText entrega a saída para o chamador.

Embora o MODI ofereça precisão adequada para imagens de documentos nítidas e de alta resolução, ele apresenta limitações notáveis. Ele suporta apenas os formatos TIFF, MDI e BMP. Requer uma instalação do Microsoft Office em cada computador que executa o aplicativo, incluindo servidores de produção. Não há suporte embutido para digitalização de imagens de baixa qualidade, correção de inclinação ou redução de ruído digital. Além disso, como o MODI depende do Interop COM, não pode ser usado em .NET Core, .NET 5+ ou qualquer cenário multiplataforma, tornando-o inadequado para alvos de implantação modernos como contêineres Docker ou Azure App Services.

Como uma biblioteca moderna .NET lida com funcionalidade de OCR?

IronOCR substitui a abordagem COM Interop por uma API pura .NET que instala através de um único pacote NuGet. A classe IronTesseract envolve um motor Tesseract 5 fortemente otimizado, e a classe OcrInput lida com carregamento de imagens, pré-processamento e suporte a múltiplos formatos, tudo sem exigir Microsoft Office ou qualquer dependência externa no computador de destino.

using IronOcr;
// Create the IronTesseract OCR engine object
var ocr = new IronTesseract();
using var input = new OcrInput();
// Load images in any common format — PNG, JPEG, TIFF, BMP, GIF, or PDF
input.LoadImage("scanned-document.tiff");
// Apply filters to correct low-quality scans automatically
input.Deskew();   // Straighten skewed page images
input.DeNoise();  // Remove digital noise from scanning artifacts
// Read text from the processed document
var result = ocr.Read(input);
// Output plain text
Console.WriteLine(result.Text);
// Save as a searchable PDF for document management system integration
result.SaveAsSearchablePdf("output-searchable.pdf");
using IronOcr;
// Create the IronTesseract OCR engine object
var ocr = new IronTesseract();
using var input = new OcrInput();
// Load images in any common format — PNG, JPEG, TIFF, BMP, GIF, or PDF
input.LoadImage("scanned-document.tiff");
// Apply filters to correct low-quality scans automatically
input.Deskew();   // Straighten skewed page images
input.DeNoise();  // Remove digital noise from scanning artifacts
// Read text from the processed document
var result = ocr.Read(input);
// Output plain text
Console.WriteLine(result.Text);
// Save as a searchable PDF for document management system integration
result.SaveAsSearchablePdf("output-searchable.pdf");
Imports IronOcr

' Create the IronTesseract OCR engine object
Dim ocr As New IronTesseract()
Using input As New OcrInput()
    ' Load images in any common format — PNG, JPEG, TIFF, BMP, GIF, or PDF
    input.LoadImage("scanned-document.tiff")
    ' Apply filters to correct low-quality scans automatically
    input.Deskew()   ' Straighten skewed page images
    input.DeNoise()  ' Remove digital noise from scanning artifacts
    ' Read text from the processed document
    Dim result = ocr.Read(input)
    ' Output plain text
    Console.WriteLine(result.Text)
    ' Save as a searchable PDF for document management system integration
    result.SaveAsSearchablePdf("output-searchable.pdf")
End Using
$vbLabelText   $csharpLabel

Saída do IronOCR

MODI OCR C# vs. IronOCR: Escolhendo a Biblioteca de Reconhecimento Óptico de Caracteres Correta em C#: Imagem 1 - Exemplo de saída do IronOCR

O código acima mostra oIronOCRprocessando uma digitalização TIFF através de um pipeline completo de OCR em apenas algumas linhas. O objeto OcrInput aceita virtualmente qualquer arquivo de imagem ou documento PDF, enquanto Deskew() e DeNoise() corrigem os artefatos comuns de digitalização que causariam resultados ruins no MODI. O método Read retorna um objeto OcrResult contendo não apenas texto simples, mas dados estruturados organizados por página, parágrafo, linha e palavra, cada um com pontuações de confiança e informações de coordenadas

Para projetos que processam faturas, formulários ou arquivos TIFF de múltiplas páginas, oIronOCRtambém inclui recursos de visão computacional que localizam automaticamente regiões de texto, leitura de código de barras e QR no mesmo passe, e suporte para 125+ idiomas instaláveis como pacotes NuGet.

Quais são as principais diferenças ao extrair texto de imagens?

A verdadeira diferença entre essas duas opções aparece no momento em que você para de usar arquivos de amostra "perfeitos" e começa a lidar com documentos do mundo real. Estamos falando sobre aquelas digitalizações bagunçadas com manchas de café, páginas inclinadas ou fotos de baixa resolução tiradas de um smartphone.

MODI foi construído para uma era diferente, especificamente para documentos de escritório limpos e de alto contraste. Se você tem um arquivo TIFF nítido de um scanner de ponta, ele funcionará bem. Mas se a sua imagem estiver ligeiramente girada ou tiver algum "ruído" digital, a precisão do MODI cai drasticamente. Como ele não possui filtros integrados para corrigir esses problemas, você está preso a pré-processar imagens você mesmo usando uma segunda biblioteca como GDI+ ou System.Drawing antes mesmo de começar o processo de OCR. Também é um pouco irritante gerenciar a memória; se você não chamar manualmente o Marshal.ReleaseComObject, provavelmente encontrará vazamentos de memória em produção.

IronOCR faz este trabalho pesado para você desde o primeiro momento. Em vez de escrever código personalizado para limpar uma imagem, você só precisa chamar input.Deskew() ou input.DeNoise(). Esses filtros preparam a imagem para que o mecanismo alcance aquela marca de 99,8% de precisão, mesmo em documentos "feios".

Dica Pro: Se você está migrando do MODI, não apenas troque o código, aproveite os dados de layout. Ao contrário do MODI, que geralmente fornece um grande "bloco" de texto, oIronOCRdivide as coisas em parágrafos e linhas com pontuações de confiança. Isso é um salva-vidas se você está construindo um processador de faturas automatizado e precisa destacar documentos que possam precisar do olhar humano para verificação.

Também vale a pena notar que oIronOCRlida com TIFFs e PDFs de várias páginas como um único objeto. Você não precisa percorrer imagens manualmente como fazia com a coleção antiga MODI.Images. É simplesmente mais rápido, mais limpo e, honestamente, muito menos frágil.

Como os Desenvolvedores Podem Migrar da Abordagem Legada?

Substituir o MODI em um projeto existente é direto. A migração principal envolve trocar a referência COM por um pacote NuGet e atualizar as chamadas de método OCR. Aqui está como o padrão MODI se traduz para o equivalente moderno:

using IronOcr;
// Replace: MODI.Document doc = new MODI.Document();
var ocr = new IronTesseract();
// Replace: doc.Create(filePath); with OcrInput
using var input = new OcrInput();
input.LoadImage("document.tiff");  // Accepts the same TIFF files MODI used
// Replace: doc.OCR(MODI.MiLANGUAGES.miLANG_ENGLISH, true, true);
ocr.Language = OcrLanguage.English;
// Replace: modiImage.Layout.Text
var result = ocr.Read(input);
string text = result.Text;
Console.WriteLine(text);
using IronOcr;
// Replace: MODI.Document doc = new MODI.Document();
var ocr = new IronTesseract();
// Replace: doc.Create(filePath); with OcrInput
using var input = new OcrInput();
input.LoadImage("document.tiff");  // Accepts the same TIFF files MODI used
// Replace: doc.OCR(MODI.MiLANGUAGES.miLANG_ENGLISH, true, true);
ocr.Language = OcrLanguage.English;
// Replace: modiImage.Layout.Text
var result = ocr.Read(input);
string text = result.Text;
Console.WriteLine(text);
Imports IronOcr

Dim ocr As New IronTesseract()

Using input As New OcrInput()
    input.LoadImage("document.tiff") ' Accepts the same TIFF files MODI used
    ocr.Language = OcrLanguage.English
    Dim result = ocr.Read(input)
    Dim text As String = result.Text
    Console.WriteLine(text)
End Using
$vbLabelText   $csharpLabel

O mapeamento é quase um-para-um: MODI.Document.Create se torna OcrInput.LoadImage, o método OCR com parâmetros de idioma se torna ocr.Language além de ocr.Read, e Layout.Text se torna result.Text. Sem referência COM, sem dependência do Office, sem Marshal.ReleaseComObject para gerenciar memória manualmente.

Além da substituição direta, a migração também desbloqueia recursos que simplesmente não existem no MODI: implantação multiplataforma para Linux e macOS, implantação em nuvem e em contêiner, saída PDF pesquisável e o mecanismo completo Tesseract 5 com capacidades de treinamento de fonte personalizada.

Qual Solução Melhor se Encaixa nas Necessidades Modernas de OCR?

MODI cumpriu seu propósito em uma era em que o Microsoft Office era um padrão em todos os computadores com Windows. Para equipes que mantêm sistemas legados que já dependem do Office 2003 ou 2007, pode ainda funcionar, mas representa uma dependência frágil em softwares descontinuados sem caminho adiante.

Para qualquer novo projeto, ou qualquer sistema legado passando por modernização, oIronOCRfornece uma solução completa e ativamente mantida. Elimina completamente a dependência do Office, roda em todas as principais plataformas, lida com imagens de baixa qualidade que iriam confundir a abordagem mais antiga e entrega uma saída de OCR estruturada muito além do texto simples. Com documentação extensa, suporte técnico direto e licenciamento perpétuo a partir de $749, ele é construído para o processamento de documentos em escala de produção.

!{--010011000100100101000010010100100100000101010010010110010101111101000111010001010101010100010111110101001101010100010000010101001001010100010001010100010001011111010101110100100 101010100010010000101111101010000010100100111101000100010101010100001101010100010111110101010001010010010010010010010100000101001100010111110100001001001100010011110100001101001011--}

Pronto para implantar OCR em produção? Explore as opções de licenciamento do IronOCR para encontrar o ajuste certo para sua equipe.

Perguntas frequentes

O que é o Microsoft Office Document Imaging (MODI)?

O Microsoft Office Document Imaging (MODI) era um componente de OCR incluído no MS Office 2003 e 2007. Ele permitia que os desenvolvedores extraíssem texto de imagens usando um modelo de objeto baseado em COM.

Por que eu deveria considerar usar o IronOCR em vez do MODI?

O IronOCR oferece uma biblioteca OCR moderna e totalmente suportada, com recursos aprimorados, maior precisão e melhor integração com aplicativos .NET em comparação com o componente MODI legado.

O IronOCR consegue lidar com arquivos de imagem TIFF e BMP?

Sim, o IronOCR pode processar e extrair texto de vários formatos de imagem, incluindo TIFF e BMP, oferecendo flexibilidade para diferentes necessidades de digitalização de documentos.

Quais são os benefícios de migrar do MODI para o IronOCR?

A migração para o IronOCR proporciona acesso a recursos de OCR mais avançados, atualizações regulares e suporte ativo, garantindo que seus projetos de OCR estejam preparados para o futuro.

O IronOCR é compatível com o Visual Studio?

Sim, o IronOCR é totalmente compatível com o Visual Studio, permitindo uma integração perfeita em seus projetos .NET.

Qual a precisão do IronOCR em comparação com o MODI?

O IronOCR foi projetado para oferecer maior precisão no reconhecimento de texto, especialmente com formatos de imagem modernos e documentos complexos, em comparação com a tecnologia MODI mais antiga.

Que tipo de suporte a IronOCR oferece aos desenvolvedores?

O IronOCR oferece documentação completa, exemplos de código e suporte profissional para auxiliar os desenvolvedores na integração da funcionalidade OCR em seus aplicativos.

Existem exemplos de código disponíveis para o IronOCR?

Sim, o IronOCR fornece diversos exemplos de código para ajudar os desenvolvedores a implementar rapidamente o OCR em seus aplicativos .NET.

O IronOCR pode ser usado para extração de texto em tempo real?

O IronOCR é capaz de extrair texto em tempo real, tornando-o adequado para aplicações que exigem processamento imediato de imagens ou documentos digitalizados.

O IronOCR suporta reconhecimento de texto em vários idiomas?

Sim, o IronOCR suporta reconhecimento de texto multilíngue, permitindo processar documentos em vários idiomas com alta precisão.

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 de ferro

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