IRONSOFTWAREHOME
VIDÉOS

Migration du SDK Patagames Tesseract.NET vers l'IronOCR

Kannaopat Udonpant
Kannapat Udonpant
Updated: 1 août 2026

Ce guide accompagne les développeurs .NET tout au long d'une migration complète du SDK Tesseract.NET de Patagames vers IronOCR. Elle couvre la traduction mécanique de l'API, le déploiement multiplateforme qui est à l'origine de la plupart des migrations, ainsi que les modifications pratiques du code nécessaires pour faire passer un pipeline OCR de production d'un wrapper commercial réservé à Windows à une bibliothèque fonctionnant sur Windows, Linux, macOS, Docker, Azure et AWS sans modification.

Pourquoi migrer depuis le SDK Tesseract.NET de Patagames

La majorité des équipes qui évaluent Patagames en vue d'un remplacement ne sont pas insatisfaites de la précision de l'OCR. Ils se heurtent à un obstacle de déploiement — une cible de conteneur Linux, un projet de migration vers le cloud ou un pipeline CI sur Ubuntu — et découvrent que le binaire natif Windows-only n'a tout simplement aucune issue sur cette plateforme. Cette seule contrainte détermine le reste de l'évaluation de la migration.

Le déploiement sur Windows uniquement bloque la pile .NET moderne. Patagames fournit des binaires natifs Windows pour son wrapper du moteur Tesseract. Il n'existe pas de paquets d'exécution pour Linux x64, macOS ou ARM. La classe OcrApi charge une DLL Windows à l'exécution ; sur tout autre système d'exploitation, l'application échoue au démarrage. Ajoutez la dépendance System.Drawing.Bitmap, que Microsoft a formellement marquée comme non prise en charge pour les nouveaux développements multiplateformes, et la bibliothèque est incompatible avec le modèle de déploiement par défaut de chaque fournisseur de cloud et orchestrateur de conteneurs.

Des tarifs commerciaux pour un moteur gratuit, sans accès multiplateforme. Le moteur Tesseract sur lequel repose Patagames est open source et gratuit. Des wrappers communautaires gratuits tels que tesseractocr expédient également aujourd'hui des binaires Windows précompilés, ce qui supprime l'argument de commodité principal que Patagames proposait historiquement. Une licence commerciale pour Patagames offre une interface API légèrement plus épurée que celle de Tesseract brut, mais elle n'ajoute pas de prétraitement, de prise en charge des PDF, de sortie PDF consultable ou de déploiement multiplateforme — les quatre fonctionnalités qui définissent une bibliothèque OCR complète en 2026.

L'opacité des tarifs rend la planification budgétaire impossible. Patagames ne publie pas les prix des licences. L'évaluation de la bibliothèque nécessite de contacter le service commercial avant de pouvoir effectuer une comparaison des coûts. Les prix de IronOCR commencent à $999 pour une licence Lite perpétuelle pour un seul développeur avec un an de mises à jour incluses. Les équipes peuvent évaluer le rapport coût/capacité sans passer par un processus de vente. Consultez la page des licences IronOCR pour obtenir tous les détails des différents niveaux.

Les variables brutes de Tesseract fuient à travers l'API. Définir le mode de segmentation des pages dans Patagames nécessite d'appeler api.SetVariable("tessedit_pageseg_mode", "3") — une assignation de variable brute basée sur une chaîne de caractères Tesseract sans IntelliSense, sans vérification au moment de la compilation et sans découvrabilité. Si vous faites une faute d'orthographe dans le nom de la variable, l'appel ne fait rien, sans message d'erreur. IronOCR encapsule chaque option de configuration de Tesseract dans des propriétés fortement typées sur IronTesseract.Configuration.

Pas de sortie structurée au-delà d'une chaîne plate. Patagames GetTextFromImage renvoie une seule chaîne. Il n'y a pas d'accès aux limites des mots, aux regroupements de lignes, à la structure des paragraphes ou aux scores de confiance par mot. Les applications qui doivent extraire des champs spécifiques de formulaires ou valider la précision de l'OCR mot par mot ne trouvent pas de base sur laquelle s'appuyer avec l'API Patagames.

