IronOCR ou OCR basé sur LLM : lequel les développeurs .NET devraient-ils choisir ?
Quatre fichiers de modèle. C'est la première chose dont RapidOCR .NET a besoin avant de pouvoir reconnaître un seul caractère : un modèle de détection, un classificateur de direction, un modèle de reconnaissance et un dictionnaire de caractères, chacun téléchargé séparément depuis une page de versions GitHub et relié aux autres par une configuration de chemin explicite. Avant que votre premier appel engine.Run() ne renvoie un résultat, vous avez déjà géré une séquence de téléchargement manuel, édité les chemins de fichiers dans le code, ajouté des règles de copie MSBuild à votre .csproj, et confirmé que les binaires natifs d'ONNX Runtime correspondent à votre cible de déploiement. Pour une équipe évaluant les options OCR pour la production, cette cérémonie d'installation représente l'histoire complète de RapidOCR .NET .
Comprendre RapidOCR .NET
RapidOCR .NET est un wrapper .NET maintenu par la communauté autour du projet RapidOCR, qui est lui-même un portage optimisé pour le CPU des modèles d'apprentissage profond PaddleOCR de Baidu au format ONNX. Le package NuGet (RapidOcrNet) est maintenu par un seul développeur (BobLd sur GitHub) sous une licence Apache 2.0. Comprendre l'importance de la lignée : la bibliothèque se situe à trois niveaux d'abstraction de la technologie d'origine — Baidu PaddlePaddle, PaddleOCR, la conversion ONNX RapidOCR de la communauté, et enfin le wrapper .NET .
Principales caractéristiques architecturales :
- Exigence de modèle en quatre fichiers : La détection (
det.onnx), le classificateur de direction (cls.onnx), la reconnaissance (rec.onnx), et le dictionnaire de caractères (keys.txt) doivent tous être présents aux chemins configurés avant que le moteur ne s'initialise. - Dépendance à ONNX Runtime : Nécessite
Microsoft.ML.OnnxRuntime(CPU) ouMicrosoft.ML.OnnxRuntime.Gpu(CUDA), ajoutant 30–50 Mo à l'empreinte de l'application. Les fichiers binaires d'exécution doivent correspondre à la plateforme de déploiement. - Contrainte linguistique : les modèles sont principalement entraînés sur le chinois et l'anglais. Les langues européennes (espagnol, français, allemand), les alphabets cyrilliques (russe, ukrainien), l'arabe, l'hébreu et les alphabets indiens ne sont pas pris en charge. Les modèles expérimentaux japonais et coréens sont limités et reposent sur une contribution communautaire.
- Saisie d'images uniquement : RapidOCR .NET ne prend pas en charge nativement le format PDF. Le traitement d'un PDF nécessite une bibliothèque de rendu externe pour convertir les pages en images, effectuer une reconnaissance optique de caractères (OCR) sur chaque image individuellement, puis réassembler les résultats manuellement.
- Latence de démarrage à froid : le chargement du modèle prend 2 à 5 secondes lors de la première exécution et consomme 300 à 500 Mo de mémoire en cours d'exécution.
- Échelle communautaire : le projet a une présence limitée sur Stack Overflow, une documentation minimale au-delà du fichier README, et aucun support commercial ni contrat de niveau de service (SLA) de maintenance.
- Pas de fichier PDF consultable : la bibliothèque extrait le texte des images. Il est impossible de réintégrer les résultats de la reconnaissance optique de caractères (OCR) dans un PDF sous forme de couche de texte consultable.
Vue d'ensemble de la configuration à 4 modèles
Chaque application RapidOCR .NET commence par ce bloc d'initialisation, quelle que soit sa complexité :
// RapidOcrNet: 4 paths required — any missing file throws at runtime
var engine = new RapidOcrEngine(new RapidOcrOptions
{
DetModelPath = "./models/det.onnx", // ~3 MB download
ClsModelPath = "./models/cls.onnx", // ~1 MB download
RecModelPath = "./models/rec_en.onnx", // ~2–10 MB depending on language
KeysPath = "./models/en_keys.txt" // ~100 KB character dictionary
});
// Text blocks returned — must be sorted and joined manually
var result = engine.Run(imagePath);
var text = string.Join("\n", result.TextBlocks
.OrderBy(b => b.BoundingBox.Top)
.ThenBy(b => b.BoundingBox.Left)
.Select(b => b.Text));
// RapidOcrNet: 4 paths required — any missing file throws at runtime
var engine = new RapidOcrEngine(new RapidOcrOptions
{
DetModelPath = "./models/det.onnx", // ~3 MB download
ClsModelPath = "./models/cls.onnx", // ~1 MB download
RecModelPath = "./models/rec_en.onnx", // ~2–10 MB depending on language
KeysPath = "./models/en_keys.txt" // ~100 KB character dictionary
});
// Text blocks returned — must be sorted and joined manually
var result = engine.Run(imagePath);
var text = string.Join("\n", result.TextBlocks
.OrderBy(b => b.BoundingBox.Top)
.ThenBy(b => b.BoundingBox.Left)
.Select(b => b.Text));
Imports System.Linq
' RapidOcrNet: 4 paths required — any missing file throws at runtime
Dim engine = New RapidOcrEngine(New RapidOcrOptions With {
.DetModelPath = "./models/det.onnx", ' ~3 MB download
.ClsModelPath = "./models/cls.onnx", ' ~1 MB download
.RecModelPath = "./models/rec_en.onnx", ' ~2–10 MB depending on language
.KeysPath = "./models/en_keys.txt" ' ~100 KB character dictionary
})
' Text blocks returned — must be sorted and joined manually
Dim result = engine.Run(imagePath)
Dim text = String.Join(vbCrLf, result.TextBlocks _
.OrderBy(Function(b) b.BoundingBox.Top) _
.ThenBy(Function(b) b.BoundingBox.Left) _
.Select(Function(b) b.Text))
Passer à l'OCR chinois n'est pas un changement de configuration — c'est un échange de fichier. Le modèle de reconnaissance anglais (en_rec.onnx / en_keys.txt) et le modèle de reconnaissance chinois (ch_rec.onnx / ch_keys.txt) sont des téléchargements séparés. Si un document contient à la fois du texte chinois et espagnol, il n'y a pas de solution : les modèles espagnols n'existent pas du tout dans le catalogue de modèles RapidOCR.
Le .csproj nécessite également des entrées MSBuild explicites pour copier les quatre fichiers lors de la construction :
<ItemGroup>
<Content Include="models\**\*.*">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
</ItemGroup>
<ItemGroup>
<Content Include="models\**\*.*">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
</ItemGroup>
Si vous omettez cette étape, le déploiement en production échoue silencieusement lors de l'exécution lorsque les chemins d'accès ne mènent à rien.
Comprendre IronOCR
IronOCR est une bibliothèque OCR .NET commerciale construite sur un moteur Tesseract 5 optimisé, conçue pour fonctionner à partir d'un seul package NuGet sans fichiers de modèle externes, sans gestion de tessdata et sans configuration binaire native. Il cible toute la gamme des scénarios de développement .NET — applications web ASP.NET , processeurs de traitement par lots en console, outils de bureau WPF, Azure Functions, AWS Lambda, conteneurs Docker et applications mobiles MAUI — sur Windows, Linux, macOS et ARM.
Caractéristiques principales :
- Déploiement en un seul package :
dotnet add package IronOcrest l'installation complète. Tous les fichiers binaires du moteur, les données linguistiques pour la configuration par défaut (anglais) et les algorithmes de prétraitement sont inclus dans le package. - Pipeline de prétraitement automatique : le redressement, la réduction du bruit, l'amélioration du contraste, la binarisation et la normalisation de la résolution sont exécutés automatiquement sur les images qui en ont besoin. L'application manuelle du filtre est disponible en cas de besoin.
- Support PDF natif : Les PDF sont directement intégrés dans
IronTesseract.Read()sans étape de conversion. Les PDF protégés par mot de passe acceptent un paramètrePassword. La sortie PDF consultable se fait en un seul appel de méthode sur le résultat. - 125+ langues via NuGet : Chaque pack de langue (
IronOcr.Languages.French,IronOcr.Languages.Arabic, etc.) s'installe comme une dépendance NuGet. Le changement de langue est une attribution de propriété, et non un téléchargement de fichier. - Modèle de résultat structuré :
OcrResultexpose.Pages,.Paragraphs,.Lines,.Words, et des scores de confiance par mot avec des coordonnées de boîte englobante. - Sécurité des threads et sans état : Plusieurs instances
IronTesseractfonctionnent en parallèle sans verrous ni état partagé. - Support commercial : Licencié perpétuellement à partir de $999 (Lite), avec support par e-mail et une API versionnée sous maintenance active.
Comparaison des fonctionnalités
| Fonction | RapidOCR.NET | IronOCR |
|---|---|---|
| Installation | Téléchargements NuGet + 4 modèles manuels | Paquet NuGet unique |
| Soutien linguistique | ~5(CJK + anglais seulement) | Plus de 125 modules linguistiques disponibles via NuGet |
| Entrée PDF native | Non | Oui |
| Sortie PDF consultable | Non | Oui |
| Prétraitement intégré | Non | Oui (filtres automatiques et manuels) |
| Soutien commercial | Aucun (communauté) | Oui (inclus dans la licence) |
Comparaison détaillée des fonctionnalités
| Catégorie / Fonctionnalité | RapidOCR.NET | IronOCR |
|---|---|---|
| Configuration et installation | ||
| Installationde NuGet | Oui | Oui |
| Téléchargements de modèles externes requis | Oui (4 fichiers) | Non |
| Configuration du chemin requise | Oui | Non |
| Règles de copie MSBuild requises | Oui | Non |
| Fonctionne immédiatement après l'installation de NuGet | Non | Oui |
| Assistance linguistique | ||
| Anglais | Oui | Oui |
| Chinois simplifié / traditionnel | Oui (objectif principal) | Oui |
| japonais | Expérimental seulement | Oui |
| coréen | Expérimental seulement | Oui |
| Langues européennes (espagnol, français, allemand, etc.) | Non | Oui (30+) |
| Cyrillique (russe, ukrainien, etc.) | Non | Oui (15+) |
| Arabe / Hébreu | Non | Oui |
| Écritures indiennes (hindi, bengali, tamoul) | Non | Oui (10+) |
| OCR simultané multilingue | Non | Oui |
| Nombre total de langues prises en charge | ~5 | 125+ |
| Formats d'entrée | ||
| JPEG / PNG / BMP / TIFF | Oui | Oui |
| PDF (natif, sans conversion) | Non | Oui |
| PDF protégé par mot de passe | Non | Oui |
| Flux / tableau d'octets | Limité | Oui |
| Entrée URL | Non | Oui |
| Sortir | ||
| Texte brut | Oui | Oui |
| cadres de délimitation des blocs de texte | Oui | Oui |
| Mots / lignes / paragraphes structurés | Partiel (blocs seulement) | Oui |
| Scores de confiance par mot | Oui (par bloc) | Oui |
| PDF consultable | Non | Oui |
| Exportation hOCR | Non | Oui |
| Prétraitement | ||
| Prétraitement automatique | Non | Oui |
| Déclin | Non | Oui |
| Denoise | Non | Oui |
| Contraste / binarisation | Non | Oui |
| Amélioration de la résolution | Non | Oui |
| Déploiement | ||
| Emballage individuel autonome | Non (4+ fichiers externes) | Oui |
| Prise en charge de Docker | Copie du modèle manuel requise | Oui (dès la sortie de la boîte) |
| Prise en charge de Linux | Nécessite les binaires natifs d'exécution ONNX | Oui |
| Prise en charge de macOS | Nécessite les binaires natifs d'exécution ONNX | Oui |
| Assistance et maintenance | ||
| Support commercial / SLA | Non | Oui |
| Maintenance active assurée par l'entreprise | Non (développeur communautaire unique) | Oui |
| Type de licence | Apache 2.0 (gratuit) | Commercial perpétuel ($999+) |
Gestion des modèles ONNX vs configuration zéro
La principale différence opérationnelle entre RapidOCR .NET et IronOCR ne réside pas dans la précision, mais dans le coût permanent de la gestion de quatre fichiers de modèles externes dans tous les environnements utilisés par votre application.
Approche RapidOCR .NET
Les fichiers du modèle ne sont pas inclus dans le package NuGet . Ils sont disponibles sur les pages de publication GitHub du projet RapidOCR et doivent être téléchargés hors bande, versionnés manuellement et déployés avec votre application. Lorsque le projet RapidOCR publie des modèles mis à jour pour une meilleure précision, vous répétez la séquence de téléchargement et remplacez les fichiers dans votre déploiement.
Dans une pipeline CI/CD, les fichiers de modèle doivent soit être engagés dans le dépôt (ajoutant 15–25 Mo de données binaires à l'historique Git) soit être récupérés lors de l'étape de construction avec des scripts personnalisés. Dans un conteneur Docker, chaque ensemble de modèles de langue ajoute une instruction COPY dédiée et une couche non triviale. Dans un déploiement Kubernetes, les fichiers de modèle se retrouvent généralement dans un volume monté ou intégrés à l'image, deux options qui nécessitent des politiques concernant la propagation des mises à jour.
La logique de validation dans les fichiers sources rend cette fragilité concrète :
// RapidOcrNet: Runtime validation needed because any missing file crashes the engine
public static bool ValidateModelFiles()
{
var requiredFiles = new[]
{
Path.Combine(ModelDirectory, "det.onnx"),
Path.Combine(ModelDirectory, "cls.onnx"),
Path.Combine(ModelDirectory, "rec_en.onnx"),
Path.Combine(ModelDirectory, "en_keys.txt")
};
var missingFiles = requiredFiles.Where(f => !File.Exists(f)).ToList();
if (missingFiles.Any())
{
Console.WriteLine("ERROR: Missing required model files:");
foreach (var file in missingFiles)
Console.WriteLine($" - {file}");
return false;
}
return true;
}
// RapidOcrNet: Runtime validation needed because any missing file crashes the engine
public static bool ValidateModelFiles()
{
var requiredFiles = new[]
{
Path.Combine(ModelDirectory, "det.onnx"),
Path.Combine(ModelDirectory, "cls.onnx"),
Path.Combine(ModelDirectory, "rec_en.onnx"),
Path.Combine(ModelDirectory, "en_keys.txt")
};
var missingFiles = requiredFiles.Where(f => !File.Exists(f)).ToList();
if (missingFiles.Any())
{
Console.WriteLine("ERROR: Missing required model files:");
foreach (var file in missingFiles)
Console.WriteLine($" - {file}");
return false;
}
return true;
}
Imports System
Imports System.IO
Imports System.Linq
Public Class RapidOcrNet
Public Shared Function ValidateModelFiles() As Boolean
Dim requiredFiles = {
Path.Combine(ModelDirectory, "det.onnx"),
Path.Combine(ModelDirectory, "cls.onnx"),
Path.Combine(ModelDirectory, "rec_en.onnx"),
Path.Combine(ModelDirectory, "en_keys.txt")
}
Dim missingFiles = requiredFiles.Where(Function(f) Not File.Exists(f)).ToList()
If missingFiles.Any() Then
Console.WriteLine("ERROR: Missing required model files:")
For Each file In missingFiles
Console.WriteLine($" - {file}")
Next
Return False
End If
Return True
End Function
End Class
Les applications de production qui utilisent RapidOCR .NET incluent systématiquement une validation au démarrage de ce type, car un fichier de modèle manquant ne produit pas d'erreur claire lors de l'installation du package ; il provoque un plantage à l'exécution lors de la première initialisation du moteur. Ce défaut apparaît en production, et non en développement.
Approche d'IronOCR
Il n'y a aucun fichier modèle à gérer. Après dotnet add package IronOcr, le moteur est prêt :
// IronOCR: no model downloads, no path configuration, no validation boilerplate
IronOcr.License.LicenseKey = "YOUR-LICENSE-KEY";
var text = new IronTesseract().Read("document.jpg").Text;
// IronOCR: no model downloads, no path configuration, no validation boilerplate
IronOcr.License.LicenseKey = "YOUR-LICENSE-KEY";
var text = new IronTesseract().Read("document.jpg").Text;
' IronOCR: no model downloads, no path configuration, no validation boilerplate
IronOcr.License.LicenseKey = "YOUR-LICENSE-KEY"
Dim text = New IronTesseract().Read("document.jpg").Text
Le guide d'installation d'IronTesseract indique le chemin d'installation complet. Les packs de langues qui vont au-delà de l'anglais sont des packages NuGet — dotnet add package IronOcr.Languages.French — et l'étape de restauration gère tout, y compris dans les pipelines CI/CD qui rétablissent déjà les dépendances NuGet. Il n'y a pas de décisions .gitignore à prendre concernant les fichiers de modèles binaires, pas de couches COPY dans les Dockerfiles, pas de scripts de validation de démarrage.
Pour les équipes qui déploient dans Docker, le guide Docker d'IronOCR couvre la seule dépendance système requise (libgdiplus sur les images basées sur Debian/Ubuntu) et rien de plus.
Assistance linguistique
Approche RapidOCR .NET
La couverture linguistique de RapidOCR.NET reflète son origine. PaddleOCR a été créé par Baidu pour faciliter la recherche sur Internet en langue chinoise. Ses modèles sont excellents pour le chinois simplifié et le chinois traditionnel. La prise en charge de l'anglais est incluse, mais ce n'était pas l'objectif principal lors de la conception. Les modèles japonais et coréens, élaborés par la communauté, sont marqués comme expérimentaux. Pour tout le reste — l'espagnol, le français, l'allemand, le russe, l'arabe, l'hindi, le portugais et plus de 100 autres langues — aucun modèle n'est disponible.
Le passage d'une langue prise en charge à une autre nécessite le téléchargement de fichiers de modèle différents :
// RapidOcrNet: Anglais engine
var englishEngine = new RapidOcrEngine(new RapidOcrOptions
{
DetModelPath = Path.Combine(modelPath, "det.onnx"),
ClsModelPath = Path.Combine(modelPath, "cls.onnx"),
RecModelPath = Path.Combine(modelPath, "en_rec.onnx"), // English-specific
KeysPath = Path.Combine(modelPath, "en_keys.txt") // English-specific
});
// RapidOcrNet: Chinese engine — different rec and keys files required
var chineseEngine = new RapidOcrEngine(new RapidOcrOptions
{
DetModelPath = Path.Combine(modelPath, "det.onnx"),
ClsModelPath = Path.Combine(modelPath, "cls.onnx"),
RecModelPath = Path.Combine(modelPath, "ch_rec.onnx"), // Different download
KeysPath = Path.Combine(modelPath, "ch_keys.txt") // Different download
});
// Spanish? NotSupportedException — no model exists
// RapidOcrNet: Anglais engine
var englishEngine = new RapidOcrEngine(new RapidOcrOptions
{
DetModelPath = Path.Combine(modelPath, "det.onnx"),
ClsModelPath = Path.Combine(modelPath, "cls.onnx"),
RecModelPath = Path.Combine(modelPath, "en_rec.onnx"), // English-specific
KeysPath = Path.Combine(modelPath, "en_keys.txt") // English-specific
});
// RapidOcrNet: Chinese engine — different rec and keys files required
var chineseEngine = new RapidOcrEngine(new RapidOcrOptions
{
DetModelPath = Path.Combine(modelPath, "det.onnx"),
ClsModelPath = Path.Combine(modelPath, "cls.onnx"),
RecModelPath = Path.Combine(modelPath, "ch_rec.onnx"), // Different download
KeysPath = Path.Combine(modelPath, "ch_keys.txt") // Different download
});
// Spanish? NotSupportedException — no model exists
Imports System.IO
' RapidOcrNet: Anglais engine
Dim englishEngine = New RapidOcrEngine(New RapidOcrOptions With {
.DetModelPath = Path.Combine(modelPath, "det.onnx"),
.ClsModelPath = Path.Combine(modelPath, "cls.onnx"),
.RecModelPath = Path.Combine(modelPath, "en_rec.onnx"), ' English-specific
.KeysPath = Path.Combine(modelPath, "en_keys.txt") ' English-specific
})
' RapidOcrNet: Chinese engine — different rec and keys files required
Dim chineseEngine = New RapidOcrEngine(New RapidOcrOptions With {
.DetModelPath = Path.Combine(modelPath, "det.onnx"),
.ClsModelPath = Path.Combine(modelPath, "cls.onnx"),
.RecModelPath = Path.Combine(modelPath, "ch_rec.onnx"), ' Different download
.KeysPath = Path.Combine(modelPath, "ch_keys.txt") ' Different download
})
' Spanish? NotSupportedException — no model exists
Une application qui doit traiter des documents en anglais, en chinois et en espagnol provenant de la même file d'attente ne dispose d'aucun chemin viable dans RapidOCR .NET pour les documents espagnols.
Approche d'IronOCR
IronOCR prend en charge plus de 125 langues , chacune disponible sous forme de pack de langue NuGet . Le changement est une assignation de propriété enum sur l'instance IronTesseract — pas de téléchargements de fichiers, pas de recréation de moteur :
// IronOCR: language switching is a property change, not a file swap
var ocr = new IronTesseract();
// English
ocr.Language = OcrLanguage.English;
// Chinese Simplified
ocr.Language = OcrLanguage.ChineseSimplified;
// Spanish — no model download needed
ocr.Language = OcrLanguage.Spanish;
// Arabic — just works
ocr.Language = OcrLanguage.Arabic;
// Russian — just works
ocr.Language = OcrLanguage.Russian;
var result = ocr.Read("document.jpg");
// IronOCR: language switching is a property change, not a file swap
var ocr = new IronTesseract();
// English
ocr.Language = OcrLanguage.English;
// Chinese Simplified
ocr.Language = OcrLanguage.ChineseSimplified;
// Spanish — no model download needed
ocr.Language = OcrLanguage.Spanish;
// Arabic — just works
ocr.Language = OcrLanguage.Arabic;
// Russian — just works
ocr.Language = OcrLanguage.Russian;
var result = ocr.Read("document.jpg");
Imports IronOcr
Dim ocr As New IronTesseract()
' English
ocr.Language = OcrLanguage.English
' Chinese Simplified
ocr.Language = OcrLanguage.ChineseSimplified
' Spanish — no model download needed
ocr.Language = OcrLanguage.Spanish
' Arabic — just works
ocr.Language = OcrLanguage.Arabic
' Russian — just works
ocr.Language = OcrLanguage.Russian
Dim result = ocr.Read("document.jpg")
Les documents en plusieurs langues utilisent AddSecondaryLanguage :
var ocr = new IronTesseract();
ocr.Language = OcrLanguage.ChineseSimplified;
ocr.AddSecondaryLanguage(OcrLanguage.English);
var result = ocr.Read("mixed-document.jpg");
var ocr = new IronTesseract();
ocr.Language = OcrLanguage.ChineseSimplified;
ocr.AddSecondaryLanguage(OcrLanguage.English);
var result = ocr.Read("mixed-document.jpg");
Imports IronOcr
Dim ocr As New IronTesseract()
ocr.Language = OcrLanguage.ChineseSimplified
ocr.AddSecondaryLanguage(OcrLanguage.English)
Dim result = ocr.Read("mixed-document.jpg")
Le guide multilingue et l' exemple de langues internationales couvrent en détail l'installation du pack de langue et la configuration de la langue secondaire.
Capacités de traitement et de sortie PDF
Approche RapidOCR .NET
RapidOCR .NET traite les images. Les fichiers PDF ne sont pas des images. La bibliothèque ne dispose d'aucune fonctionnalité de rendu PDF, d'aucune fonctionnalité d'écriture PDF et d'aucun mécanisme permettant de produire un fichier PDF consultable. L'extraction de texte à partir d'un PDF numérisé avec RapidOCR .NET nécessite au moins trois composants distincts :
// RapidOcrNet: PDF processing requires external library + manual assembly
public async Task<string> ExtractTextFromPdf(string pdfPath)
{
// Step 1: Requires PdfPig, Docotic, or similar external library
var pageImages = await RenderPdfToImages(pdfPath);
// Step 2: Initialize RapidOcr with 4 model files (must already be downloaded)
using var engine = new RapidOcrEngine(new RapidOcrOptions
{
DetModelPath = "models/det.onnx",
ClsModelPath = "models/cls.onnx",
RecModelPath = "models/rec_en.onnx",
KeysPath = "models/en_keys.txt"
});
// Step 3: OCR each image individually
var results = new List<string>();
foreach (var pageImage in pageImages)
{
var result = engine.Run(pageImage);
results.Add(string.Join("\n", result.TextBlocks.Select(b => b.Text)));
}
// Step 4: Combine manually — page structure not preserved
return string.Join("\n\n", results);
}
// RapidOcrNet: PDF processing requires external library + manual assembly
public async Task<string> ExtractTextFromPdf(string pdfPath)
{
// Step 1: Requires PdfPig, Docotic, or similar external library
var pageImages = await RenderPdfToImages(pdfPath);
// Step 2: Initialize RapidOcr with 4 model files (must already be downloaded)
using var engine = new RapidOcrEngine(new RapidOcrOptions
{
DetModelPath = "models/det.onnx",
ClsModelPath = "models/cls.onnx",
RecModelPath = "models/rec_en.onnx",
KeysPath = "models/en_keys.txt"
});
// Step 3: OCR each image individually
var results = new List<string>();
foreach (var pageImage in pageImages)
{
var result = engine.Run(pageImage);
results.Add(string.Join("\n", result.TextBlocks.Select(b => b.Text)));
}
// Step 4: Combine manually — page structure not preserved
return string.Join("\n\n", results);
}
Imports System.Threading.Tasks
Imports System.Collections.Generic
Imports System.Linq
Public Class PdfTextExtractor
' RapidOcrNet: PDF processing requires external library + manual assembly
Public Async Function ExtractTextFromPdf(pdfPath As String) As Task(Of String)
' Step 1: Requires PdfPig, Docotic, or similar external library
Dim pageImages = Await RenderPdfToImages(pdfPath)
' Step 2: Initialize RapidOcr with 4 model files (must already be downloaded)
Using engine As New RapidOcrEngine(New RapidOcrOptions With {
.DetModelPath = "models/det.onnx",
.ClsModelPath = "models/cls.onnx",
.RecModelPath = "models/rec_en.onnx",
.KeysPath = "models/en_keys.txt"
})
' Step 3: OCR each image individually
Dim results As New List(Of String)()
For Each pageImage In pageImages
Dim result = engine.Run(pageImage)
results.Add(String.Join(vbLf, result.TextBlocks.Select(Function(b) b.Text)))
Next
' Step 4: Combine manually — page structure not preserved
Return String.Join(vbLf & vbLf, results)
End Using
End Function
' Placeholder for the RenderPdfToImages method
Private Async Function RenderPdfToImages(pdfPath As String) As Task(Of List(Of Object))
' Implementation goes here
Return New List(Of Object)()
End Function
End Class
Cela ajoute une autre dépendance NuGet , un autre ensemble d'API à apprendre et une pression sur la mémoire due au stockage en mémoire des bitmaps rendus par page pour les documents volumineux. La sortie PDF consultable — l'écriture du texte reconnu sous forme de couche OCR cachée par-dessus le scan original — n'est possible à aucun moment de ce processus.
Approche d'IronOCR
IronOCR lit les fichiers PDF nativement. La même méthode IronTesseract.Read() accepte à la fois les chemins d'images et les chemins de PDF :
// IronOCR: direct PDF OCR — no conversion, no external library
var text = new IronTesseract().Read("scanned-document.pdf").Text;
// PDF protégé par mot de passe — one parameter
using var input = new OcrInput();
input.LoadPdf("encrypted.pdf", Password: "secret");
var result = new IronTesseract().Read(input);
// PDF consultable — one method call on the result
var result = new IronTesseract().Read("scanned.pdf");
result.SaveAsSearchablePdf("searchable-output.pdf");
// IronOCR: direct PDF OCR — no conversion, no external library
var text = new IronTesseract().Read("scanned-document.pdf").Text;
// PDF protégé par mot de passe — one parameter
using var input = new OcrInput();
input.LoadPdf("encrypted.pdf", Password: "secret");
var result = new IronTesseract().Read(input);
// PDF consultable — one method call on the result
var result = new IronTesseract().Read("scanned.pdf");
result.SaveAsSearchablePdf("searchable-output.pdf");
Imports IronOcr
' IronOCR: direct PDF OCR — no conversion, no external library
Dim text As String = New IronTesseract().Read("scanned-document.pdf").Text
' PDF protégé par mot de passe — one parameter
Using input As New OcrInput()
input.LoadPdf("encrypted.pdf", Password:="secret")
Dim result = New IronTesseract().Read(input)
End Using
' PDF consultable — one method call on the result
Dim result2 = New IronTesseract().Read("scanned.pdf")
result2.SaveAsSearchablePdf("searchable-output.pdf")
Le guide d'importation de fichiers PDF aborde la sélection des pages, la gestion des mots de passe et le traitement de plusieurs pages. Le guide pratique au format PDF consultable explique comment créer un document conforme aux normes, visuellement identique à la numérisation originale, tout en ajoutant une couche de recherche en texte intégral. Pour les équipes qui développent des chaînes de traitement d'archivage de documents, ce format de sortie est l'objectif final — et il ne nécessite aucune dépendance supplémentaire au-delà du package IronOCR lui-même.
Préparation à la production et maturité de la communauté
Approche RapidOCR .NET
RapidOCR .NET est un projet plus récent. Son dépôt GitHub a un nombre limité d'étoiles et d'activités de contribution par rapport aux bibliothèques OCR .NET établies. Stack Overflow a une couverture minimale. Lorsque des cas particuliers apparaissent en production (orientations d'images inhabituelles, jeux de caractères spécifiques, conflits de versions d'ONNX Runtime, configuration du mode GPU), la principale ressource est le système de suivi des problèmes GitHub . Il n'existe aucun niveau de support commercial, aucun SLA de maintenance et aucun délai de réponse garanti.
La chaîne de dépendance introduit un risque supplémentaire. RapidOCR .NET dépend des versions de modélisation du projet RapidOCR. Le projet RapidOCR dépend de l'architecture de modèle de PaddleOCR. Toute modification incompatible à n'importe quel niveau de cette chaîne nécessite une réponse du responsable de la maintenance du wrapper .NET avant que les utilisateurs puissent effectuer la mise à jour — et le wrapper est maintenu par un seul développeur de la communauté sans aucun soutien organisationnel.
Le déploiement met également en évidence des problèmes de versionnage de l'environnement d'exécution ONNX. Le package Microsoft.ML.OnnxRuntime a eu des changements majeurs entre les versions mineures, et les binaires natifs qui l'accompagnent sont spécifiques à la plateforme. Une image de conteneur construite sur linux/amd64 ne peut pas utiliser les mêmes binaires ONNX Runtime qu'une image construite sur linux/arm64. Chaque cible de déploiement nécessite une validation.
Approche d'IronOCR
IronOCR est en développement commercial actif depuis plus d'une décennie. La bibliothèque est distribuée sous une API versionnée avec des modifications majeures documentées, des mises à jour régulières alignées sur les versions du SDK .NET et une assistance par e-mail incluse avec chaque licence commerciale. Les équipes qui mettent en place des pipelines de production bénéficient d'un accès direct au support plutôt que d'une file d'attente de problèmes GitHub surveillée par un seul développeur sur son temps libre.
La conception en un seul paquet élimine complètement la boucle de validation du déploiement. L'étape de restauration NuGet est déterministe : la même version du package produit la même installation fonctionnelle sur Windows, Linux et macOS sans gestion binaire native spécifique à la plateforme. Pour les déploiements AWS Lambda et Azure , le bundle de fonction contient uniquement l'application publiée — aucun fichier sidecar de modèle, aucun montage de volume, aucune logique de validation au démarrage.
L' exemple de numérisation de faible qualité et le guide de correction de la qualité d'image couvrent les scénarios de prétraitement qui nécessitent généralement un code personnalisé dans les pipelines basés sur ONNX — numérisations biaisées, arrière-plans bruyants, documents à faible contraste — sans aucun code autre que la sélection des méthodes de filtrage appropriées.
Référence de mappage d'API
| RapidOCR.NET | Équivalent d'IronOCR |
|---|---|
new RapidOcrEngine(new RapidOcrOptions { ... }) |
new IronTesseract() |
RapidOcrOptions.DetModelPath |
Inutile — inclus |
RapidOcrOptions.ClsModelPath |
Inutile — inclus |
RapidOcrOptions.RecModelPath |
Inutile — inclus |
RapidOcrOptions.KeysPath |
Inutile — inclus |
RapidOcrOptions.UseGpu |
Aucun équivalent direct (optimisation interne pour le processeur) |
RapidOcrOptions.NumThreads |
IronTesseract (sécurité des threads ; utiliser Parallel.ForEach) |
engine.Run(imagePath) |
new IronTesseract().Read(imagePath) |
result.TextBlocks |
result.Words / result.Lines / result.Paragraphs |
result.TextBlocks[i].Text |
result.Words[i].Text |
result.TextBlocks[i].Confidence |
result.Words[i].Confidence |
result.TextBlocks[i].BoundingBox |
result.Words[i].X, .Y, .Width, .Height |
string.Join("\n", result.TextBlocks.Select(b => b.Text)) |
result.Text |
| Remplacement manuel des fichiers de langue | ocr.Language = OcrLanguage.French |
PDF-to-image + engine.Run() |
new IronTesseract().Read("doc.pdf") |
| Non disponible | result.SaveAsSearchablePdf("output.pdf") |
| Non disponible | result.SaveAsHocrFile("output.hocr") |
engine.Dispose() |
using var ocr = new IronTesseract() |
Quand les équipes envisagent de passer de RapidOCR .NET à IronOCR
Quand la gestion des fichiers de modèles devient un goulot d'étranglement du déploiement
Les équipes qui ont commencé par utiliser RapidOCR .NET pour un prototype se heurtent généralement à des difficultés de gestion des fichiers de modèle lors du passage en production. Les quatre fichiers de modèle doivent être versionnés, suivis, copiés lors de la compilation, inclus dans les artefacts d'intégration continue, déployés en préproduction et en production, indépendamment du graphe de dépendances NuGet . Dans une petite équipe, ces frais généraux opérationnels sont absorbés une fois pour toutes et oubliés. Dans une équipe qui maintient plusieurs services, plusieurs environnements et plusieurs pipelines CI, la personnalisation du script autour de la distribution des fichiers de modèle accumule un coût de maintenance significatif. Quand un coéquipier demande "pourquoi avons-nous ce dossier models/ dans le dépôt et que se passe-t-il si je le supprime ?" et que la réponse nécessite une explication de cinq minutes, c'est généralement à ce moment que l'évaluation commence. IronOCR élimine toute la surface de gestion des modèles : rien à télécharger séparément, rien à copier dans l'intégration continue, rien à valider au démarrage.
Lorsqu'un document arrive dans une langue non prise en charge
Le manque de couverture linguistique est une contrainte insurmontable, et non un problème de configuration. Si une organisation reçoit des contrats allemands, des factures françaises, des bons de commande russes ou de la correspondance arabe, RapidOCR .NET ne propose aucune solution pour ces documents — il ne s'agit pas d'une " précision limitée ", mais d'un manque de modèle et donc d'un manque de résultat. Les équipes qui ont initialement choisi RapidOCR .NET pour un cas d'utilisation axé sur les langues CJK découvrent cette limite la première fois qu'elles doivent traiter un document en dehors de cet ensemble. Les fonctionnalités linguistiques d'IronOCR couvrent plus de 125 langues installables via NuGet, ce qui permet d'étendre la portée du pipeline OCR sans toucher au code de l'application : il suffit d'ajouter le pack de langue et de modifier une propriété d'énumération.
Lorsque l'application nécessite une entrée ou une sortie PDF
Une catégorie importante de documents commerciaux traités par OCR concerne les PDF : contrats numérisés, factures archivées, formulaires faxés convertis en PDF par des imprimantes multifonctions. RapidOCR .NET ne peut lire aucun de ces fichiers sans une bibliothèque de rendu PDF distincte, un code de conversion personnalisé et une gestion de la mémoire pour les bitmaps de la taille d'une page. Les équipes qui développent des pipelines d'ingestion de documents constatent rapidement que la pile RapidOCR .NET nécessite au moins deux bibliothèques — une pour le rendu PDF, une pour l'OCR — chacune avec ses propres cycles de mise à jour et surfaces de compatibilité. IronOCR gère les deux dans un seul et même package. La possibilité de produire également des PDF consultables, transformant une archive numérisée en un index consultable, est totalement hors du champ d'application de RapidOCR .NET et se résume à un simple appel de méthode avec IronOCR. Les équipes qui développent des applications de gestion de documents conformes aux exigences citent souvent la possibilité de rechercher des fichiers PDF comme critère déterminant.
Lorsque des incidents de production surviennent sans voie de support
Les projets communautaires fonctionnent en fonction de la disponibilité des contributeurs. Lorsqu'un déploiement de production RapidOCR .NET rencontre un cas particulier inédit (un conflit de version spécifique d'ONNX Runtime, un échec d'inférence de modèle sur un format d'image inhabituel, une fuite de mémoire sous charge soutenue), la solution consiste à créer un GitHub et à attendre. Pour les équipes soumises à des obligations de SLA ou à des processus de traitement de documents critiques pour l'activité, il ne s'agit pas d'un modèle de réponse aux incidents viable. La licence commerciale d'IronOCR inclut une assistance par e-mail directe, offrant aux équipes un véritable point de contact lorsqu'un problème survient le vendredi soir, avant une échéance fixée au lundi.
Lorsque le projet dépasse les hypothèses du prototype
RapidOCR .NET est un choix judicieux pour une preuve de concept expérimentale : gratuit, sans licence à négocier, et rapide à installer après la configuration du modèle. Cependant, lorsque cette preuve de concept devient une fonctionnalité de production, les limitations acceptables en laboratoire (absence de prise en charge des PDF, couverture linguistique restreinte, gestion manuelle des modèles, absence de support commercial) deviennent des obstacles. Le processus de migration de RapidOCR .NET vers IronOCR est mécanique : supprimer les packages, supprimer le répertoire des modèles, supprimer les règles de copie MSBuild, remplacer le bloc d'initialisation du moteur par un constructeur de moteur OCR unique sans argument et déverrouiller simultanément l'entrée PDF, la couverture de 125 langues, le prétraitement automatique et la sortie consultable.
Considérations courantes en matière de migration
Remplacement de l'initialisation du moteur
Le changement de code le plus direct est de remplacer le bloc d'initialisation RapidOcrEngine par une instantiation IronTesseract. L'objet de configuration à quatre chemins disparaît entièrement :
// Before: RapidOcrNet — engine needs all 4 paths populated
var engine = new RapidOcrEngine(new RapidOcrOptions
{
DetModelPath = "models/det.onnx",
ClsModelPath = "models/cls.onnx",
RecModelPath = "models/rec_en.onnx",
KeysPath = "models/en_keys.txt"
});
var result = engine.Run(imagePath);
var text = string.Join("\n", result.TextBlocks
.OrderBy(b => b.BoundingBox.Top)
.Select(b => b.Text));
// After: IronOCR — no configuration required
IronOcr.License.LicenseKey = "YOUR-LICENSE-KEY";
var text = new IronTesseract().Read(imagePath).Text;
// Before: RapidOcrNet — engine needs all 4 paths populated
var engine = new RapidOcrEngine(new RapidOcrOptions
{
DetModelPath = "models/det.onnx",
ClsModelPath = "models/cls.onnx",
RecModelPath = "models/rec_en.onnx",
KeysPath = "models/en_keys.txt"
});
var result = engine.Run(imagePath);
var text = string.Join("\n", result.TextBlocks
.OrderBy(b => b.BoundingBox.Top)
.Select(b => b.Text));
// After: IronOCR — no configuration required
IronOcr.License.LicenseKey = "YOUR-LICENSE-KEY";
var text = new IronTesseract().Read(imagePath).Text;
Imports System.Linq
' Before: RapidOcrNet — engine needs all 4 paths populated
Dim engine As New RapidOcrEngine(New RapidOcrOptions With {
.DetModelPath = "models/det.onnx",
.ClsModelPath = "models/cls.onnx",
.RecModelPath = "models/rec_en.onnx",
.KeysPath = "models/en_keys.txt"
})
Dim result = engine.Run(imagePath)
Dim text = String.Join(vbCrLf, result.TextBlocks _
.OrderBy(Function(b) b.BoundingBox.Top) _
.Select(Function(b) b.Text))
' After: IronOCR — no configuration required
IronOcr.License.LicenseKey = "YOUR-LICENSE-KEY"
Dim text = New IronTesseract().Read(imagePath).Text
La collection result.TextBlocks avec sa chaîne OrderBy et Select manuelle s'effondre en result.Text. Pour les applications qui ont besoin des données de boîte englobante fournies par TextBlocks, result.Words expose les mêmes coordonnées par mot et valeurs de confiance via une API structurée documentée dans le how-to des résultats de lecture.
Suppression de l'infrastructure des fichiers de modèle
Après avoir remplacé le code, supprimez le répertoire models/, retirez les entrées <Content> MSBuild qui copiaient les fichiers de modèle à la construction, et retirez toute logique de validation de démarrage qui vérifiait l'absence de fichiers. Ces éléments ne sont pas nécessaires — IronOCR traite ses données en interne. Dans les pipelines CI/CD, supprimez toutes les étapes qui récupéraient ou mettaient en cache des fichiers de modèle. Le guide d'entrée d'image couvre les modèles de gestion des entrées pour les scénarios courants de chemin de fichier, de flux et de tableau d'octets que le code RapidOCR .NET existant est susceptible d'utiliser.
Gestion des images de faible qualité
Les modèles ONNX de RapidOCR.NET appliquent un prétraitement interne lors de l'inférence, mais la bibliothèque n'expose aucune API de prétraitement à l'appelant. Si le code existant applique une manipulation d'image avant de passer à engine.Run(), ce code a été écrit contre une bibliothèque d'images distincte. IronOCR expose une API de prétraitement directement sur OcrInput :
using var input = new OcrInput();
input.LoadImage("low-quality-scan.jpg");
input.Deskew(); // Correct skewed scans
input.DeNoise(); // Remove scanner noise
input.Contrast(); // Enhance contrast
input.Binarize(); // Convert to black/white
input.EnhanceResolution(300);
var result = new IronTesseract().Read(input);
Console.WriteLine($"Confidence: {result.Confidence}%");
using var input = new OcrInput();
input.LoadImage("low-quality-scan.jpg");
input.Deskew(); // Correct skewed scans
input.DeNoise(); // Remove scanner noise
input.Contrast(); // Enhance contrast
input.Binarize(); // Convert to black/white
input.EnhanceResolution(300);
var result = new IronTesseract().Read(input);
Console.WriteLine($"Confidence: {result.Confidence}%");
Imports IronOcr
Using input As New OcrInput()
input.LoadImage("low-quality-scan.jpg")
input.Deskew() ' Correct skewed scans
input.DeNoise() ' Remove scanner noise
input.Contrast() ' Enhance contrast
input.Binarize() ' Convert to black/white
input.EnhanceResolution(300)
Dim result = New IronTesseract().Read(input)
Console.WriteLine($"Confidence: {result.Confidence}%")
End Using
Les guides pratiques sur la correction de l'orientation de l'image et sur les paramètres DPI couvrent les deux problèmes de prétraitement qui affectent le plus souvent la précision des documents numérisés. Les scores de confiance sont disponibles sur result.Confidence et par mot via result.Words[i].Confidence.
Ajout de la prise en charge des fichiers PDF
Tout code qui effectuait une conversion PDF-to-image avant d'appeler engine.Run() peut être supprimé purement et simplement. IronTesseract.Read() accepte directement un chemin PDF. Supprimez la dépendance à la bibliothèque de rendu PDF ainsi que le code du pipeline de conversion — il s'agit d'une réduction nette des dépendances, et non d'un ajout.
Fonctionnalités supplémentaires d'IronOCR
Au-delà des fonctionnalités abordées dans les sections comparatives, IronOCR offre des capacités qui n'ont pas d'équivalent dans RapidOCR .NET:
- OCR basé sur les régions : extrait le texte d'une zone spécifique d'une image sans traiter la page entière. Le how-to OCR basé sur la région et l'exemple de recadrage de rectangle couvrent l'utilisation de
CropRectanglepour l'extraction d'entêtes de facture, le ciblage de champs de formulaire et des scénarios similaires de documents partiels. - Lecture de codes-barres pendant l'OCR : Définissez
ocr.Configuration.ReadBarCodes = truepour extraire les valeurs des codes-barres avec le texte en un seul passage. Le how-to OCR des codes-barres et l'exemple OCR des codes-barres montrent commentresult.Barcodess'intègre à la sortie OCR standard. - Types de documents spécialisés : IronOCR fournit des instructions testées pour les passeports , les plaques d'immatriculation , les textes manuscrits et l'extraction de tableaux .
- OCR asynchrone : ce guide pratique sur l'OCR asynchrone présente des modèles de traitement non bloquants pour les gestionnaires de requêtes ASP.NET et les services en arrière-plan.
- hOCR et exportation structurée : IronOCR peut enregistrer les résultats OCR au format XML hOCR, préservant les cadres de délimitation au niveau des mots dans un format standard compatible avec les outils de traitement de documents en aval. Le guide d'exportation hOCR couvre les options de format de sortie.
Compatibilité .NET et préparation à l'avenir
IronOCR cible .NET 8, .NET 9, .NET Standard 2.0 et .NET Framework 4.6.2 et versions ultérieures, couvrant ainsi l'ensemble des environnements .NET Enterprise actuels. La bibliothèque fournit des binaires multiplateformes pour Windows x64/x86, Linux x64, macOS x64 et macOS ARM (Apple Silicon), avec des images de conteneur testées contre les images de base standard mcr.microsoft.com/dotnet/aspnet. La compatibilité de RapidOCR.NET est limitée par la matrice de support de plateforme d'ONNX Runtime, qui couvre des cibles similaires mais nécessite une sélection de package NuGet spécifique à la plateforme (Microsoft.ML.OnnxRuntime pour CPU vs. Microsoft.ML.OnnxRuntime.Gpu pour CUDA) et ne garantit pas la même simplicité binaire-dans-le-package. IronOCR maintient sa compatibilité avec .NET 10 (prévu pour novembre 2026) grâce à son rythme de publication actif, sans qu'aucune modification du code de l'application ne soit requise lors de la mise à jour du SDK.
Conclusion
RapidOCR .NET résout efficacement un problème spécifique : exécuter des modèles PaddleOCR optimisés pour le processeur dans .NET sans nécessiter l'écosystème Python complet. Pour les équipes traitant exclusivement des images chinoises ou anglaises dans un environnement contrôlé où les fichiers de modèles peuvent être gérés manuellement, il offre une précision raisonnable gratuitement. Voilà toute la portée de son utilisation en production.
La surcharge liée à la gestion des modèles constitue la contrainte déterminante. Quatre fichiers distincts, provenant d'un dépôt GitHub externe, déployés avec l'application, validés lors de l'exécution et mis à jour manuellement chaque fois que le projet en amont publie de nouveaux poids — ce n'est pas un problème pour un prototype. Pour un service de production avec des pipelines CI/CD, des déploiements multi-environnements et de nombreux développeurs, c'est le genre de friction opérationnelle qui consomme silencieusement des heures tout au long d'un trimestre d'ingénierie. Le plafond de couverture linguistique aggrave le problème : dès qu'une exigence métier introduit une langue autre que CJK, RapidOCR .NET disparaît complètement.
IronOCR commence là où les limitations de RapidOCR.NET s'arrêtent. Un seul package NuGet , aucun fichier externe, plus de 125 langues, entrée PDF native et sortie PDF consultable, prétraitement automatique, extraction de résultats structurés et support commercial via une API versionnée. La licence Lite $999 est un coût unique sans comptabilisation par transaction ni exigences de renouvellement annuel. Les équipes qui ont chiffré le temps d'ingénierie consacré à la gestion des modèles, aux solutions de contournement pour la conversion PDF et aux escalades liées aux langues non prises en charge constatent systématiquement que l'économie penche en faveur d'une bibliothèque commerciale par rapport à l'alternative gratuite.
Pour les équipes qui utilisent actuellement RapidOCR .NET en production ou qui l'évaluent pour un nouveau projet, le centre de tutoriels et les guides pratiques IronOCR constituent un point de départ concret. La migration est mécanique, le code est plus simple et la surface opérationnelle se réduit à une seule référence de paquet.
Questions Fréquemment Posées
Qu'est-ce que RapidOCR.NET ?
RapidOCR.NET est une solution OCR utilisée par les développeurs et les entreprises pour extraire du texte d'images et de documents. Il s'agit de l'une des nombreuses options d'OCR évaluées aux côtés d'IronOCR pour le développement d'applications .NET.
Comment IronOCR se compare-t-il à RapidOCR.NET pour les développeurs .NET ?
IronOCR est une bibliothèque OCR .NET native de NuGet qui utilise IronTesseract comme moteur principal. Par rapport à RapidOCR.NET, elle offre un déploiement plus simple (pas d'installateurs SDK), un prix forfaitaire et une API C# propre sans interopérabilité COM ou dépendances cloud.
IronOcr est-il plus facile à installer que RapidOCR.NET ?
IronOCR s'installe via un seul package NuGet. Il n'y a pas d'installateur SDK, de fichiers de licence à copier, de composants COM à enregistrer ou de binaires d'exécution séparés à gérer. L'ensemble du moteur d'OCR est inclus dans le package.
Quelles sont les différences de précision entre RapidOCR.NET et IronOcr ?
IronOcr atteint une grande précision de reconnaissance pour les documents commerciaux standard, les factures, les reçus et les formulaires numérisés. Pour les documents très dégradés ou les scripts peu courants, la précision varie en fonction de la qualité de la source. IronOCR comprend des filtres de prétraitement d'image pour améliorer la reconnaissance sur des entrées de faible qualité.
IronOCR prend-il en charge l'extraction de texte au format PDF ?
Oui. IronOCR extrait le texte des PDF natifs et des images PDF numérisées en un seul appel. Il prend également en charge les fichiers TIFF multipages, les images et les flux. Pour les PDF numérisés, l'OCR est appliquée page par page avec des objets de résultat par page.
Comment la licence de RapidOCR.NET se compare-t-elle à celle d'IronOcr ?
IronOCR utilise une licence perpétuelle forfaitaire sans frais par page ou par scan. Les organisations qui traitent de gros volumes de documents paient le même coût de licence, quel que soit le volume. Les détails et la tarification au volume se trouvent sur la page de licence d'IronOCR.
Quelles langues IronOCR prend-il en charge ?
IronOcr prend en charge 127 langues via des packs linguistiques NuGet distincts. L'ajout d'une langue nécessite une seule commande "dotnet add package IronOcr.Languages.{Language}". Il n'est pas nécessaire de placer manuellement des fichiers ou de configurer des chemins d'accès.
Comment installer IronOCR dans un projet .NET ?
Installation via NuGet : 'Install-Package IronOcr' dans la console du Package Manager ou 'dotnet add package IronOcr' dans le CLI. Les packs de langues supplémentaires sont installés de la même manière. Aucun programme d'installation du SDK n'est nécessaire.
IronOCR est-il adapté à Docker et aux déploiements conteneurisés, contrairement à RapidOCR.NET ?
Oui. IronOCR fonctionne dans les conteneurs Docker via son package NuGet. La clé de licence est définie via une variable d'environnement. Aucun fichier de licence, chemin d'accès au SDK ou montage de volume n'est nécessaire pour le moteur OCR lui-même.
Puis-je essayer IronOCR avant de l'acheter, par rapport à RapidOCR.NET ?
Oui. Le mode d'essai d'IronOcr traite les documents et renvoie les résultats de l'OCR avec un filigrane en surimpression sur la sortie. Vous pouvez vérifier la précision sur vos propres documents avant d'acheter une licence.
IronOCR prend-il en charge la lecture de codes-barres parallèlement à l'extraction de texte ?
IronOCR se concentre sur l'extraction de texte et l'OCR. Pour la lecture de codes-barres, Iron Software propose IronBarcode comme bibliothèque d'accompagnement. Les deux sont disponibles individuellement ou dans le cadre de l'offre groupée Iron Suite.
Est-il facile de migrer de RapidOCR.NET à IronOcr ?
La migration de RapidOCR.NET vers IronOCR implique généralement le remplacement des séquences d'initialisation par l'instanciation d'IronTesseract, la suppression de la gestion du cycle de vie de COM et la mise à jour des appels d'API. La plupart des migrations réduisent considérablement la complexité du code.

