Passer au contenu du pied de page
COMPARER à D'AUTRES COMPOSANTS

MODI OCR C# vs. IronOCR : Choisir la bonne bibliothèque de reconnaissance optique de caractères en C#

Microsoft Office Document Imaging (MODI) était autrefois un composant OCR incontournable fourni avec MS Office 2003 et 2007, permettant aux développeurs d'extraire du texte à partir d'images numérisées directement via un modèle objet basé sur COM. Pendant des années, la classe MODI.Document a alimenté d'innombrables projets de numérisation de documents, convertissant les fichiers image TIFF et BMP en texte lisible par machine au sein des solutions Visual Studio.

Cependant, l'histoire de MODI comporte un hic : Microsoft l'a retiré d'Office 2010 et des versions ultérieures, obligeant les développeurs à utiliser des installations Office obsolètes ou des installateurs autonomes pour conserver leurs fonctionnalités OCR. Pour tout projet .NET moderne ciblant un déploiement multiplateforme, des environnements cloud ou les versions récentes de Windows, MODI représente un obstacle majeur.

Cet article examine comment OCR MODI C# se compare à IronOCR, une bibliothèque de reconnaissance optique de caractères .NET spécialement conçue à cet effet, en termes d'implémentation du code, de fonctionnalités, de prise en charge des plateformes et de licences. Que vous souhaitiez maintenir du code existant ou démarrer un nouveau projet, les informations présentées ici vous aideront à faire le bon choix.

Essayez IronOCR gratuitement pendant 30 jours pour suivre les exemples de code ci-dessous.

Comment se présente la comparaison en un coup d'œil ?

Catégorie OCR MODI IronOCR
Architecture de base Interopérabilité COM ; nécessite une référence DLL pour l'imagerie de documents Microsoft Office Bibliothèque .NET pure ; Moteur Tesseract 5 optimisé pour C#
Prise en charge de la plate-forme Windows uniquement ; nécessite l'installation d'Office 2003/2007 sur l'ordinateur Windows, Linux, macOS, Azure, Docker, iOS, Android
Formats d'image TIFF, MDI, BMP TIFF, PNG, JPEG, BMP, GIF, PDF, images multipages
Assistance linguistique ~ 22 langues via le paramètre miLANG Plus de 125 langues disponibles via les packs de langue NuGet
Précision de la reconnaissance optique de caractères (OCR) Documents de police standard et propres Plus de 99,8 % avec les filtres de correction d'image automatiques
Options de sortie Texte brut provenant de l'objet Mise en page Texte brut, PDF consultable, données structurées (pages, lignes, mots, codes-barres)
Installation Programme d'installation d'Office + référence COM dans l'Explorateur de solutions Package NuGet : Install-Package IronOCR
Développement actif Abandonné après Office 2007 Maintenu activement avec des mises à jour régulières
Licence d'utilisation Nécessite une licence Microsoft Office valide Licences perpétuelles à partir de 749 $ ; essai gratuit de 30 jours
Support Forums communautaires uniquement Assistance technique directe par e-mail, chat en direct et téléphone

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

MODI effectue la reconnaissance optique de caractères (OCR) via un modèle d'objet basé sur COM. Le processus commence par la création d'un objet MODI.Document, le chargement d'un chemin d'accès à un fichier image et l'appel de la méthode OCR pour analyser les images et identifier les caractères. Une fois le processus de reconnaissance optique de caractères (OCR) terminé, les informations relatives au texte et à la mise en page sont accessibles via les objets Image et Mise en page de chaque page.

Pour utiliser MODI dans un projet Visual Studio, une référence à la bibliothèque de types d'imagerie de documents Microsoft Office doit être ajoutée. Dans l'Explorateur de solutions, cliquez avec le bouton droit sur le dossier Références, sélectionnez l'onglet COM et choisissez la version MODI appropriée (11.0 pour Office 2003 ou 12.0 pour 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

Cette fonction illustre le flux de travail MODI standard : la méthode Create charge le fichier, la méthode OCR effectue la reconnaissance à l'aide d'une langue spécifiée et Layout.Text fournit la chaîne extraite. L'instruction return extractedText transmet le résultat à l'appelant.

Bien que MODI offre une précision acceptable pour les images de documents nettes et haute résolution, il présente des limitations notables. Il prend uniquement en charge les formats TIFF, MDI et BMP. L'application nécessite l'installation de Microsoft Office sur chaque ordinateur qui l'exécute, y compris les serveurs de production. Il n'existe aucune prise en charge intégrée pour la numérisation d'images de faible qualité, la correction de la distorsion ou la réduction du bruit numérique. De plus, comme MODI repose sur l'interopérabilité COM, il ne peut être utilisé avec .NET Core, .NET 5 et versions ultérieures, ni dans aucun environnement multiplateforme, ce qui le rend inadapté aux plateformes de déploiement modernes telles que les conteneurs Docker ou Azure App Services.

Comment une bibliothèque .NET moderne gère-t-elle les fonctionnalités OCR ?

IronOCR remplace l'approche d'interopérabilité COM par une API .NET pure qui s'installe via un seul package NuGet . La classe IronTesseract encapsule un moteur Tesseract 5 hautement optimisé, et la classe OcrInput gère le chargement, le prétraitement et la prise en charge multiformat des images, le tout sans nécessiter Microsoft Office ni aucune dépendance externe sur l'ordinateur cible.

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

Sortie IronOCR

MODI OCR C# vs. IronOCR: Choisir la bonne bibliothèque de reconnaissance optique de caractères en C# : Image 1 - Exemple de sortie IronOCR