Les pipelines CI/CD s'interrompent à l'étape Linux. Les équipes de développement .NET modernes exécutent la CI sur Linux — GitHub Actions, GitLab CI et Azure DevOps utilisent tous par défaut des runners basés sur Linux. Un projet référant Tesseract.Net.SDK échouera soit à construire la référence binaire native, soit échouera à l'exécution lors des tests d'intégration. Chaque exécution de test nécessite un exécuteur CI spécifique à Windows ou une solution de contournement qui simule entièrement la couche OCR.

Le problème fondamental

Patagames cible uniquement Windows. Dès que votre cible de déploiement change, la bibliothèque ne peut pas suivre :

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

Pas de répertoire tessdata. Pas de chemin d'accès natif aux DLL. Pas de conditions liées à la plateforme. Le graphe de dépendances NuGet détermine automatiquement le runtime approprié pour chaque cible.

IronOCR vs Kit de développement logiciel (SDK) Patagames Tesseract .NET : comparaison des fonctionnalités

Le tableau suivant présente les fonctionnalités pertinentes pour les équipes qui utilisent actuellement Patagames en production.

FonctionKit de développement logiciel (SDK) Patagames Tesseract .NETIronOCR
Prise en charge de WindowsOuiOui
Prise en charge de LinuxNonOui
Prise en charge de macOSNonOui
Déploiement DockerNonOui
Service d'application AzureNonOui
AWS LambdaNonOui
package NuGetTesseract.Net.SDKIronOcr
Modèle de licenceCommercial (nous contacter pour le prix)Perpétuelle ($999–2 999 $, public)
Moteur OCRTesseract (logiciel libre)Tesseract 5 optimisé (fourni)
Gestion de TessdataRépertoire manuel avec fichiers .traineddatapackages de langage NuGet
prétraitement automatiqueNoneDésinclinaison, Débruitage, Contraste, Binarisation, Netteté, Mise à l'échelle, Dilatation, Érosion
Suppression des bruits de fond profondsNoneOui (DeepCleanBackgroundNoise())
Entrée PDF nativeNon (renderer externe requis)Oui
Fichier TIFF multipages en entréeLimitéOui (input.LoadImageFrames())
Sortie PDF consultableNonOui (result.SaveAsSearchablePdf())
Exportation hOCRNonOui
Langues prises en chargeFichiers tessdata de TesseractPlus de 125 packages NuGet
Multilingue simultanéOui (concaténation de chaînes)Oui (énum {} fortement typé OcrLanguage)
OCR basé sur la régionNonOui (CropRectangle)
Lecture de codes-barresNonOui
Sortie structuréeChaîne plate uniquementPages, paragraphes, lignes, mots, caractères avec leurs coordonnées
Scores de confiance par motNonOui
Configuration de la segmentation des pagesAppel de chaîne brute SetVariableConfiguration.PageSegmentationMode fortement typé
Dépendance de dessin du systèmeLes exigences sont les suivantesEn option
Sécurité des threadsLimites standard du TesseractComplet (créez IronTesseract par thread)
soutien commercialOuiOui
Téléchargements NuGetLimitéPlus de 5,3 millions

Guide de démarrage rapide : migration du SDK Patagames Tesseract.NET vers IronOCR

Étape 1 : Remplacer le package NuGet

Supprimer Kit de développement logiciel (SDK) Patagames Tesseract .NET :

dotnet remove package Tesseract.Net.SDK
SHELL

Installez IronOCR depuis NuGet :

dotnet add package IronOcr

Pour bénéficier d'une prise en charge linguistique autre que l'anglais, installez le pack de langue correspondant :

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

Étape 2 : Mise à jour des espaces de noms

Remplacer les espaces de noms Patagames par l'espace de noms IronOCR :

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

// After (IronOCR)
using IronOcr;
C#

Étape 3 : initialisation de la licence

Ajoutez l'initialisation de la licence au démarrage de l'application (avant le premier appel IronTesseract) :

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

Une licence d'essai gratuite est disponible sur ironsoftware.com/C#/ocr/ pour commencer les tests de migration sans achat.

Exemples de migration de code

Traitement par lots de dossiers

La phase 1 a montré l'extraction d'une seule image. Les déploiements Patagames en production initialisent généralement un OcrApi à l'intérieur d'une boucle, appelant api.Init() à chaque itération — ce qui recharge le tessdata et réinitialise le moteur Tesseract pour chaque fichier. Ce modèle augmente le coût d'initialisation sur des centaines de documents.

