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

Une comparaison entre IronOCR et Aspose.OCR

Asprise OCR propose d'abord une bibliothèque Javaet considère .NETcomme une cible secondaire — et cette décision de conception se reflète à tous les niveaux du produit, depuis la documentation rédigée avec des exemples Javajusqu'à un modèle de déploiement binaire natif qui nécessite des DLL spécifiques à la plateforme (aocr.dll, aocr_x64.dll, libaocr.so, libaocr.dylib) sur chaque machine exécutant le logiciel. Le modèle de threads aggrave ce problème : les licences Lite et STANDARD sont contractuellement limitées à une exécution monothread et monoprocessus, ce qui signifie que chaque point de terminaison ASP.NET Core , service Windows ou fonction Azure qui appelle Asprise sur ces niveaux enfreint le contrat de licence. Pour les équipes .NETqui développent des systèmes de production, il ne s'agit pas de préoccupations théoriques, mais de véritables obstacles au déploiement qui obligent soit à acquérir des licences Enterprise coûteuses, soit à remplacer la bibliothèque avant d'atteindre la production.

Comprendre l'OCR d'Asprise

Asprise OCR est un produit OCR commercial d'Asprise Inc. Initialement conçu comme un moteur OCR Java, il a ensuite été compatible avec .NETgrâce à des bibliothèques natives assurant la liaison entre le code C# managé et les binaires OCR non managés sous-jacents. Cette architecture de pont est la caractéristique déterminante de la bibliothèque pour les développeurs .NET.

Principales caractéristiques architecturales :

  • Conception axée sur Java : toute la documentation principale, les exemples de code et les exemples du SDK sont écrits en Java. Les développeurs .NETtraduisent mentalement à partir de Javaou s'appuient sur une documentation secondaire éparse.
  • Dépendance binaire native : les DLL non gérées spécifiques à la plateforme doivent être présentes dans le répertoire de déploiement ou le chemin système. Le binaire correct doit correspondre à l'architecture du processus — les processus 32 bits nécessitent aocr.dll, les processus 64 bits nécessitent aocr_x64.dll.
  • Cycle de vie manuel du moteur : La bibliothèque expose un schéma d'initialisation de style C (Ocr.SetUp(), ocr.StartEngine(), ocr.StopEngine()) hérité de ses origines Java. Il n'y a pas de mise en œuvre de IDisposable. Oublier StopEngine() entraîne des fuites de mémoire native.
  • Restrictions de threads selon le niveau de licence : les niveaux Lite (~299 $) et STANDARD (~699 $) permettent uniquement une exécution monothread et monoprocessus. Le multithreading nécessite la Enterprise, ce qui implique de contacter le service commercial.
  • Codes d'erreur, pas d'exceptions : Les échecs de reconnaissance se manifestent par des retours nuls ou des chaînes de caractères préfixées avec "ERROR:", conformément aux conventions de codes d'erreur C/Java plutôt qu'aux modèles d'exception .NET.
  • Plus de 20 langues OCR : nettement moins que les alternatives conçues pour l'écosystème .NET.

Le problème du cycle de vie du moteur

Chaque appel OCR d'Asprise nécessite une gestion explicite du moteur. Le processus comporte quatre étapes obligatoires : configuration globale statique, création d'une instance, démarrage du moteur avec une chaîne de caractères de langue et arrêt du moteur une fois l'opération terminée. Ignorer l'arrêt du moteur entraîne des fuites de ressources natives car le ramasse-miettes ne peut pas libérer la mémoire non gérée :

// Asprise: four required steps before reading a single image
Ocr.SetUp();                              // Static global init
Ocr ocr = new Ocr();
try
{
    ocr.StartEngine("eng", Ocr.SPEED_FAST);   // Allocates native engine
    string text = ocr.Recognize(
        imagePath,
        Ocr.RECOGNIZE_TYPE_TEXT,
        Ocr.OUTPUT_FORMAT_PLAINTEXT);
    return text;
}
finally
{
    ocr.StopEngine();                         // Must call — no IDisposable fallback
}
// Asprise: four required steps before reading a single image
Ocr.SetUp();                              // Static global init
Ocr ocr = new Ocr();
try
{
    ocr.StartEngine("eng", Ocr.SPEED_FAST);   // Allocates native engine
    string text = ocr.Recognize(
        imagePath,
        Ocr.RECOGNIZE_TYPE_TEXT,
        Ocr.OUTPUT_FORMAT_PLAINTEXT);
    return text;
}
finally
{
    ocr.StopEngine();                         // Must call — no IDisposable fallback
}
' Asprise: four required steps before reading a single image
Ocr.SetUp()                              ' Static global init
Dim ocr As New Ocr()
Try
    ocr.StartEngine("eng", Ocr.SPEED_FAST)   ' Allocates native engine
    Dim text As String = ocr.Recognize( _
        imagePath, _
        Ocr.RECOGNIZE_TYPE_TEXT, _
        Ocr.OUTPUT_FORMAT_PLAINTEXT)
    Return text
Finally
    ocr.StopEngine()                         ' Must call — no IDisposable fallback
End Try
$vbLabelText   $csharpLabel

Ce schéma échoue silencieusement dans trois situations courantes : une exception non gérée avant que StopEngine() ne soit appelée, un chemin de code refactorisé qui ignore le nettoyage et une utilisation concurrente sur LITE/STANDARD où la licence interdit le threading qui permettrait même le parallélisme. Le bloc finally atténue le premier problème, mais la restriction de la licence rend le schéma caduc pour les charges de travail serveur de toute façon.

Comprendre IronOCR

IronOCR est une bibliothèque OCR commerciale conçue de A à Z for .NET. Il intègre un moteur Tesseract 5 optimisé avec prétraitement automatique, prise en charge native du format PDF et une API gérée qui respecte les conventions .NETstandard.