Le code ci-dessus montre comment IronOCR traite un scan TIFF via un pipeline OCR complet en quelques lignes seulement. L'objet OcrInput accepte pratiquement n'importe quel fichier image ou document PDF, tandis que Deskew() et DeNoise() corrigent les artefacts de numérisation courants qui pourraient entraîner de mauvais résultats avec MODI. La méthode Read renvoie un objet OcrResult contenant non seulement du texte brut, mais aussi des données structurées organisées par page, paragraphe, ligne et mot, chacune avec des scores de confiance et des informations de coordonnées.

Pour les projets qui traitent des factures, des formulaires ou des fichiers TIFF multipages, IronOCR inclut également des fonctionnalités de vision par ordinateur qui localisent automatiquement les régions de texte, la lecture des codes-barres et des codes QR en une seule passe, et la prise en charge de plus de 125 langues installables sous forme de packages NuGet .

Quelles sont les principales différences lors de l'extraction de texte à partir d'images ?

La véritable différence entre ces deux options apparaît dès que l'on cesse d'utiliser des fichiers d'exemple " parfaits " et que l'on commence à travailler avec des documents réels. On parle de ces scans bâclés, tachés de café, avec des pages inclinées, ou de photos basse résolution prises avec un smartphone.

MODI a été conçu pour une autre époque, spécifiquement pour des documents de bureau clairs et à contraste élevé. Si vous disposez d'un fichier TIFF net provenant d'un scanner haut de gamme, cela fonctionnera parfaitement. Mais si votre image est ne serait-ce qu'un peu pivotée ou présente du " bruit " numérique, la précision de MODI chute brutalement. Puisqu'il ne dispose d'aucun filtre intégré pour corriger ces problèmes, vous êtes contraint de prétraiter vous-même les images à l'aide d'une seconde bibliothèque comme GDI+ ou System.Drawing avant même de démarrer le processus OCR. La gestion de la mémoire est également un peu pénible ; Si vous n'appelez pas manuellement Marshal.ReleaseComObject, vous risquez de rencontrer des fuites de mémoire en production.

IronOCR s'occupe de tout ce travail complexe pour vous, dès sa sortie de l'emballage. Au lieu d'écrire du code personnalisé pour nettoyer une image, il suffit d'appeler input.Deskew() ou input.DeNoise(). Ces filtres préparent l'image pour que le moteur atteigne un taux de précision de 99,8 % , même sur des documents de mauvaise qualité.

Conseil de pro : Si vous migrez depuis MODI, ne vous contentez pas de remplacer le code, tirez parti des données de mise en page. Contrairement à MODI, qui vous donne principalement un énorme " bloc " de texte, IronOCR décompose les éléments en paragraphes et en lignes avec des scores de confiance. C'est une solution indispensable si vous développez un système automatisé de traitement des factures et que vous devez signaler les documents qui pourraient nécessiter une vérification humaine.

Il convient également de noter IronOCR traite les fichiers TIFF et PDF multipages comme un seul objet. Vous n'avez plus besoin de parcourir manuellement les images comme vous le faisiez avec l'ancienne collection MODI.Images. C'est tout simplement plus rapide, plus propre et, honnêtement, beaucoup moins fragile.

Comment les développeurs peuvent-ils migrer depuis l'approche traditionnelle ?

Remplacer MODI dans un projet existant est simple. La migration principale consiste à remplacer la référence COM par un package NuGet et à mettre à jour les appels de méthode OCR. Voici comment le modèle MODI se traduit en son équivalent moderne :

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

La correspondance est quasi un à un : MODI.Document.Create devient OcrInput.LoadImage, la méthode OCR avec paramètres de langue devient ocr.Language Plus ocr.Read, et Layout.Text devient result.Text. Aucune référence COM, aucune dépendance à Office, aucun appel à Marshal.ReleaseComObject pour gérer manuellement la mémoire.

Au-delà du remplacement direct, la migration débloque également des fonctionnalités qui n'existent tout simplement pas dans MODI : déploiement multiplateforme sur Linux et macOS, déploiement dans le cloud et les conteneurs, sortie PDF consultable et le moteur Tesseract 5 complet avec des capacités d'entraînement de polices personnalisées .

Quelle solution répond le mieux aux besoins modernes en matière de reconnaissance optique de caractères (OCR) ?

MODI a rempli son rôle à une époque où Microsoft Office était installé de série sur tous les ordinateurs Windows. Pour les équipes qui gèrent des systèmes existants dépendant déjà d'Office 2003 ou 2007, il peut encore fonctionner, mais il représente une dépendance fragile à un logiciel abandonné sans perspective d'avenir.

Pour tout nouveau projet ou tout système existant nécessitant une modernisation, IronOCR offre une solution complète et activement maintenue. Il élimine totalement la dépendance à Office, fonctionne sur toutes les principales plateformes, gère les images de mauvaise qualité qui auraient déconcerté l'ancienne approche et fournit une sortie OCR structurée bien au-delà du simple texte. Avec une documentation complète , un support technique direct et une licence perpétuelle à partir de 749 $, il est conçu pour le traitement de documents de qualité professionnelle à grande échelle.

Commencez avec IronOCR maintenant.
green arrow pointer

Prêt à déployer la reconnaissance optique de caractères (OCR) en production ? Explorez les options de licence IronOCR pour trouver celle qui convient le mieux à votre équipe.

Kannaopat Udonpant
Ingénieur logiciel
Avant de devenir ingénieur logiciel, Kannapat a obtenu un doctorat en ressources environnementales à l'université d'Hokkaido au Japon. Pendant qu'il poursuivait son diplôme, Kannapat est également devenu membre du laboratoire de robotique de véhicules, qui fait partie du département de bioproduction. En 2022, il a utilisé ses compé...
Lire la suite

Équipe de soutien Iron

Nous sommes en ligne 24 heures sur 24, 5 jours sur 7.
Chat
Email
Appelez-moi