Approche de 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#

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

L'instance IronTesseract de IronOCR conserve l'état du moteur entre les appels. La réutilisation d'une seule instance pour l'ensemble d'un lot élimine la surcharge liée à l'initialisation par fichier et supprime entièrement la dépendance au chemin d'accès tessdata. Pour le traitement par lots en parallèle sur plusieurs cœurs CPU, consultez l'exemple de multithreading — créez un IronTesseract par thread plutôt que de partager une seule instance.

Migration du mode de segmentation des pages

Patagames expose le mode de segmentation de pages via un appel brut SetVariable avec une clé de chaîne et une valeur entière convertie en chaîne. Pas d'IntelliSense, pas de validation des énumérations, pas d'astuce de documentation au point d'appel. Un seul chiffre détermine si Tesseract traite l'entrée comme un bloc de texte unique, une colonne, un WORD ou un caractère unique — et il n'y a pas de retour d'information lorsque le nom de la variable est mal saisi.

Approche de 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#

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

Chaque option de configuration de Tesseract que Patagames expose via SetVariable a un équivalent fortement typé direct dans IronTesseract.Configuration. La migration consiste en une substitution mécanique de chaînes littérales par des valeurs d'énumération nommées. Consultez la référence de l'API IronTesseract pour connaître l'ensemble des options de configuration. Le guide de lecture des documents spécifiques indique quand appliquer chaque mode de segmentation de page à différents types de documents.

Remplacement du modèle d'itérateur de résultats

Patagames renvoie une chaîne plate depuis GetTextFromImage. L'extraction de mots individuels, de leurs cadres de sélection ou de leurs scores de confiance à partir de la sortie de Patagames nécessite d'écrire un analyseur syntaxique sur la chaîne renvoyée — ou d'accéder directement à l'API d'itérateur de résultats Tesseract sous-jacente via l'interopérabilité. Aucune de ces deux approches n'est fiable ni maintenable. IronOCR expose un OcrResult entièrement structuré avec un accès natif à chaque niveau de la hiérarchie du document.

Approche de 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);
    // Chaîne plate uniquement — 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)
    {
        // Non X, Y, Width, Height — position information is lost
        Console.WriteLine(word);
    }
}
C#

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

La structure complète OcrResult — pages, paragraphes, lignes, mots et caractères — élimine le besoin de tout analyseur post-traitement. Les coordonnées WORD permettent l'extraction de champs par position, ce qui constitue la base du traitement des factures, de l'OCR des formulaires et de l'extraction de tableaux. Consultez le guide des résultats structurés pour connaître la hiérarchie complète et le guide des scores de confiance pour filtrer les WORDs à faible confiance.

Traitement de fichiers TIFF multipages

Patagames accepte un System.Drawing.Bitmap. Un TIFF multi-image contient plusieurs images intégrées, mais System.Drawing.Bitmap n'énumère pas automatiquement les cadres — vous devez utiliser Image.SelectActiveFrame() pour les parcourir manuellement et passer chaque bitmap de cadre à GetTextFromImage dans une boucle. L'API d'énumération des cadres n'est pas évidente et les messages d'erreur lorsqu'elle échoue ne sont pas descriptifs.

Approche de 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#

Approche 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() gère l'énumération des cadres en interne et applique un prétraitement à chaque cadre dans le pipeline. La cérémonie de sélection des cadres System.Drawing disparaît complètement. Consultez le guide d'entrée TIFF et GIF pour découvrir des options supplémentaires, notamment la sélection d'une seule image lorsque seules certaines pages sont nécessaires.

Entrée PDF sans moteur de rendu externe

Patagames ne prend pas en charge les fichiers PDF en natif. Un pipeline OCR de PDF basé sur Patagames nécessite une bibliothèque de rendu PDF externe - PdfiumViewer, iText ou PDFSharp - pour convertir chaque page en Bitmap avant de la passer à GetTextFromImage. Cette dépendance externe ajoute une charge de gestion des paquets, une considération de licence distincte et un point de défaillance secondaire. La qualité du rendu varie également d'une bibliothèque à l'autre, ce qui affecte la précision de l'OCR indépendamment du moteur Tesseract.