Caractéristiques principales :

  • Paquet NuGet unique : dotnet add package IronOcr installe tout — pas de gestion de binaire natif, pas de dossiers tessdata, pas de configuration spécifique à la plateforme.
  • Gestion des ressources IDisposable : OcrInput implémente IDisposable. L'instruction using gère le nettoyage automatiquement.
  • Gestion des threads sécurisée sur tous les niveaux de licence : aucune restriction artificielle du multithreading. Les instances IronTesseract peuvent être utilisées en parallèle sur la licence $999 Lite.
  • Prétraitement automatique : Les méthodes intégrées Deskew(), DeNoise(), Contrast(), Binarize() et EnhanceResolution() éliminent le besoin de bibliothèques de traitement d'images externes.
  • Entrée PDF native : transmettez directement un chemin PDF — aucune bibliothèque de rendu externe n'est requise pour convertir au préalable les pages en images.
  • Plus de 125 langues : Disponibles sous forme de packages NuGet distincts (IronOcr.Languages.French, etc.), installés uniquement lorsque nécessaire.
  • Sortie PDF avec texte indexable : result.SaveAsSearchablePdf() génère une sortie conforme à PDF/A à partir de tout résultat OCR.
  • Accès aux données structurées : les résultats présentent le texte au niveau du mot, de la ligne et du paragraphe avec les coordonnées en pixels et les scores de confiance par mot.

Comparaison des fonctionnalités

Fonction Asprise OCR IronOCR
Plateforme principale Java .NET
Déploiement NuGet Wrapper + DLL natives Forfait unique, sans supplément
Enfilage (tous niveaux) Enterprise uniquement Tous les niveaux
Utilisation d'applications serveur/web Enterprise uniquement Tous les niveaux
Entrée PDF native Non Oui
Prétraitement intégré Non Oui
Langues OCR 20+ 125+
Sortie PDF consultable Non Oui

Comparaison détaillée des fonctionnalités

Fonction Asprise OCR IronOCR
Architecture
Origine du design Java, .NETsecondaire .NETnatif
style API Style C avec constantes entières C# fluide
IDisposable / modèle using Non mis en œuvre Oui (OcrInput)
Gestion des erreurs Les valeurs nulles ou les chaînes d'erreur sont renvoyées. exceptions .NET
Propagation des exceptions depuis le natif lacunes d'interopérabilité Exceptions gérées
Utilisation des threads et du serveur
Multithreading — Niveau Lite Interdit Permis
Multithreading — Niveau STANDARD Interdit Permis
Multithreading — Enterprise/niveau supérieur Permis Permis
API Web ASP.NET Core Nécessite une Enterprise N'importe quel niveau
Azure Functions / AWS Lambda Nécessite une Enterprise N'importe quel niveau
Parallel.ForEach lot Nécessite une Enterprise N'importe quel niveau
Assistance à la saisie
Fichiers image (JPG, PNG, TIFF) Oui Oui
Entrée PDF native Non (bibliothèque externe requise) Oui
PDF protégé par mot de passe Non Oui
Entrée de tableau d'octets / flux Limité Oui
TIFF multipage Limité Oui
Prétraitement
Déclin Manuel / externe Intégré
Denoise Manuel / externe Intégré
Amélioration du contraste Manuel / externe Intégré
Binarisation Manuel / externe Intégré
Mise à l'échelle de la résolution (DPI) Manuel / externe Intégré
Sortir
Texte brut Oui Oui
Sortie PDF consultable Non Oui
Coordonnées du mot Limité Oui
Scores de confiance par mot Non Oui
Exportation hOCR Non Oui
Langues
Nombre de langues 20+ 125+
Installation linguistique Ensemble packages NuGet
Énumération de langage fortement typé Non (codes de chaîne) Oui (OcrLanguage)
Déploiement
binaire natif requis Oui (DLL spécifique à la plateforme) Non
Gestion des dossiers Tessdata Non Non
Docker Configuration binaire manuelle Prêt à l'emploi
Linux Nécessite libaocr.so NuGet gère
Tarification
Prix ​​d'entrée Contactez Asprise pour les prix (LITE, single-thread seulement) $999 (Lite, toutes les fonctionnalités)
Prix ​​d'entrée pour l'utilisation du serveur Enterprise (contacter le service commercial) $999 (Lite)

Architecture de pont .NETnatif vs Java

Pour les équipes .NET, la question fondamentale n'est pas de savoir quelle bibliothèque possède le plus de fonctionnalités sur le papier, mais laquelle se comporte comme un élément .NETà part entière dans les environnements de déploiement et d'exploitation qu'elles utilisent réellement.

Approche d'entreprise

Asprise assure la communication entre le code .NETmanagé et son moteur OCR non managé via le marshaling P/Invoke. La source asprise-vs-ironocr-examples.cs montre le mécanisme sous-jacent :

// Asprise interop layer — bridging managed C# to native OCR engine
[DllImport("aocr.dll")]
private static extern IntPtr OCR(string imagePath, int type);

public string ExtractText(string imagePath)
{
    // P/Invoke call into unmanaged DLL
    IntPtr result = OCR(imagePath, 0);
    return Marshal.PtrToStringAnsi(result);  // Manual string marshal
}
// Asprise interop layer — bridging managed C# to native OCR engine
[DllImport("aocr.dll")]
private static extern IntPtr OCR(string imagePath, int type);

public string ExtractText(string imagePath)
{
    // P/Invoke call into unmanaged DLL
    IntPtr result = OCR(imagePath, 0);
    return Marshal.PtrToStringAnsi(result);  // Manual string marshal
}
Imports System.Runtime.InteropServices

' Asprise interop layer — bridging managed VB.NET to native OCR engine
Private Class OCRInterop
    <DllImport("aocr.dll")>
    Private Shared Function OCR(imagePath As String, type As Integer) As IntPtr
    End Function

    Public Function ExtractText(imagePath As String) As String
        ' P/Invoke call into unmanaged DLL
        Dim result As IntPtr = OCR(imagePath, 0)
        Return Marshal.PtrToStringAnsi(result)  ' Manual string marshal
    End Function
