Migration du SDK Patagames Tesseract.NET vers l'IronOCR
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);
// IronOCR: same code runs on Windows, Linux, macOS, Docker, Azure, AWS
IronOcr.License.LicenseKey = "YOUR-LICENSE-KEY";
var text = new IronTesseract().Read(imagePath).Text;
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.
| Fonction | Kit de développement logiciel (SDK) Patagames Tesseract .NET | IronOCR |
|---|---|---|
| Prise en charge de Windows | Oui | Oui |
| Prise en charge de Linux | Non | Oui |
| Prise en charge de macOS | Non | Oui |
| Déploiement Docker | Non | Oui |
| Service d'application Azure | Non | Oui |
| AWS Lambda | Non | Oui |
| package NuGet | Tesseract.Net.SDK | IronOcr |
| Modèle de licence | Commercial (nous contacter pour le prix) | Perpétuelle ($999–2 999 $, public) |
| Moteur OCR | Tesseract (logiciel libre) | Tesseract 5 optimisé (fourni) |
| Gestion de Tessdata | Répertoire manuel avec fichiers .traineddata | packages de langage NuGet |
| prétraitement automatique | None | Désinclinaison, Débruitage, Contraste, Binarisation, Netteté, Mise à l'échelle, Dilatation, Érosion |
| Suppression des bruits de fond profonds | None | Oui (DeepCleanBackgroundNoise()) |
| Entrée PDF native | Non (renderer externe requis) | Oui |
| Fichier TIFF multipages en entrée | Limité | Oui (input.LoadImageFrames()) |
| Sortie PDF consultable | Non | Oui (result.SaveAsSearchablePdf()) |
| Exportation hOCR | Non | Oui |
| Langues prises en charge | Fichiers tessdata de Tesseract | Plus de 125 packages NuGet |
| Multilingue simultané | Oui (concaténation de chaînes) | Oui (énum {} fortement typé OcrLanguage) |
| OCR basé sur la région | Non | Oui (CropRectangle) |
| Lecture de codes-barres | Non | Oui |
| Sortie structurée | Chaîne plate uniquement | Pages, paragraphes, lignes, mots, caractères avec leurs coordonnées |
| Scores de confiance par mot | Non | Oui |
| Configuration de la segmentation des pages | Appel de chaîne brute SetVariable | Configuration.PageSegmentationMode fortement typé |
| Dépendance de dessin du système | Les exigences sont les suivantes | En option |
| Sécurité des threads | Limites standard du Tesseract | Complet (créez IronTesseract par thread) |
| soutien commercial | Oui | Oui |
| Téléchargements NuGet | Limité | 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
Installez IronOCR depuis NuGet :
Pour bénéficier d'une prise en charge linguistique autre que l'anglais, installez le pack de langue correspondant :
É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;
É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";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;
}
}
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;
}
}
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);
}
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;
}
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);
}
}
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}%");
}
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();
}
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;
}
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();
}
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;
}
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-images | input.LoadImageFrames(tiffPath) |
| Aucune entrée PDF | input.LoadPdf(pdfPath) ou ocr.Read(pdfPath) |
| Aucun PDF consultable | result.SaveAsSearchablePdf("output.pdf") |
| Aucun prétraitement | input.Deskew(), input.DeNoise(), input.Contrast(), input.Binarize() |
| OCR sans région | input.LoadImage(path, new CropRectangle(x, y, w, h)) |
| Lecture de code-barres impossible | ocr.Configuration.ReadBarCodes = true |
| Résultat sous forme de chaîne plate uniquement | result.Pages, result.Lines, result.Words, result.Paragraphs |
| Pas de confiance par WORD | result.Words[i].Confidence, result.Confidence |
PageSegmentationMode énumération | TesseractPageSegmentationMode énumération |
| Pas d'exportation hOCR | Sortie de résultat .ToHOcrString() |
| Windows x64/x86 uniquement | Windows, 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 :
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
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
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);
}
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"]
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");
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" .
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
- Retirez la référence de package NuGet
Tesseract.Net.SDKde tous les projets. - Retirez tous les packages de rendu PDF NuGet (PdfiumViewer, iText, etc.) utilisés uniquement pour alimenter Patagames.
- Installez le package NuGet
IronOcr. - Installez
IronOcr.Languages.Englishet tout autre package linguistique nécessaire. - Ajoutez
IronOcr.License.LicenseKey = "YOUR-LICENSE-KEY"au démarrage de l'application. - Remplacez
using Patagames.Ocr;etusing Patagames.Ocr.Enums;parusing IronOcr;. - Remplacez chaque bloc
OcrApi.Create()+api.Init(path, lang)parnew IronTesseract()+ocr.Language = OcrLanguage.[Language]. - Remplacez chaque appel
api.GetTextFromImage(bitmap)parocr.Read(imagePath).Text(en supprimant le constructeurBitmap). - Remplacez chaque appel
api.SetVariable("tessedit_pageseg_mode", value)par le typeocr.Configuration.PageSegmentationMode = TesseractPageSegmentationMode.[Value]. - Supprimez toute instanciation
System.Drawing.Bitmapqui existait uniquement pour passer des images à Patagames. - Remplacez les boucles de rendu PDF (si présentes) par
input.LoadPdf(pdfPath). - Remplacez les boucles TIFF multi-images utilisant
Image.SelectActiveFrame()parinput.LoadImageFrames(tiffPath). - Remplacez tout code de prétraitement personnalisé (redimensionnement System.Drawing, contraste, seuil) par les appels de filtre équivalents
OcrInput. - Supprimez le répertoire tessdata de tous les manifestes de déploiement, fichiers Dockerfile et étapes de copie CI.
- 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/amd64et 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
IronTesseractne 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.