Approche de 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#

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

Un seul package NuGet remplace deux. L'étape de rendu disparaît. Le guide d'importation de fichiers PDF couvre les PDF d'une seule page, de plusieurs pages et protégés par mot de passe. Pour le workflow de sortie PDF consultable — qui permet de produire un document consultable via Ctrl+F à partir d'un PDF numérisé —, le guide sur les PDF consultables et l'exemple de PDF consultable présentent le pipeline complet en cinq lignes.

Référence de mappage de l'API Kit de développement logiciel (SDK) Patagames Tesseract .NET vers IronOCR

Kit de développement logiciel (SDK) Patagames Tesseract .NETÉquivalent d'IronOCR
Tesseract.Net.SDK (package NuGet)IronOcr (package NuGet)
Patagames.Ocr (espace de noms)IronOcr (espace de noms)
Patagames.Ocr.Enums (espace de noms)IronOcr (espace de noms)
OcrApi.Create()new IronTesseract()
api.Init(tessDataPath, "eng")ocr.Language = OcrLanguage.English (sans chemin)
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) (toute variable brute)ocr.Configuration.[TypedProperty]
new Bitmap(imagePath) (préparation d'entrée)input.LoadImage(imagePath)
OcrBitmap.FromFile(path)input.LoadImage(path)
Pas de prise en charge des fichiers TIFF multi-imagesinput.LoadImageFrames(tiffPath)
Aucune entrée PDFinput.LoadPdf(pdfPath) ou ocr.Read(pdfPath)
Aucun PDF consultableresult.SaveAsSearchablePdf("output.pdf")
Aucun prétraitementinput.Deskew(), input.DeNoise(), input.Contrast(), input.Binarize()
OCR sans régioninput.LoadImage(path, new CropRectangle(x, y, w, h))
Lecture de code-barres impossibleocr.Configuration.ReadBarCodes = true
Résultat sous forme de chaîne plate uniquementresult.Pages, result.Lines, result.Words, result.Paragraphs
Pas de confiance par WORDresult.Words[i].Confidence, result.Confidence
PageSegmentationMode énumérationTesseractPageSegmentationMode énumération
Pas d'exportation hOCRSortie de résultat .ToHOcrString()
Windows x64/x86 uniquementWindows, Linux, macOS, Docker, Azure, AWS

Problèmes de migration courants et solutions

Problème n° 1 : répertoire Tessdata manquant dans le nouvel environnement

Patagames : L'appel api.Init(@"./tessdata", "eng") échoue à l'exécution si le répertoire tessdata est absent ou si le fichier eng.traineddata est manquant. Dans les environnements conteneurisés, il s'agit d'une erreur survenue au moment du déploiement, sans avertissement au moment de la compilation. Les équipes qui déploient sur Docker s'en rendent souvent compte après que l'image a déjà été poussée.

Solution : IronOCR supprime complètement le concept de répertoire tessdata. Installez les données linguistiques sous forme de paquets NuGet :

dotnet add package IronOcr.Languages.English

Les données de langue se résolvent au moment de la compilation et sont automatiquement incluses dans la sortie dotnet publish. Il n'y a pas de chemin d'accès erroné ni d'élément de liste de contrôle de déploiement pour les fichiers de langue.

Problème n° 2 : System.Drawing.Bitmap ne fonctionne pas sous Linux

Patagames : Le constructeur System.Drawing.Bitmap lance TypeInitializationException ou PlatformNotSupportedException sous Linux à moins que libgdiplus ne soit installé comme package système. Même avec la présence de libgdiplus, le comportement est incohérent entre les distributions. Microsoft conseille explicitement de ne pas utiliser System.Drawing sur des plateformes non-Windows dans un nouveau développement.

Solution : IronOCR accepte directement les chemins d'accès aux fichiers, les tableaux d'octets et les flux. La dépendance System.Drawing n'est pas requise :

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

Consultez le guide des formats d'entrée pour connaître tous les types de données pris en charge, y compris les tableaux d'octets et les flux.

Problème n° 3 : Échecs silencieux de SetVariable

Patagames : api.SetVariable("tessedit_pageseg_mode", someValue) renvoie bool mais la plupart des appelants ignorent la valeur de retour. Lorsqu'un nom de variable est mal orthographié ou qu'une valeur non prise en charge est transmise, Tesseract applique silencieusement une valeur par défaut et poursuit son exécution. La dégradation de la précision qui en résulte est difficile à attribuer à l'appel de configuration.

Solution : les propriétés de configuration d'IronOCR sont fortement typées. Une affectation non valide génère une erreur de compilation, et non une valeur par défaut silencieuse lors de l'exécution :

// Compile-time safety — no silent failures
var ocr = new IronTesseract();
ocr.Configuration.PageSegmentationMode = TesseractPageSegmentationMode.SingleBlock;
ocr.Configuration.TesseractVersion = TesseractVersion.Tesseract5; // also strongly typed
C#

Problème n° 4 : OcrApi initialisé à l'intérieur d'une boucle

Patagames : Les équipes qui initialisent OcrApi à l'intérieur d'une boucle de traitement supportent une surcharge de chargement de tessdata à chaque itération. Le modèle typique - OcrApi.Create() et api.Init() à l'intérieur d'un foreach - est correct d'un point de vue isolation des threads, mais coûteux lorsqu'on traite des centaines de documents.

Solution : Créez un IronTesseract par thread et réutilisez-le pour tous les documents attribués à ce thread. L'instance est sans état entre les appels .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#

Pour les charges de travail par lots en parallèle, créez une instance par tâche. Consultez le guide d'optimisation de la vitesse pour les options de réglage des performances, y compris IronTesseract.Configuration.TesseractVersion et les préréglages de vitesse de lecture.

Problème n° 5 : aucune image de base Docker pour Linux ne fonctionne

Patagames : il n'existe pas de binaire Patagames compatible avec Linux. Toute tentative d'exécution d'une application basée sur Patagames dans un conteneur Docker sous Linux échoue. Le seul contournement est un conteneur basé sur Windows (FROM mcr.microsoft.com/windows/servercore), qui est significativement plus gros, plus lent à tirer, et incompatible avec la plupart des configurations Kubernetes qui utilisent des groupes de nœuds Linux.

Solution : IronOCR prend en charge les images de base Linux standard. Le guide de déploiement Docker couvre la configuration exacte du fichier 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

Aucun conteneur Windows requis. Pas de distribution binaire séparée. La même image Docker s'exécute sur n'importe quel hôte de conteneurs basé sur Linux.

Problème n° 6 : l'OCR de PDF nécessite deux packages NuGet

Patagames : L'ajout de la reconnaissance optique de caractères (OCR) pour les PDF à une application Patagames nécessite un deuxième package NuGet pour le rendu PDF (PdfiumViewer, iTextSharp.LGPLv2.Core ou similaire). Chacun d'entre eux comporte ses propres conditions de licence, sa cadence de mise à jour et ses éventuels problèmes de compatibilité. En cas de conflit entre la version du moteur de rendu PDF et celle de Patagames, les deux équipes doivent être impliquées pour le résoudre.

Solution : IronOCR gère nativement les fichiers PDF sans avoir besoin d'un autre logiciel. Supprimer entièrement la dépendance au moteur de rendu PDF :

# Remove the PDF rendering shim
dotnet remove package PdfiumViewer

# IronOCR handles PDF natively
var result = new IronTesseract().Read("document.pdf");
SHELL

Liste de contrôle pour la migration vers le SDK Tesseract.NET de Patagames

Pré-migration

Vérifiez le code source pour identifier toutes les références à Patagames avant de commencer :

# 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

Document : nombre total de sites d'appel OcrApi.Create(), nombre de configurations linguistiques distinctes api.Init(), emplacement du répertoire tessdata dans chaque environnement de déploiement, et tout code de prétraitement écrit en System.Drawing ou ImageSharp qui enveloppe les appels Patagames.

Migration de code

  1. Retirez la référence de package NuGet Tesseract.Net.SDK de tous les projets.
  2. Retirez tous les packages de rendu PDF NuGet (PdfiumViewer, iText, etc.) utilisés uniquement pour alimenter Patagames.
  3. Installez le package NuGet IronOcr.
  4. Installez IronOcr.Languages.English et tout autre package linguistique nécessaire.
  5. Ajoutez IronOcr.License.LicenseKey = "YOUR-LICENSE-KEY" au démarrage de l'application.
  6. Remplacez using Patagames.Ocr; et using Patagames.Ocr.Enums; par using IronOcr;.
  7. Remplacez chaque bloc OcrApi.Create() + api.Init(path, lang) par new IronTesseract() + ocr.Language = OcrLanguage.[Language].
  8. Remplacez chaque appel api.GetTextFromImage(bitmap) par ocr.Read(imagePath).Text (en supprimant le constructeur Bitmap).
  9. Remplacez chaque appel api.SetVariable("tessedit_pageseg_mode", value) par le type ocr.Configuration.PageSegmentationMode = TesseractPageSegmentationMode.[Value].
  10. Supprimez toute instanciation System.Drawing.Bitmap qui existait uniquement pour passer des images à Patagames.
  11. Remplacez les boucles de rendu PDF (si présentes) par input.LoadPdf(pdfPath).
  12. Remplacez les boucles TIFF multi-images utilisant Image.SelectActiveFrame() par input.LoadImageFrames(tiffPath).
  13. Remplacez tout code de prétraitement personnalisé (redimensionnement System.Drawing, contraste, seuil) par les appels de filtre équivalents OcrInput.
  14. Supprimez le répertoire tessdata de tous les manifestes de déploiement, fichiers Dockerfile et étapes de copie CI.
  15. Mettre à jour les tests d'intégration pour qu'ils s'exécutent sur des environnements CI Linux (GitHub Actions ubuntu-latest, etc.) afin de vérifier le comportement multiplateforme.

Après la migration

  • Exécutez la suite de tests complète sous Linux (et pas seulement sous Windows) pour vérifier que le déploiement multiplateforme fonctionne.
  • Vérifiez que la précision de l'OCR est égale ou supérieure à la référence Patagames sur le même ensemble d'images de test.
  • Confirmez que les documents multilingues produisent une sortie correcte en utilisant l'approche d'énumération OcrLanguage.
  • Testez directement l'entrée PDF sans la bibliothèque de rendu externe et comparez la précision de la sortie par rapport à l'ancien chemin de rendu bitmap.
  • Vérifiez que le traitement des fichiers TIFF multi-images produit le même nombre de pages et le même contenu textuel que la boucle d'énumération des images précédente.
  • Vérifiez que le répertoire tessdata est absent de l'artefact de déploiement et qu'aucune erreur de chemin d'exécution ne se produit.
  • Exécutez une construction Docker ciblant linux/amd64 et exécutez au moins un appel OCR à l'intérieur du conteneur.
  • Vérifiez que le pipeline CI (GitHub Actions, GitLab CI, Azure DevOps) s'exécute correctement sur son exécuteur Linux par défaut.
  • Vérifiez que les scores de confiance sont disponibles dans les résultats et que toute logique de filtrage basée sur la confiance fonctionne comme prévu.
  • Confirmez que l'initialisation de la clé de licence s'exécute avant que la première instance IronTesseract ne soit créée dans le code de démarrage en production.

Principaux avantages de la migration vers IronOCR

Déploiement multiplateforme sans modification du code. Après la migration, le même binaire s'exécute sur Windows Server, dans des conteneurs Docker Ubuntu, sur des machines de développement macOS, sur Azure App Service sous Linux et sur AWS Lambda. Il n'y a pas de conditions liées à la plateforme, pas de drapeaux d'identifiant d'exécution et pas d'artefacts de déploiement distincts par système d'exploitation. Une migration vers le cloud qui était auparavant bloquée par la bibliothèque OCR réservée à Windows devient un déploiement standard en conteneur. Les guides de déploiement pour Linux, Docker, Azure et AWS couvrent les configurations de production pour chaque cible.

La gestion des tessdata disparaît des opérations. Le répertoire tessdata — son emplacement, son contenu, sa présence dans chaque environnement — n'est plus un sujet de préoccupation opérationnelle. Les données linguistiques sont une dépendance NuGet résolue au moment du build. Elles apparaissent automatiquement dans la sortie dotnet publish. Il n'y a pas de runbooks de déploiement à mettre à jour lors de l'ajout d'une nouvelle langue, pas de couche Docker à invalider lorsque les fichiers tessdata changent, et pas d'incident de production lié à des tessdata manquants à examiner.

Sortie structurée remplace l'analyse de chaînes. Les applications qui analysaient auparavant la chaîne plate de GetTextFromImage pour extraire les champs, valider le contenu ou calculer la confiance accèdent maintenant à ces données directement dans OcrResult. Les coordonnées des WORDs, les limites de ligne, les regroupements de paragraphes et les scores de confiance par WORD sont des propriétés de premier ordre. L'extraction de champ par boîte englobante - la base du traitement des factures et de l'OCR de formulaire - est un appel CropRectangle direct plutôt qu'une recherche de sous-chaîne fragile.

Prétraitement intégré remplace les pipelines d'image personnalisés. Tout code de prétraitement écrit pour compenser le manque de filtres intégrés de Patagames peut être remplacé par des appels de méthode OcrInput. Le redressement, la suppression du bruit, l'amélioration du contraste, la binarisation et la normalisation de la résolution sont des opérations en une seule ligne. Les équipes ayant passé 20 à 40 heures à construire et affiner un pipeline de prétraitement System.Drawing peuvent le remplacer par cinq appels de méthode et rediriger cet effort de maintenance ailleurs. Consultez la présentation des fonctionnalités de prétraitement pour accéder au catalogue complet des filtres.

La prise en charge native du format PDF supprime une classe de dépendance. Les bibliothèques de rendu PDF ajoutées uniquement pour combler les lacunes de Patagames en matière de PDF sont éliminées. Un système OCR en production qui nécessitait auparavant de coordonner les mises à jour entre trois packages — Tesseract.Net.SDK, un moteur de rendu PDF, et leur dépendance partagée System.Drawing — a maintenant un seul package OCR sans dépendances intermédiaires. Les fichiers PDF, y compris les documents protégés par mot de passe et les documents de plusieurs pages, constituent un type de fichier pris en charge. Pour les cas d'utilisation de conformité et de gestion des enregistrements, result.SaveAsSearchablePdf() produit une sortie PDF couche de texte en un seul appel sans bibliothèques supplémentaires.

Tarification transparente et support commercial. La licence perpétuelle Lite d'IronOCR ($999) couvre un développeur et un lieu de déploiement avec un an de mises à jour inclus. Les tarifs sont publics, la structure tarifaire est claire et une assistance commerciale est disponible sans contrat d'Enterprise. Les équipes qui payaient les tarifs de Patagames pour une interface Tesseract réservée à Windows bénéficient désormais d'un déploiement multiplateforme, d'un prétraitement, de la prise en charge du format PDF et de plus de 125 langues, tout en passant à un modèle de tarification où le coût est connu avant la fin de l'évaluation. Consultez les conditions de licence d'IronOCR pour obtenir tous les détails sur les différents niveaux d'accès et la page produit d'IronOCR pour obtenir une Licence d'essai gratuite.

Veuillez noter: PDFium, PDFSharp, Tesseract, and iText sont des marques déposées de leurs propriétaires respectifs. Ce site n'est pas affilié, approuvé, ou sponsorisé par le Chromium Project, Google, empira Software GmbH, ou iText Group. Tous les noms de produits, logos et marques sont la propriété de leurs propriétaires respectifs. Les comparaisons sont à titre informatif uniquement et reflètent les informations publiquement disponibles au moment de l'écriture.

Articles connexes

Key in blue circle

Obtenez votre clé d'essai de 30 jours instantanément.

Your trial license will be sent to your email address

Aucune restriction. 100 % débloqué. Pas de carte bancaire.

bullet_checkedAucune carte de crédit ou création de compte requiseAucune restriction. 100 % débloqué. Pas de carte bancaire.
  • Logo Aetna
  • Logo NASA
  • Logo GE
  • Logo Porsche
  • Logo USDA
  • Logo Qatar
Join Millions of Engineers who’ve tried IronPDF
Obtenez Votre Consultation sans Engagement
Remplissez le formulaire ci-dessous ou envoyez un email à sales@ironsoftware.com
Vos informations seront toujours gardées confidentielles.
De confiance par des millions d'ingénieurs dans le monde entier
Logos des clients d'Iron Software
Obtenez votre clé d'essai 30 jours gratuitement.
Aucune carte de crédit ou création de compte requise