End Class
$vbLabelText   $csharpLabel

Au niveau de l'API de plus haut niveau, les développeurs font appel au même pont via un wrapper de classe, mais l'exigence de déploiement ne change pas : chaque machine cible a besoin du binaire natif correct, dans le bon chemin, correspondant à l'architecture de processus correcte. Un déploiement 64 bits qui expédie avec aocr.dll au lieu de aocr_x64.dll lance un BadImageFormatException au moment de l'exécution. Un conteneur DockerLinux sans libaocr.so dans LD_LIBRARY_PATH lance DllNotFoundException. Aucune des deux erreurs n'est détectée lors de la compilation.

Approche d'IronOCR

IronOCR s'installe sous forme d'une seule référence NuGet . Le package gère toutes les dépendances natives en interne via le mécanisme de sélection de packages spécifique à la plateforme de NuGet :

// Installation — one command, all platforms
// dotnet add package IronOcr

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

// Basic OCR — no native binary setup, no tessdata, no config files
var text = new IronTesseract().Read("document.jpg").Text;
// Installation — one command, all platforms
// dotnet add package IronOcr

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

// Basic OCR — no native binary setup, no tessdata, no config files
var text = new IronTesseract().Read("document.jpg").Text;
Imports IronOcr

' Installation — one command, all platforms
' dotnet add package IronOcr

' License setup
IronOcr.License.LicenseKey = "YOUR-LICENSE-KEY"

' Basic OCR — no native binary setup, no tessdata, no config files
Dim text As String = New IronTesseract().Read("document.jpg").Text
$vbLabelText   $csharpLabel

L'instruction using sur OcrInput remplace les appels manuels de cycle de vie du moteur. Il n'y a aucun StartEngine() à appeler et aucun StopEngine() à oublier. Le ramasse-miettes et le modèle IDisposable gèrent correctement le nettoyage dans les scénarios d'exception sans nécessiter d'échafaudage try/finally autour de chaque appel OCR.

Pour des instructions d'installation détaillées, consultez le guide d'installation d'IronTesseract .

Modèle de filetage

La restriction du nombre de threads constitue la différence la plus importante entre Asprise et les alternatives pour les développeurs de serveurs .NET. Il ne s'agit pas d'un problème de performance, mais d'un problème de conformité des licences.

Approche d'entreprise

Les licences Lite et STANDARD interdisent explicitement l'exécution multithread et multiprocessus. Tout code appelant Asprise depuis plusieurs threads simultanément enfreint le contrat de licence relatif à ces niveaux. ASP.NET Core traite par défaut les requêtes sur un pool de threads. Cela fait de chaque contrôleur d'API Web standard qui appelle Asprise une violation de licence sur Lite/STANDARD :

// ASPRISE LITE/STANDARD — violates license in ASP.NET Core context
// Web server thread pool = multiple concurrent threads = prohibited
[ApiController]
public class OcrController : ControllerBase
{
    [HttpPost("extract")]
    public IActionResult ExtractText(IFormFile file)
    {
        // Two concurrent requests = two threads = license violation
        var ocr = new Ocr();
        ocr.StartEngine("eng", Ocr.SPEED_FAST);
        var text = ocr.Recognize(tempPath, Ocr.RECOGNIZE_TYPE_TEXT, Ocr.OUTPUT_FORMAT_PLAINTEXT);
        ocr.StopEngine();
        return Ok(text);
    }
}
// ASPRISE LITE/STANDARD — violates license in ASP.NET Core context
// Web server thread pool = multiple concurrent threads = prohibited
[ApiController]
public class OcrController : ControllerBase
{
    [HttpPost("extract")]
    public IActionResult ExtractText(IFormFile file)
    {
        // Two concurrent requests = two threads = license violation
        var ocr = new Ocr();
        ocr.StartEngine("eng", Ocr.SPEED_FAST);
        var text = ocr.Recognize(tempPath, Ocr.RECOGNIZE_TYPE_TEXT, Ocr.OUTPUT_FORMAT_PLAINTEXT);
        ocr.StopEngine();
        return Ok(text);
    }
}
Imports Microsoft.AspNetCore.Mvc

' ASPRISE LITE/STANDARD — violates license in ASP.NET Core context
' Web server thread pool = multiple concurrent threads = prohibited
<ApiController>
Public Class OcrController
    Inherits ControllerBase

    <HttpPost("extract")>
    Public Function ExtractText(file As IFormFile) As IActionResult
        ' Two concurrent requests = two threads = license violation
        Dim ocr As New Ocr()
        ocr.StartEngine("eng", Ocr.SPEED_FAST)
        Dim text As String = ocr.Recognize(tempPath, Ocr.RECOGNIZE_TYPE_TEXT, Ocr.OUTPUT_FORMAT_PLAINTEXT)
        ocr.StopEngine()
        Return Ok(text)
    End Function
End Class
$vbLabelText   $csharpLabel

Le traitement par lots sur Lite/STANDARD est forcé en mode séquentiel quel que soit le nombre de cœurs de processeur disponibles :

// ASPRISE LITE/STANDARD — sequential only (100 docs at 2 sec each = 3+ minutes)
Ocr.SetUp();
Ocr ocr = new Ocr();
try
{
    ocr.StartEngine("eng", Ocr.SPEED_FAST);
    foreach (var path in imagePaths)  // Cannot use Parallel.ForEach — license violation
    {
        string text = ocr.Recognize(path, Ocr.RECOGNIZE_TYPE_TEXT, Ocr.OUTPUT_FORMAT_PLAINTEXT);
        results.Add(text);
    }
}
finally
{
    ocr.StopEngine();
}
// ASPRISE LITE/STANDARD — sequential only (100 docs at 2 sec each = 3+ minutes)
Ocr.SetUp();
Ocr ocr = new Ocr();
try
{
    ocr.StartEngine("eng", Ocr.SPEED_FAST);
    foreach (var path in imagePaths)  // Cannot use Parallel.ForEach — license violation
    {
        string text = ocr.Recognize(path, Ocr.RECOGNIZE_TYPE_TEXT, Ocr.OUTPUT_FORMAT_PLAINTEXT);
        results.Add(text);
    }
}
finally
{
    ocr.StopEngine();
}
' ASPRISE LITE/STANDARD — sequential only (100 docs at 2 sec each = 3+ minutes)
Ocr.SetUp()
Dim ocr As New Ocr()
Try
    ocr.StartEngine("eng", Ocr.SPEED_FAST)
    For Each path In imagePaths ' Cannot use Parallel.ForEach — license violation
        Dim text As String = ocr.Recognize(path, Ocr.RECOGNIZE_TYPE_TEXT, Ocr.OUTPUT_FORMAT_PLAINTEXT)
        results.Add(text)
    Next
Finally
    ocr.StopEngine()
End Try
$vbLabelText   $csharpLabel

ENTERPRISE supprime la limitation de thread, mais ENTERPRISE nécessite de contacter les ventes d'Asprise avec un prix non publié.

Approche d'IronOCR

IronTesseract est thread-safe et ne comporte aucune restriction de threading sur aucun niveau de licence. Le traitement par lots parallèle sur une licence $999 Lite est entièrement pris en charge :

// IronOCR — parallel batch on any license tier
// 100 docs at 2 sec each, 8 cores = ~25 seconds vs 200 seconds sequential
var results = imagePaths
    .AsParallel()
    .Select(path => new IronTesseract().Read(path).Text)
    .ToList();
// IronOCR — parallel batch on any license tier
// 100 docs at 2 sec each, 8 cores = ~25 seconds vs 200 seconds sequential
var results = imagePaths
    .AsParallel()
    .Select(path => new IronTesseract().Read(path).Text)
    .ToList();
Imports System.Linq

' IronOCR — parallel batch on any license tier
' 100 docs at 2 sec each, 8 cores = ~25 seconds vs 200 seconds sequential
Dim results = imagePaths _
    .AsParallel() _
    .Select(Function(path) (New IronTesseract()).Read(path).Text) _
    .ToList()
$vbLabelText   $csharpLabel

Les contrôleurs ASP.NET Core fonctionnent sans configuration particulière :

// IronOCR — concurrent requests on any license tier
[ApiController]
public class OcrController : ControllerBase
{
    [HttpPost("extract")]
    public IActionResult ExtractText(IFormFile file)
    {
        // Thread-safe on Lite, Plus, Professional, Unlimited — all tiers
        var text = new IronTesseract().Read(tempPath).Text;
        return Ok(text);
    }
}
// IronOCR — concurrent requests on any license tier
[ApiController]
public class OcrController : ControllerBase
{
    [HttpPost("extract")]
    public IActionResult ExtractText(IFormFile file)
    {
        // Thread-safe on Lite, Plus, Professional, Unlimited — all tiers
        var text = new IronTesseract().Read(tempPath).Text;
        return Ok(text);
    }
}
Imports Microsoft.AspNetCore.Mvc

<ApiController>
Public Class OcrController
    Inherits ControllerBase

    <HttpPost("extract")>
    Public Function ExtractText(file As IFormFile) As IActionResult
        ' Thread-safe on Lite, Plus, Professional, Unlimited — all tiers
        Dim text = New IronTesseract().Read(tempPath).Text
        Return Ok(text)
    End Function
End Class
$vbLabelText   $csharpLabel

Consultez l' exemple de multithreading pour les modèles de débit parallèle dans les charges de travail par lots.

Prétraitement d'images

Asprise transmet les images à son moteur natif sans prétraitement. Les numérisations de mauvaise qualité (pages déformées, artefacts de bruit, faible contraste) dégradent directement la précision de la reconnaissance optique de caractères (OCR) car il n'existe aucune couche de prétraitement pour corriger les défauts de l'image avant la reconnaissance.

Approche d'entreprise

Le prétraitement nécessite une bibliothèque d'images externe. Un développeur travaillant avec Asprise ajoute une dépendance telle que ImageMagick, SkiaSharp ou System.Drawing, exécute manuellement les opérations de prétraitement, enregistre l'image traitée dans un fichier temporaire, puis transmet ce fichier à Asprise :

// Asprise preprocessing: external dependency required
// 1. Load with external library
// 2. Apply corrections (deskew, denoise, contrast) with external library
// 3. Save to temp file
// 4. Pass temp file to Asprise

var ocr = new Ocr();
ocr.StartEngine("eng", Ocr.SPEED_FAST);
// preprocessedImagePath comes from your external preprocessing pipeline
string text = ocr.Recognize(preprocessedImagePath, Ocr.RECOGNIZE_TYPE_TEXT, Ocr.OUTPUT_FORMAT_PLAINTEXT);
ocr.StopEngine();
// Asprise preprocessing: external dependency required
// 1. Load with external library
// 2. Apply corrections (deskew, denoise, contrast) with external library
// 3. Save to temp file
// 4. Pass temp file to Asprise

var ocr = new Ocr();
ocr.StartEngine("eng", Ocr.SPEED_FAST);
// preprocessedImagePath comes from your external preprocessing pipeline
string text = ocr.Recognize(preprocessedImagePath, Ocr.RECOGNIZE_TYPE_TEXT, Ocr.OUTPUT_FORMAT_PLAINTEXT);
ocr.StopEngine();
' Asprise preprocessing: external dependency required
' 1. Load with external library
' 2. Apply corrections (deskew, denoise, contrast) with external library
' 3. Save to temp file
' 4. Pass temp file to Asprise

Dim ocr As New Ocr()
ocr.StartEngine("eng", Ocr.SPEED_FAST)
' preprocessedImagePath comes from your external preprocessing pipeline
Dim text As String = ocr.Recognize(preprocessedImagePath, Ocr.RECOGNIZE_TYPE_TEXT, Ocr.OUTPUT_FORMAT_PLAINTEXT)
ocr.StopEngine()
$vbLabelText   $csharpLabel

Cela ajoute une dépendance de compilation, une surcharge d'exécution due à la bibliothèque supplémentaire et exige que le développeur comprenne suffisamment bien le traitement d'images pour mettre en œuvre des corrections efficaces.

Approche d'IronOCR

Le prétraitement est intégré dans OcrInput. Le même pipeline qui nécessitait 50 à 100 lignes avec une bibliothèque externe et un réglage précis des paramètres se réduit désormais à cinq appels de méthode :

// IronOCR — preprocessing built in, no external dependencies
using var input = new OcrInput();
input.LoadImage("low-quality-scan.jpg");
input.Deskew();               // Correct page rotation
input.DeNoise();              // Remove scanner artifacts
input.Contrast();             // Improve text/background separation
input.Binarize();             // Convert to black/white for cleaner engine input
input.EnhanceResolution(300); // Scale to optimal DPI

var result = new IronTesseract().Read(input);
Console.WriteLine($"Confidence: {result.Confidence}%");
// IronOCR — preprocessing built in, no external dependencies
using var input = new OcrInput();
input.LoadImage("low-quality-scan.jpg");
input.Deskew();               // Correct page rotation
input.DeNoise();              // Remove scanner artifacts
input.Contrast();             // Improve text/background separation
input.Binarize();             // Convert to black/white for cleaner engine input
input.EnhanceResolution(300); // Scale to optimal DPI

var result = new IronTesseract().Read(input);
Console.WriteLine($"Confidence: {result.Confidence}%");
Imports IronOcr

' IronOCR — preprocessing built in, no external dependencies
Using input As New OcrInput()
    input.LoadImage("low-quality-scan.jpg")
    input.Deskew()               ' Correct page rotation
    input.DeNoise()              ' Remove scanner artifacts
    input.Contrast()             ' Improve text/background separation
    input.Binarize()             ' Convert to black/white for cleaner engine input
    input.EnhanceResolution(300) ' Scale to optimal DPI

    Dim result = New IronTesseract().Read(input)
    Console.WriteLine($"Confidence: {result.Confidence}%")
End Using
$vbLabelText   $csharpLabel

Pour les numérisations où la rotation est imprévisible, la correction automatique de l'angle de rotation gère les angles arbitraires sans que le développeur ait besoin de détecter ou de spécifier les valeurs de rotation. Le guide de correction de la qualité d'image couvre l'ensemble des filtres et explique quand appliquer chacun d'eux.

Traitement de PDF

L'importation de fichiers PDF est une exigence fréquente dans les chaînes de traitement de documents. Asprise ne prend pas en charge nativement le format PDF — la bibliothèque fonctionne avec des fichiers image. Le traitement d'un PDF avec Asprise nécessite d'abord la conversion de chaque page en image à l'aide d'une bibliothèque externe, puis le traitement individuel de chaque fichier image.

Approche d'entreprise

// Asprise PDF workaround — external library required to render PDF pages
var images = ExternalPdfLibrary.RenderPages("invoice.pdf");

Ocr.SetUp();
Ocr ocr = new Ocr();
try
{
    ocr.StartEngine("eng", Ocr.SPEED_FAST);
    var allText = new System.Text.StringBuilder();
    foreach (var imagePath in images)
    {
        string pageText = ocr.Recognize(imagePath, Ocr.RECOGNIZE_TYPE_TEXT, Ocr.OUTPUT_FORMAT_PLAINTEXT);
        allText.Append(pageText);
    }
    return allText.ToString();
}
finally
{
    ocr.StopEngine();
}
// Also: clean up temp image files
// Asprise PDF workaround — external library required to render PDF pages
var images = ExternalPdfLibrary.RenderPages("invoice.pdf");

Ocr.SetUp();
Ocr ocr = new Ocr();
try
{
    ocr.StartEngine("eng", Ocr.SPEED_FAST);
    var allText = new System.Text.StringBuilder();
    foreach (var imagePath in images)
    {
        string pageText = ocr.Recognize(imagePath, Ocr.RECOGNIZE_TYPE_TEXT, Ocr.OUTPUT_FORMAT_PLAINTEXT);
        allText.Append(pageText);
    }
    return allText.ToString();
}
finally
{
    ocr.StopEngine();
}
// Also: clean up temp image files
Imports System.Text

' Asprise PDF workaround — external library required to render PDF pages
Dim images = ExternalPdfLibrary.RenderPages("invoice.pdf")

Ocr.SetUp()
Dim ocr As New Ocr()
Try
    ocr.StartEngine("eng", Ocr.SPEED_FAST)
    Dim allText As New StringBuilder()
    For Each imagePath In images
        Dim pageText As String = ocr.Recognize(imagePath, Ocr.RECOGNIZE_TYPE_TEXT, Ocr.OUTPUT_FORMAT_PLAINTEXT)
        allText.Append(pageText)
    Next
    Return allText.ToString()
Finally
    ocr.StopEngine()
End Try
' Also: clean up temp image files
$vbLabelText   $csharpLabel

Cette approche ajoute une dépendance au rendu PDF (généralement iText, PDFSharp ou un moteur commercial), nécessite une gestion des fichiers temporaires, et perd les métadonnées et la structure PDF qu'un lecteur PDF natif préserverait. Les fichiers PDF protégés par mot de passe nécessitent un troisième élément.

Approche d'IronOCR

IronOCR lit directement les fichiers PDF. La méthode OcrInput.LoadPdf() gère le rendu en interne, y compris les documents multipages et les fichiers protégés par mot de passe :

// IronOCR — native PDF input, no external rendering library
using var input = new OcrInput();
input.LoadPdf("invoice.pdf");
var result = new IronTesseract().Read(input);
Console.WriteLine(result.Text);

// Password-protected PDFs — same API, one parameter
using var secureInput = new OcrInput();
secureInput.LoadPdf("confidential.pdf", Password: "secret");
var secureResult = new IronTesseract().Read(secureInput);

// Generate searchable PDF from a scanned document
var scanResult = new IronTesseract().Read("scanned-contract.pdf");
scanResult.SaveAsSearchablePdf("searchable-contract.pdf");
// IronOCR — native PDF input, no external rendering library
using var input = new OcrInput();
input.LoadPdf("invoice.pdf");
var result = new IronTesseract().Read(input);
Console.WriteLine(result.Text);

// Password-protected PDFs — same API, one parameter
using var secureInput = new OcrInput();
secureInput.LoadPdf("confidential.pdf", Password: "secret");
var secureResult = new IronTesseract().Read(secureInput);

// Generate searchable PDF from a scanned document
var scanResult = new IronTesseract().Read("scanned-contract.pdf");
scanResult.SaveAsSearchablePdf("searchable-contract.pdf");
Imports IronOcr

' IronOCR — native PDF input, no external rendering library
Using input As New OcrInput()
    input.LoadPdf("invoice.pdf")
    Dim result = New IronTesseract().Read(input)
    Console.WriteLine(result.Text)
End Using

' Password-protected PDFs — same API, one parameter
Using secureInput As New OcrInput()
    secureInput.LoadPdf("confidential.pdf", Password:="secret")
    Dim secureResult = New IronTesseract().Read(secureInput)
End Using

' Generate searchable PDF from a scanned document
Dim scanResult = New IronTesseract().Read("scanned-contract.pdf")
scanResult.SaveAsSearchablePdf("searchable-contract.pdf")
$vbLabelText   $csharpLabel

Le guide OCR PDF aborde la sélection de la plage de pages, la gestion des types de PDF mixtes et la sortie de PDF consultables pour les flux de travail d'archivage.

Référence de mappage d'API

Asprise OCR Équivalent d'IronOCR
Ocr.SetUp() Non requis
new Ocr() new IronTesseract()
ocr.StartEngine("eng", Ocr.SPEED_FAST) Non requis (le moteur s'initialise lors de la première utilisation)
ocr.Recognize(path, type, format) ocr.Read(path)
Ocr.RECOGNIZE_TYPE_TEXT Comportement par défaut
Ocr.RECOGNIZE_TYPE_BARCODE ocr.Configuration.ReadBarCodes = true
Ocr.RECOGNIZE_TYPE_ALL ocr.Configuration.ReadBarCodes = true
Ocr.OUTPUT_FORMAT_PLAINTEXT result.Text
Ocr.OUTPUT_FORMAT_XML result.Words / résultat structuré
Ocr.OUTPUT_FORMAT_PDF result.SaveAsSearchablePdf()
Ocr.SPEED_FASTEST ocr.Configuration réglages de vitesse
Ocr.SPEED_FAST Configuration par défaut
Ocr.SPEED_SLOW Configuration de plus haute précision
ocr.StopEngine() Non requis (using gère le nettoyage)
Chaîne de langue "eng+fra" ocr.Language = OcrLanguage.English ; ocr.AddSecondaryLanguage(OcrLanguage.French)
Nettoyage manuel/final using var input = new OcrInput()
valeur de retour de la chaîne d'erreur Exceptions .NETStandard

Quand les équipes envisagent de passer d'Asprise à IronOCR

Le bloqueur de préparation à la production

La restriction du nombre de threads constitue un obstacle majeur pour la plupart des charges de travail .NETen production. Une équipe développe une fonctionnalité OCR à l'aide d'Asprise Lite — les tests monothread sont concluants, tout fonctionne. Ensuite, la fonctionnalité est déployée dans un environnement de test derrière une API ASP.NET Core , des requêtes de test simultanées arrivent et l'application génère des erreurs ou fonctionne dans un état techniquement non conforme. La solution consiste soit à passer à la Enterprise (avec les coûts et l'implication commerciale que cela implique), soit à remplacer la bibliothèque. Les équipes qui atteignent ce stade lors de la phase de préproduction plutôt qu'en production sont chanceuses ; Ceux qui le découvrent après son lancement sont confrontés à une migration plus urgente. IronOCR élimine toute cette classe de problème — la licence $999 Lite prend en charge le traitement des requêtes concurrentes, le traitement parallèle par lots, les services Windows et les fonctions cloud sans restriction.

La taxe sur la complexité du déploiement

Les équipes qui travaillent dans des environnements de déploiement modernes (conteneurs Docker, machines virtuelles Linux, pods Kubernetes) paient avec Asprise des frais de maintenance continus qui n'existent pas avec les packages NuGet purs. Chaque image de conteneur doit inclure le binaire natif approprié pour l'architecture cible. Chaque pipeline CI/CD ciblant plusieurs plateformes doit gérer l'inclusion de fichiers spécifiques à chaque plateforme. L'absence d'une bibliothèque native sur un conteneur Linuxde production est une découverte lors de l'exécution, et non une erreur de compilation. Les équipes qui ont passé des heures à déboguer une DLL 32 bits chargée dans un processus 64 bits comprennent concrètement le coût. Le déploiement d'IronOCR basé exclusivement sur NuGet élimine toute cette catégorie d'échec de déploiement.

Le problème de la documentation Java

Les équipes qui développent des applications .NETont besoin d'exemples en C#, et non en Java. La documentation principale d'Asprise, ses références API et ses ressources communautaires sont destinées aux développeurs Java. Un développeur .NETqui consulte la documentation Asprise traduit la syntaxe Java, les conventions des packages Javaet les modèles spécifiques à Javaen équivalents C# — et parfois la traduction n'est pas directe car le wrapper .NETn'expose pas toutes les fonctionnalités côté Java. La documentation, les tutoriels et les exemples de code d'IronOCR sont rédigés pour les développeurs C#. Le tutoriel sur la lecture de texte à partir d'images et le centre de tutoriels complet fournissent des exemples C# fonctionnels pour chaque fonctionnalité, sans surcharge de traduction.

Le fossé du pipeline PDF

Les équipes qui traitent des documents numérisés, des factures, des contrats ou des formulaires au format PDF ne peuvent pas utiliser Asprise sans ajouter une bibliothèque de rendu PDF à leur graphe de dépendances. Cette bibliothèque de rendu introduit ses propres considérations de licence, une charge de maintenance supplémentaire et des incompatibilités potentielles. Pour les équipes qui ont besoin de l'OCR et du PDF dans une seule et même solution, IronOCR gère les deux nativement. La possibilité de créer des PDF consultables à partir de données numérisées — une exigence courante pour les flux de travail d'archivage et de conformité — n'a pas d'équivalent dans Asprise, quel que soit le niveau de licence.

Le déficit de couverture linguistique

Asprise prend en charge plus de 20 langues OCR. IronOCR prend en charge plus de 125 technologies, chacune installable en tant que package NuGet indépendant. Les équipes traitant des documents en arabe, en hindi, en thaï ou dans l'une des dizaines d'autres langues prises en charge par IronOCR mais non par Asprise ne peuvent pas bénéficier du support multilingue via Asprise. Le guide multilingue explique comment installer et combiner les modules linguistiques, y compris la reconnaissance simultanée de plusieurs systèmes d'écriture.

Considérations courantes en matière de migration

Remplacement du code de cycle de vie du moteur

Le plus grand changement mécanique de la migration consiste à supprimer le modèle de cycle de vie du moteur Asprise et à le remplacer par une instanciation directe IronTesseract. Chaque occurrence de la séquence SetUp() / StartEngine() / Recognize() / StopEngine() devient un seul appel Read() :

// Before: Asprise lifecycle (15 lines, manual cleanup)
Ocr.SetUp();
Ocr ocr = new Ocr();
try
{
    ocr.StartEngine("eng", Ocr.SPEED_FAST);
    string text = ocr.Recognize(
        imagePath,
        Ocr.RECOGNIZE_TYPE_TEXT,
        Ocr.OUTPUT_FORMAT_PLAINTEXT);
    return text;
}
finally
{
    ocr.StopEngine();
}

// After: IronOCR (1 line)
return new IronTesseract().Read(imagePath).Text;
// Before: Asprise lifecycle (15 lines, manual cleanup)
Ocr.SetUp();
Ocr ocr = new Ocr();
try
{
    ocr.StartEngine("eng", Ocr.SPEED_FAST);
    string text = ocr.Recognize(
        imagePath,
        Ocr.RECOGNIZE_TYPE_TEXT,
        Ocr.OUTPUT_FORMAT_PLAINTEXT);
    return text;
}
finally
{
    ocr.StopEngine();
}

// After: IronOCR (1 line)
return new IronTesseract().Read(imagePath).Text;
' Before: Asprise lifecycle (15 lines, manual cleanup)
Ocr.SetUp()
Dim ocr As New Ocr()
Try
    ocr.StartEngine("eng", Ocr.SPEED_FAST)
    Dim text As String = ocr.Recognize( _
        imagePath, _
        Ocr.RECOGNIZE_TYPE_TEXT, _
        Ocr.OUTPUT_FORMAT_PLAINTEXT)
    Return text
Finally
    ocr.StopEngine()
End Try

' After: IronOCR (1 line)
Return New IronTesseract().Read(imagePath).Text
$vbLabelText   $csharpLabel

Pour un code sensible aux performances qui traite de nombreux documents de manière séquentielle, réutilisez l'instance IronTesseract plutôt que d'en créer une nouvelle par appel — l'initialisation du moteur entraîne des frais généraux, et une seule instance utilisée séquentiellement est plus efficace que d'en créer et en supprimer une par document.

Remplacement des codes de langage basés sur des chaînes de caractères

Asprise utilise des paramètres de chaîne pour la sélection des langues ("eng", "fra", "eng+fra"). IronOCR utilise un OcrLanguage enum fortement typé avec une API de langue secondaire. Le guide multilingue répertorie les identifiants de langue disponibles et les packages NuGet requis pour chacun :

// Before: Asprise string-based language
ocr.StartEngine("eng+fra", Ocr.SPEED_FAST);

// After: IronOCR strongly-typed language enum
var ocr = new IronTesseract();
ocr.Language = OcrLanguage.English;
ocr.AddSecondaryLanguage(OcrLanguage.French);
var result = ocr.Read(imagePath);
// Before: Asprise string-based language
ocr.StartEngine("eng+fra", Ocr.SPEED_FAST);

// After: IronOCR strongly-typed language enum
var ocr = new IronTesseract();
ocr.Language = OcrLanguage.English;
ocr.AddSecondaryLanguage(OcrLanguage.French);
var result = ocr.Read(imagePath);
Imports IronOcr

' Before: Asprise string-based language
ocr.StartEngine("eng+fra", Ocr.SPEED_FAST)

' After: IronOCR strongly-typed language enum
Dim ocr As New IronTesseract()
ocr.Language = OcrLanguage.English
ocr.AddSecondaryLanguage(OcrLanguage.French)
Dim result = ocr.Read(imagePath)
$vbLabelText   $csharpLabel

Remplacement des vérifications de chaînes d'erreur

Asprise renvoie null ou une chaîne de caractères préfixée par une erreur en cas d'échec de la reconnaissance. IronOCR génère des exceptions .NET. Remplacez les vérifications de null et de préfixe de chaîne par des blocs try/catch standards. Cela aligne la gestion des erreurs OCR avec le reste du modèle de gestion des exceptions .NETet donne accès aux traces de pile complètes et aux hiérarchies de types d'exceptions plutôt qu'aux chaînes d'erreur analysées.

Activation du traitement parallèle

Après la migration, les boucles de traitement par lots foreach existantes peuvent être converties en Parallel.ForEach ou PLINQ sans aucun souci de licence. Pour les lots de documents qui étaient auparavant traités séquentiellement sur Lite/STANDARD, le parallélisme est un multiplicateur de débit direct. Le guide sur l'OCR asynchrone couvre les modèles asynchrones pour les contextes d'applications Web où l'OCR non bloquant est préférable à la saturation du pool de threads.

Fonctionnalités supplémentaires d'IronOCR

Au-delà des domaines abordés dans cette comparaison, IronOCR offre des fonctionnalités qui n'ont pas d'équivalent dans Asprise :

  • Lecture de code-barres pendant l'OCR : Activez ocr.Configuration.ReadBarCodes = true pour extraire les codes-barres et QR codes des documents dans le même passage que la reconnaissance de texte — pas besoin de bibliothèque secondaire.
  • OCR basé sur une région : Utilisez CropRectangle pour extraire le texte de zones spécifiques d'un document, utile pour les en-têtes de factures, les champs de formulaire et les zones de données structurées.
  • Scores de confiance : Accédez aux valeurs de confiance de reconnaissance par mot et globales pour signaler les extractions à faible confiance nécessitant une vérification humaine.
  • Extraction de données structurées : Navigation des objets de résultat par page, paragraphe, ligne et mot, chacun contenant des coordonnées en pixels — permettant une analyse de document tenant compte de la mise en page au-delà de la simple sortie de texte.
  • Exportation hOCR : Exporter les résultats de reconnaissance au format hOCR pour l'intégration avec les outils de traitement de documents en aval.
  • Reconnaissance de documents spécialisée : Flux de travail spécialement conçus pour les passeports, les chèques MICR, les plaques d'immatriculation et l'écriture manuscrite qui vont au-delà de la reconnaissance Tesseract générale.
  • Suivi de la progression : Abonnez-vous aux événements de progression pendant les opérations par lots de longue durée pour obtenir des commentaires et une surveillance de l'interface utilisateur.

Compatibilité .NETet préparation à l'avenir

IronOCR cible .NETStandard 2.0, qui couvre .NETFramework 4.6.1+, .NETCore 2.0+ et toutes les versions de .NET5 à .NET9 et au-delà. La bibliothèque reçoit des mises à jour régulières alignées sur les cycles de publication de .NETet est testée sur Windows x64, Windows x86, Linuxx64, macOS, Docker, Azure App Service et AWS Lambda. La compatibilité .NETd'Asprise est limitée par son modèle binaire natif : les nouvelles cibles de plateforme (ARM64, WASM) nécessitent de nouvelles versions natives d'Asprise Inc., et le rythme de publication privilégiant Javasignifie que les mises à jour de la plateforme .NETpeuvent prendre du retard. Pour les équipes qui ciblent aujourd'hui .NET8 et .NET9 et qui prévoient de passer à .NET10 en 2026, l'architecture NuGet gérée d'IronOCR offre une voie de compatibilité simple sans les problèmes liés aux binaires natifs.

Conclusion

Asprise OCR est une bibliothèque OCR Javaavec un wrapper .NET. L'héritage Javan'est pas fortuit : il définit le modèle de déploiement (DLL natives spécifiques à la plateforme), le style d'API (méthodes de cycle de vie de style C avec des constantes entières), le langage de documentation (exemples Javanécessitant une traduction) et les restrictions de threading (Lite/STANDARD monothread selon le contrat de licence). Pour les équipes Javaqui travaillent également sur un projet .NET, le positionnement multilingue d'Asprise a du sens. Pour les équipes .NETqui développent des systèmes de production, ces mêmes caractéristiques introduisent des frictions à chaque étape.

La restriction relative au filetage mérite une attention particulière. Les deux niveaux Asprise les plus abordables — qui couvrent la majorité des équipes évaluant le produit — interdisent l'exécution multithread et multiprocessus. Chaque API Web ASP.NET Core, chaque service Windows avec une file d'attente de tâches, chaque fonction Azure gérant des déclencheurs concurrents : ce sont des schémas de production standard .NET, et tous nécessitent une licence ENTERPRISE d'Asprise. La licence $999 Lite de IronOCR les couvre tous sans restriction.

La complexité du déploiement est la deuxième préoccupation pratique. Les équipes exécutant des conteneurs Docker, des builds Linuxou des pipelines CI/CD multiplateformes doivent gérer les binaires natifs spécifiques à la plateforme avec Asprise. Ces échecs — DllNotFoundException, BadImageFormatException — apparaissent à l'exécution sur l'infrastructure cible, pas au moment de la construction. IronOCR déploie par le biais de la gestion standard des packages NuGet, et le mécanisme de sélection des packages gère en interne les binaires spécifiques à la plateforme. La surface de déploiement est une simple référence NuGet .

Pour les équipes .NETdébutant une nouvelle intégration OCR, le point de départ est clair : un seul dotnet add package IronOcr, une affectation de clé de licence en une ligne, et new IronTesseract().Read("document.jpg").Text pour le premier résultat. Aucune initialisation du moteur, aucune source binaire native, aucun audit de licence de multithreading.

Veuillez noterAsprise OCR, PDFSharp, Tesseract et iText sont des marques déposées de leurs propriétaires respectifs. Ce site n'est pas affilié, approuvé ou sponsorisé par Asprise, 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.

Questions Fréquemment Posées

Qu'est-ce que Asprise OCR SDK ?

Asprise OCR SDK est une solution OCR utilisée par les développeurs et les entreprises pour extraire du texte à partir 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 à Asprise OCR SDK for .NET developers ?

IronOCR est une bibliothèque OCR .NET native de NuGet qui utilise IronTesseract comme moteur principal. Par rapport au SDK OCR d'Asprise, 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 qu'Asprise OCR SDK ?

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 Asprise OCR SDK 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 du SDK OCR d'Asprise 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 à Asprise OCR ?

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 à Asprise OCR ?

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 d'Asprise OCR SDK à IronOCR ?

La migration du SDK OCR d'Asprise 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.

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

Équipe de soutien Iron

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