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

AWS vs Google Vision (Comparaison des fonctionnalités OCR)

Dynamsoft Label Recognizer excelle dans un domaine précis : l'extraction des zones de référence des passeports, la numérisation des numéros VIN des véhicules et la lecture structurée des étiquettes sur les emballages industriels. Il refuse de faire quoi que ce soit d'autre. Cette expertise pointue devient un problème budgétaire dès lors que votre application a besoin d'une reconnaissance optique de caractères (OCR) générale pour les documents, car vous devez alors acquérir une licence pour Reconnaissance d'étiquettes Dynamsoft pour la reconnaissance de zones modifiées (MRZ), Dynamsoft Barcode Reader pour les codes QR, Dynamsoft Document Normalizer pour la détection des contours, et vous devez encore rechercher une quatrième bibliothèque pour gérer les documents pleine page. IronOCR couvre chacune de ces capacités dans un seul package NuGet à $999 perpétuelle.

Comprendre Dynamsoft Label Recognizer

La société Dynamsoft Corporation, dont le siège social est situé à Vancouver, au Canada, a conçu son produit Label Recognizer autour d'une proposition spécifique : la reconnaissance fiable de textes structurés lisibles par machine dans des formats contraints. Le produit NuGet package est Dynamsoft.DotNet.LabelRecognizer, et sa licence commerciale fonctionne exclusivement sur des abonnements annuels — aucune option perpétuelle n'existe. Contactez Dynamsoft pour connaître les prix actuels.

Le modèle de reconnaissance de la bibliothèque est basé sur des modèles. Vous configurez les tâches de reconnaissance via une API de paramètres JSON (AppendSettingsFromString) puis appelez RecognizeFile ou RecognizeByFile sur les fichiers image. Les résultats sont renvoyés sous forme de collections de lignes contenant des chaînes de texte brutes. L'analyse de ces chaînes de caractères en données structurées et significatives (décalages de champs, conversions de dates, validation des chiffres de contrôle) est entièrement de votre responsabilité.

Principales caractéristiques architecturales de Dynamsoft Label Recognizer :

  • Moteur de reconnaissance basé sur des modèles : les modèles MRZ, VIN et d'étiquettes nécessitent une configuration de modèle JSON avant la reconnaissance
  • Sortie de texte brut uniquement : RecognizeFile renvoie des objets LineResult avec des chaînes de texte ; pas d'analyse des champs structurés
  • Entrée d'images uniquement : aucune prise en charge native du format PDF ; Les fichiers PDF nécessitent une conversion externe en images avant traitement.
  • Licences par abonnement annuel : Niveaux par appareil et par serveur disponibles ; contactez Dynamsoft pour connaître les prix actuels ; no one-time purchase
  • Un produit distinct pour chaque fonctionnalité : la lecture de codes-barres, la normalisation de documents et l'optimisation de la caméra nécessitent chacune un produit sous licence distinct.
  • Couverture linguistique limitée : axée sur les formats MRZ à caractères latins ; manque d'une large prise en charge des documents multilingues

L'API des paramètres d'exécution JSON

Chaque flux de travail de Reconnaissance d'étiquettes Dynamsoft commence par une étape de configuration de modèle. La reconnaissance MRZ, par exemple, nécessite le chargement d'un document JSON qui déclare les paramètres de reconnaissance, les modèles de caractères et les références de région avant tout traitement d'image :

using Dynamsoft.DLR;

public class DynamsoftMrzService : IDisposable
{
    private readonly LabelRecognizer _recognizer;

    public DynamsoftMrzService(string licenseKey)
    {
        // Static license initialization — must precede instance creation
        LabelRecognizer.InitLicense(licenseKey);
        _recognizer = new LabelRecognizer();

        // MRZ requires specific template configuration loaded as JSON
        string mrzTemplate = @"{
            ""LabelRecognizerParameterArray"": [{
                ""Name"": ""MRZ"",
                ""ReferenceRegionNameArray"": [""FullImage""],
                ""CharacterModelName"": ""MRZ""
            }]
        }";
        _recognizer.AppendSettingsFromString(mrzTemplate);
    }

    public string ExtractRawMrz(string passportImagePath)
    {
        var results = _recognizer.RecognizeFile(passportImagePath);

        // Returns raw MRZ text lines only — no field parsing
        var mrzLines = new StringBuilder();
        foreach (var result in results)
        {
            foreach (var lineResult in result.LineResults)
            {
                mrzLines.AppendLine(lineResult.Text);
            }
        }
        return mrzLines.ToString().Trim();
    }

    public void Dispose() => _recognizer?.Dispose();
}
using Dynamsoft.DLR;

public class DynamsoftMrzService : IDisposable
{
    private readonly LabelRecognizer _recognizer;

    public DynamsoftMrzService(string licenseKey)
    {
        // Static license initialization — must precede instance creation
        LabelRecognizer.InitLicense(licenseKey);
        _recognizer = new LabelRecognizer();

        // MRZ requires specific template configuration loaded as JSON
        string mrzTemplate = @"{
            ""LabelRecognizerParameterArray"": [{
                ""Name"": ""MRZ"",
                ""ReferenceRegionNameArray"": [""FullImage""],
                ""CharacterModelName"": ""MRZ""
            }]
        }";
        _recognizer.AppendSettingsFromString(mrzTemplate);
    }

    public string ExtractRawMrz(string passportImagePath)
    {
        var results = _recognizer.RecognizeFile(passportImagePath);

        // Returns raw MRZ text lines only — no field parsing
        var mrzLines = new StringBuilder();
        foreach (var result in results)
        {
            foreach (var lineResult in result.LineResults)
            {
                mrzLines.AppendLine(lineResult.Text);
            }
        }
        return mrzLines.ToString().Trim();
    }

    public void Dispose() => _recognizer?.Dispose();
}
Imports Dynamsoft.DLR
Imports System.Text

Public Class DynamsoftMrzService
    Implements IDisposable

    Private ReadOnly _recognizer As LabelRecognizer

    Public Sub New(licenseKey As String)
        ' Static license initialization — must precede instance creation
        LabelRecognizer.InitLicense(licenseKey)
        _recognizer = New LabelRecognizer()

        ' MRZ requires specific template configuration loaded as JSON
        Dim mrzTemplate As String = "{
            ""LabelRecognizerParameterArray"": [{
                ""Name"": ""MRZ"",
                ""ReferenceRegionNameArray"": [""FullImage""],
                ""CharacterModelName"": ""MRZ""
            }]
        }"
        _recognizer.AppendSettingsFromString(mrzTemplate)
    End Sub

    Public Function ExtractRawMrz(passportImagePath As String) As String
        Dim results = _recognizer.RecognizeFile(passportImagePath)

        ' Returns raw MRZ text lines only — no field parsing
        Dim mrzLines As New StringBuilder()
        For Each result In results
            For Each lineResult In result.LineResults
                mrzLines.AppendLine(lineResult.Text)
            Next
        Next
        Return mrzLines.ToString().Trim()
    End Function

    Public Sub Dispose() Implements IDisposable.Dispose
        _recognizer?.Dispose()
    End Sub
End Class
$vbLabelText   $csharpLabel

La sortie de RecognizeFile est un texte brut MRZ tel que P<GBRSMITH<<JOHN<<<<<<<<<<<<<<<<<<<<<<<<<<<. Pour obtenir Surname = "SMITH", GivenNames = "JOHN", DocumentNumber, DateOfBirth, et ExpiryDate en tant que propriétés typées, vous implémentez un analyseur TD1/TD2/TD3 vous-même. La documentation Dynamsoft et les fichiers source de ce dépôt estiment cet analyseur à environ 150 lignes de code d'analyse — gérant les décalages de caractères, << les séparateurs de nom, la désambiguïsation de l'année sur deux chiffres, et la validation des chiffres de contrôle — rien de tout cela n'est fourni par Dynamsoft.

Comprendre IronOCR

IronOCR est une bibliothèque OCR .NET commerciale construite sur un moteur Tesseract 5 optimisé avec une couche API gérée qui prend en charge le prétraitement, les formats d'entrée, la sortie structurée et l'analyse de documents spécialisés. L'installation est une seule commande NuGet : dotnet add package IronOcr. Aucune gestion binaire native, aucune configuration de dossier tessdata, aucun fichier de configuration de modèle.

Caractéristiques principales :

  • Polyvalent et spécialisé : Prend en charge la reconnaissance optique de caractères (OCR) de documents pleine page, de PDF multipages, de lots d'images numérisées et de formats spécialisés (passeports, codes-barres, plaques d'immatriculation) à partir d'un seul et même logiciel.
  • Pipeline de prétraitement automatique : les opérations de redressement, de débruitage, de contraste, de binarisation et d'amélioration de la résolution s'exécutent sans configuration manuelle sur des entrées de mauvaise qualité.
  • Prise en charge native du format PDF : lecture directe des fichiers PDF numérisés et numériques, y compris les fichiers protégés par mot de passe, sans conversion externe.
  • Hiérarchie de sortie structurée : les résultats affichent les pages, les paragraphes, les lignes, les mots et les cadres de délimitation des caractères avec leurs scores de confiance.
  • Lecture de codes-barres intégrée : Activez ocr.Configuration.ReadBarCodes = true et les codes-barres sont extraits en même temps que le texte dans la même passe
  • Plus de 125 modules linguistiques : chaque langue s'installe en tant que package NuGet distinct ; aucune gestion de dossier de données de test n'est requise
  • Licence perpétuelle : $999 Lite, $1,499 Plus, $2,999 Professional — achat unique, toutes plateformes, toutes fonctionnalités incluses
  • Déploiement multiplateforme : Windows, Linux, macOS, Docker, AWS et Azure fonctionnent tous à partir du même package, sans configuration spécifique à la plateforme.

Comparaison des fonctionnalités

Fonction Reconnaissance d'étiquettes Dynamsoft IronOCR
OCR de documents généraux Non pris en charge Prise en charge complète
Extraction de MRZ Spécialisé (texte brut) Intégré avec des champs analysés
Entrée PDF native Non pris en charge Oui
Lecture de codes-barres Produit séparé (lecteur de codes-barres Dynamsoft) Intégré (ReadBarCodes)
Sortie PDF consultable Non pris en charge Oui
Soutien linguistique Limité (Latin MRZ) plus de 125 langues
Modèle de licence Abonnement annuel uniquement Options d'abonnement perpétuel +
Produits nécessaires pour une couverture complète 3+ 1

Comparaison détaillée des fonctionnalités

Fonction Reconnaissance d'étiquettes Dynamsoft IronOCR
Portée de la reconnaissance
OCR de documents généraux Non pris en charge Oui
Reconnaissance de la MRZ Spécialisé Oui (ReadPassport)
Reconnaissance du NIV Spécialisé Oui (via OCR standard)
lecture d'étiquettes industrielles Spécialisé Oui
Reconnaissance de l'écriture manuscrite Non pris en charge Oui
Extraction de tableaux Non pris en charge Oui
Formats d'entrée
Fichiers image (JPG, PNG, TIFF) Oui Oui
PDF (natif) Non pris en charge Oui
PDF protégé par mot de passe Non pris en charge Oui
Tableau d'octets / flux Oui Oui
Documents de plusieurs pages Agrégation manuelle Oui (natif)
Formats de sortie
Texte brut Oui (lignes brutes) Oui
Champs structurés (analysés) Non fourni Oui (Pages, Lignes, Mots)
PDF consultable Non pris en charge Oui
hOCR Non pris en charge Oui
scores de confiance Par ligne Par mot, par ligne et par page
Prétraitement
Prétraitement automatique Basique Oui (pipeline intelligent)
Correction de redressement/rotation Limité Oui
suppression du bruit Limité Oui
Amélioration du contraste Limité Oui
Normalisation DPI Non fourni Oui
Capacités d'intégration
Lecture de codes-barres Produit séparé Intégré
Normalisation des documents Produit séparé Non requis
OCR basé sur la région Oui (via des modèles) Oui (CropRectangle)
Traitement parallèle sécurisé pour les threads Oui Oui
Plateforme et déploiement
Fenêtres Oui Oui
Linux Oui Oui
macOS Oui Oui
Docker Oui Oui
Azure / AWS Oui Oui
Isolation physique / hors ligne Oui Oui
Licences et coûts
Abonnement annuel Oui (contactez Dynamsoft pour les prix) En option
Licence perpétuelle Non disponible Oui ($999 une fois)
Un seul package pour toutes les fonctionnalités Non (3 produits ou plus) Oui
Essai gratuit 30 jours Oui

Spécialiste vs généraliste Champ d'application

La décision architecturale la plus importante prise par Dynamsoft a été de concevoir un logiciel spécialisé, et non généraliste. Ce choix a des conséquences directes pour toute application qui, partant de la lecture de zones de mémoire tampon (MRZ) ou d'étiquettes, nécessite par la suite des fonctionnalités plus avancées.

Approche Dynamsoft

Dynamsoft Label Recognizer gère exactement ce que décrivent ses modèles JSON, et rien de plus. Une application de traitement des passeports construite sur Dynamsoft a besoin de trois produits avant de pouvoir gérer un flux de travail documentaire réel :

// Dynamsoft passport processing — MULTIPLE PRODUCTS REQUIRED

using Dynamsoft.DLR;  // Label Recognizer — for MRZ (annual subscription)
using Dynamsoft.DBR;  // Barcode Reader — for any barcodes (additional license)
// Plus: a separate OCR library — for full page text (more budget)

public class DynamsoftPassportProcessor : IDisposable
{
    private readonly LabelRecognizer _mrzRecognizer;
    private readonly BarcodeReader _barcodeReader;
    // private readonly SomeOtherOcrLibrary _fullTextOcr;  // third product

    public DynamsoftPassportProcessor(
        string mrzLicenseKey,
        string barcodeLicenseKey)
    {
        // License each product independently
        LabelRecognizer.InitLicense(mrzLicenseKey);
        _mrzRecognizer = new LabelRecognizer();

        // Configure MRZ template — JSON required before any recognition
        string mrzTemplate = @"{
            ""LabelRecognizerParameterArray"": [{
                ""Name"": ""MRZ_Passport"",
                ""ReferenceRegionNameArray"": [""FullImage""],
                ""CharacterModelName"": ""MRZ""
            }]
        }";
        _mrzRecognizer.AppendSettingsFromString(mrzTemplate);

        // Second product, second license key
        BarcodeReader.InitLicense(barcodeLicenseKey);
        _barcodeReader = new BarcodeReader();
    }

    public PassportResult ProcessPassport(string imagePath)
    {
        // Step 1: Extraction de MRZ — raw text only, no field parsing
        var mrzResults = _mrzRecognizer.RecognizeFile(imagePath);
        var mrzText = new StringBuilder();
        foreach (var r in mrzResults)
            foreach (var line in r.LineResults)
                mrzText.AppendLine(line.Text);

        // Step 2: Parse MRZ manually — your 150-line TD3 parser here
        var parsedMrz = ParseMrzManually(mrzText.ToString());

        // Step 3: Barcodes — second product, second API
        var barcodeResults = _barcodeReader.DecodeFile(imagePath);

        // Step 4: Full page text — THIRD library, no Dynamsoft option
        // var fullText = _fullTextOcr.ReadImage(imagePath);

        return new PassportResult
        {
            ParsedMrz = parsedMrz,
            Barcodes = barcodeResults.Select(b => b.BarcodeText).ToList(),
            FullPageText = null  // requires a fourth product
        };
    }

    public void Dispose()
    {
        _mrzRecognizer?.Dispose();
        _barcodeReader?.Dispose();
    }
}
// Dynamsoft passport processing — MULTIPLE PRODUCTS REQUIRED

using Dynamsoft.DLR;  // Label Recognizer — for MRZ (annual subscription)
using Dynamsoft.DBR;  // Barcode Reader — for any barcodes (additional license)
// Plus: a separate OCR library — for full page text (more budget)

public class DynamsoftPassportProcessor : IDisposable
{
    private readonly LabelRecognizer _mrzRecognizer;
    private readonly BarcodeReader _barcodeReader;
    // private readonly SomeOtherOcrLibrary _fullTextOcr;  // third product

    public DynamsoftPassportProcessor(
        string mrzLicenseKey,
        string barcodeLicenseKey)
    {
        // License each product independently
        LabelRecognizer.InitLicense(mrzLicenseKey);
        _mrzRecognizer = new LabelRecognizer();

        // Configure MRZ template — JSON required before any recognition
        string mrzTemplate = @"{
            ""LabelRecognizerParameterArray"": [{
                ""Name"": ""MRZ_Passport"",
                ""ReferenceRegionNameArray"": [""FullImage""],
                ""CharacterModelName"": ""MRZ""
            }]
        }";
        _mrzRecognizer.AppendSettingsFromString(mrzTemplate);

        // Second product, second license key
        BarcodeReader.InitLicense(barcodeLicenseKey);
        _barcodeReader = new BarcodeReader();
    }

    public PassportResult ProcessPassport(string imagePath)
    {
        // Step 1: Extraction de MRZ — raw text only, no field parsing
        var mrzResults = _mrzRecognizer.RecognizeFile(imagePath);
        var mrzText = new StringBuilder();
        foreach (var r in mrzResults)
            foreach (var line in r.LineResults)
                mrzText.AppendLine(line.Text);

        // Step 2: Parse MRZ manually — your 150-line TD3 parser here
        var parsedMrz = ParseMrzManually(mrzText.ToString());

        // Step 3: Barcodes — second product, second API
        var barcodeResults = _barcodeReader.DecodeFile(imagePath);

        // Step 4: Full page text — THIRD library, no Dynamsoft option
        // var fullText = _fullTextOcr.ReadImage(imagePath);

        return new PassportResult
        {
            ParsedMrz = parsedMrz,
            Barcodes = barcodeResults.Select(b => b.BarcodeText).ToList(),
            FullPageText = null  // requires a fourth product
        };
    }

    public void Dispose()
    {
        _mrzRecognizer?.Dispose();
        _barcodeReader?.Dispose();
    }
}
Imports Dynamsoft.DLR  ' Label Recognizer — for MRZ (annual subscription)
Imports Dynamsoft.DBR  ' Barcode Reader — for any barcodes (additional license)
' Plus: a separate OCR library — for full page text (more budget)

Public Class DynamsoftPassportProcessor
    Implements IDisposable

    Private ReadOnly _mrzRecognizer As LabelRecognizer
    Private ReadOnly _barcodeReader As BarcodeReader
    ' Private ReadOnly _fullTextOcr As SomeOtherOcrLibrary  ' third product

    Public Sub New(mrzLicenseKey As String, barcodeLicenseKey As String)
        ' License each product independently
        LabelRecognizer.InitLicense(mrzLicenseKey)
        _mrzRecognizer = New LabelRecognizer()

        ' Configure MRZ template — JSON required before any recognition
        Dim mrzTemplate As String = "{
            ""LabelRecognizerParameterArray"": [{
                ""Name"": ""MRZ_Passport"",
                ""ReferenceRegionNameArray"": [""FullImage""],
                ""CharacterModelName"": ""MRZ""
            }]
        }"
        _mrzRecognizer.AppendSettingsFromString(mrzTemplate)

        ' Second product, second license key
        BarcodeReader.InitLicense(barcodeLicenseKey)
        _barcodeReader = New BarcodeReader()
    End Sub

    Public Function ProcessPassport(imagePath As String) As PassportResult
        ' Step 1: Extraction de MRZ — raw text only, no field parsing
        Dim mrzResults = _mrzRecognizer.RecognizeFile(imagePath)
        Dim mrzText = New StringBuilder()
        For Each r In mrzResults
            For Each line In r.LineResults
                mrzText.AppendLine(line.Text)
            Next
        Next

        ' Step 2: Parse MRZ manually — your 150-line TD3 parser here
        Dim parsedMrz = ParseMrzManually(mrzText.ToString())

        ' Step 3: Barcodes — second product, second API
        Dim barcodeResults = _barcodeReader.DecodeFile(imagePath)

        ' Step 4: Full page text — THIRD library, no Dynamsoft option
        ' Dim fullText = _fullTextOcr.ReadImage(imagePath)

        Return New PassportResult With {
            .ParsedMrz = parsedMrz,
            .Barcodes = barcodeResults.Select(Function(b) b.BarcodeText).ToList(),
            .FullPageText = Nothing  ' requires a fourth product
        }
    End Function

    Public Sub Dispose() Implements IDisposable.Dispose
        _mrzRecognizer?.Dispose()
        _barcodeReader?.Dispose()
    End Sub
End Class
$vbLabelText   $csharpLabel

Le code ci-dessus ne gère toujours pas les entrées PDF. Si le scan du passeport arrive au format PDF plutôt qu'en JPEG, vous devez ajouter une bibliothèque de rendu PDF avant toute autre opération. L'intégration totale pour un véritable flux de travail de passeport : quatre produits, quatre clés de licence, quatre interfaces de maintenance.

Approche d'IronOCR

IronOCR gère le même flux de travail de passeport (analyse MRZ, OCR pleine page, codes-barres et saisie PDF) à partir d'un seul package :

using IronOcr;

public class IronOcrPassportProcessor
{
    private readonly IronTesseract _ocr;

    public IronOcrPassportProcessor()
    {
        _ocr = new IronTesseract();
        _ocr.Configuration.ReadBarCodes = true;  // barcodes included
    }

    public CompletePassportResult ProcessPassport(string imagePath)
    {
        // Structured MRZ fields — no manual parsing required
        var mrzData = _ocr.ReadPassport(imagePath);

        // Full page OCR + barcodes in the same call
        var fullResult = _ocr.Read(imagePath);

        return new CompletePassportResult
        {
            // MRZ fields are already parsed properties
            DocumentType    = mrzData.DocumentType,
            IssuingCountry  = mrzData.IssuingCountry,
            Surname         = mrzData.Surname,
            GivenNames      = mrzData.GivenNames,
            PassportNumber  = mrzData.DocumentNumber,
            Nationality     = mrzData.Nationality,
            DateOfBirth     = mrzData.DateOfBirth,
            ExpiryDate      = mrzData.ExpiryDate,
            RawMrz          = mrzData.MRZ,

            // Full page text from same package
            FullPageText    = fullResult.Text,

            // Barcodes alongside text — no separate product
            Barcodes        = fullResult.Barcodes.Select(b => b.Value).ToList(),

            Confidence      = fullResult.Confidence
        };
    }
}
using IronOcr;

public class IronOcrPassportProcessor
{
    private readonly IronTesseract _ocr;

    public IronOcrPassportProcessor()
    {
        _ocr = new IronTesseract();
        _ocr.Configuration.ReadBarCodes = true;  // barcodes included
    }

    public CompletePassportResult ProcessPassport(string imagePath)
    {
        // Structured MRZ fields — no manual parsing required
        var mrzData = _ocr.ReadPassport(imagePath);

        // Full page OCR + barcodes in the same call
        var fullResult = _ocr.Read(imagePath);

        return new CompletePassportResult
        {
            // MRZ fields are already parsed properties
            DocumentType    = mrzData.DocumentType,
            IssuingCountry  = mrzData.IssuingCountry,
            Surname         = mrzData.Surname,
            GivenNames      = mrzData.GivenNames,
            PassportNumber  = mrzData.DocumentNumber,
            Nationality     = mrzData.Nationality,
            DateOfBirth     = mrzData.DateOfBirth,
            ExpiryDate      = mrzData.ExpiryDate,
            RawMrz          = mrzData.MRZ,

            // Full page text from same package
            FullPageText    = fullResult.Text,

            // Barcodes alongside text — no separate product
            Barcodes        = fullResult.Barcodes.Select(b => b.Value).ToList(),

            Confidence      = fullResult.Confidence
        };
    }
}
Imports IronOcr

Public Class IronOcrPassportProcessor
    Private ReadOnly _ocr As IronTesseract

    Public Sub New()
        _ocr = New IronTesseract()
        _ocr.Configuration.ReadBarCodes = True ' barcodes included
    End Sub

    Public Function ProcessPassport(imagePath As String) As CompletePassportResult
        ' Structured MRZ fields — no manual parsing required
        Dim mrzData = _ocr.ReadPassport(imagePath)

        ' Full page OCR + barcodes in the same call
        Dim fullResult = _ocr.Read(imagePath)

        Return New CompletePassportResult With {
            ' MRZ fields are already parsed properties
            .DocumentType = mrzData.DocumentType,
            .IssuingCountry = mrzData.IssuingCountry,
            .Surname = mrzData.Surname,
            .GivenNames = mrzData.GivenNames,
            .PassportNumber = mrzData.DocumentNumber,
            .Nationality = mrzData.Nationality,
            .DateOfBirth = mrzData.DateOfBirth,
            .ExpiryDate = mrzData.ExpiryDate,
            .RawMrz = mrzData.MRZ,

            ' Full page text from same package
            .FullPageText = fullResult.Text,

            ' Barcodes alongside text — no separate product
            .Barcodes = fullResult.Barcodes.Select(Function(b) b.Value).ToList(),

            .Confidence = fullResult.Confidence
        }
    End Function
End Class
$vbLabelText   $csharpLabel

Un seul package, une seule clé de licence, une seule API. Pour le guide de lecture des passeports et la fonction de lecture des codes-barres , la documentation IronOCR les traite tous deux dans le même contexte produit car il s'agit du même produit.

Coût et complexité multiproduits

La construction d'un scanner d'inventaire d'entrepôt illustre le plus clairement la divergence du modèle de coûts. Le système doit lire les étiquettes des produits (texte), scanner les codes-barres (QR/EAN) et traiter les fichiers PDF d'expédition joints. Avec Dynamsoft, cela représente trois produits sous licence distincte avec des modèles d'initialisation différents.

Approche Dynamsoft

// Dynamsoft warehouse scanner — THREE products, THREE license keys

using Dynamsoft.DLR;  // Label Recognizer — product labels
using Dynamsoft.DBR;  // Barcode Reader — product barcodes
using Dynamsoft.DDN;  // Document Normalizer — document edge detection

public class DynamsoftWarehouseScanner : IDisposable
{
    private readonly LabelRecognizer _labelRecognizer;
    private readonly BarcodeReader _barcodeReader;
    private readonly DocumentNormalizer _documentNormalizer;

    public DynamsoftWarehouseScanner(
        string labelLicenseKey,
        string barcodeLicenseKey,
        string documentLicenseKey)
    {
        LabelRecognizer.InitLicense(labelLicenseKey);
        _labelRecognizer = new LabelRecognizer();

        BarcodeReader.InitLicense(barcodeLicenseKey);
        _barcodeReader = new BarcodeReader();

        DocumentNormalizer.InitLicense(documentLicenseKey);
        _documentNormalizer = new DocumentNormalizer();
    }

    public WarehouseItemResult ScanItem(string imagePath)
    {
        // Three separate API calls, three result types to aggregate manually
        var labelResults   = _labelRecognizer.RecognizeFile(imagePath);
        var barcodeResults = _barcodeReader.DecodeFile(imagePath);
        var docResults     = _documentNormalizer.Normalize(imagePath);

        // Merge three result sets into one model — your code
        return AggregateResults(labelResults, barcodeResults, docResults);
    }

    public void Dispose()
    {
        _labelRecognizer?.Dispose();
        _barcodeReader?.Dispose();
        _documentNormalizer?.Dispose();
    }
}
// Dynamsoft warehouse scanner — THREE products, THREE license keys

using Dynamsoft.DLR;  // Label Recognizer — product labels
using Dynamsoft.DBR;  // Barcode Reader — product barcodes
using Dynamsoft.DDN;  // Document Normalizer — document edge detection

public class DynamsoftWarehouseScanner : IDisposable
{
    private readonly LabelRecognizer _labelRecognizer;
    private readonly BarcodeReader _barcodeReader;
    private readonly DocumentNormalizer _documentNormalizer;

    public DynamsoftWarehouseScanner(
        string labelLicenseKey,
        string barcodeLicenseKey,
        string documentLicenseKey)
    {
        LabelRecognizer.InitLicense(labelLicenseKey);
        _labelRecognizer = new LabelRecognizer();

        BarcodeReader.InitLicense(barcodeLicenseKey);
        _barcodeReader = new BarcodeReader();

        DocumentNormalizer.InitLicense(documentLicenseKey);
        _documentNormalizer = new DocumentNormalizer();
    }

    public WarehouseItemResult ScanItem(string imagePath)
    {
        // Three separate API calls, three result types to aggregate manually
        var labelResults   = _labelRecognizer.RecognizeFile(imagePath);
        var barcodeResults = _barcodeReader.DecodeFile(imagePath);
        var docResults     = _documentNormalizer.Normalize(imagePath);

        // Merge three result sets into one model — your code
        return AggregateResults(labelResults, barcodeResults, docResults);
    }

    public void Dispose()
    {
        _labelRecognizer?.Dispose();
        _barcodeReader?.Dispose();
        _documentNormalizer?.Dispose();
    }
}
Imports Dynamsoft.DLR  ' Label Recognizer — product labels
Imports Dynamsoft.DBR  ' Barcode Reader — product barcodes
Imports Dynamsoft.DDN  ' Document Normalizer — document edge detection

Public Class DynamsoftWarehouseScanner
    Implements IDisposable

    Private ReadOnly _labelRecognizer As LabelRecognizer
    Private ReadOnly _barcodeReader As BarcodeReader
    Private ReadOnly _documentNormalizer As DocumentNormalizer

    Public Sub New(labelLicenseKey As String, barcodeLicenseKey As String, documentLicenseKey As String)
        LabelRecognizer.InitLicense(labelLicenseKey)
        _labelRecognizer = New LabelRecognizer()

        BarcodeReader.InitLicense(barcodeLicenseKey)
        _barcodeReader = New BarcodeReader()

        DocumentNormalizer.InitLicense(documentLicenseKey)
        _documentNormalizer = New DocumentNormalizer()
    End Sub

    Public Function ScanItem(imagePath As String) As WarehouseItemResult
        ' Three separate API calls, three result types to aggregate manually
        Dim labelResults = _labelRecognizer.RecognizeFile(imagePath)
        Dim barcodeResults = _barcodeReader.DecodeFile(imagePath)
        Dim docResults = _documentNormalizer.Normalize(imagePath)

        ' Merge three result sets into one model — your code
        Return AggregateResults(labelResults, barcodeResults, docResults)
    End Function

    Public Sub Dispose() Implements IDisposable.Dispose
        _labelRecognizer?.Dispose()
        _barcodeReader?.Dispose()
        _documentNormalizer?.Dispose()
    End Sub
End Class
$vbLabelText   $csharpLabel

Les fichiers PDF d'expédition nécessitent toujours un quatrième produit : Dynamsoft ne dispose pas de fonctionnalité OCR native pour les PDF. Licence annuelle pour trois produits Dynamsoft au niveau par serveur : 5 997 $+/an. Ajoutez une bibliothèque PDF et vous en êtes à plus de 6 300 $ par an avant même d'avoir écrit une seule ligne de logique métier.

Approche d'IronOCR

using IronOcr;

public class IronOcrWarehouseScanner
{
    private readonly IronTesseract _ocr;

    public IronOcrWarehouseScanner()
    {
        _ocr = new IronTesseract();
        _ocr.Configuration.ReadBarCodes = true;  // barcodes in same pass
    }

    public WarehouseItemResult ScanItem(string imagePath)
    {
        // One call: text + barcodes + structured word positions
        var result = _ocr.Read(imagePath);

        return new WarehouseItemResult
        {
            AllText    = result.Text,
            Barcodes   = result.Barcodes.Select(b => new BarcodeInfo
                         { Format = b.Format.ToString(), Value = b.Value }).ToList(),
            Confidence = result.Confidence
        };
    }

    public string ScanLabelRegion(string imagePath, int x, int y, int width, int height)
    {
        // Target a specific label area — no template JSON required
        var region = new CropRectangle(x, y, width, height);
        using var input = new OcrInput();
        input.LoadImage(imagePath, region);
        input.Deskew();
        input.Contrast();

        return _ocr.Read(input).Text;
    }

    public string ProcessShipmentPdf(string pdfPath)
    {
        // Native PDF — no external library, no page conversion loop
        return _ocr.Read(pdfPath).Text;
    }
}
using IronOcr;

public class IronOcrWarehouseScanner
{
    private readonly IronTesseract _ocr;

    public IronOcrWarehouseScanner()
    {
        _ocr = new IronTesseract();
        _ocr.Configuration.ReadBarCodes = true;  // barcodes in same pass
    }

    public WarehouseItemResult ScanItem(string imagePath)
    {
        // One call: text + barcodes + structured word positions
        var result = _ocr.Read(imagePath);

        return new WarehouseItemResult
        {
            AllText    = result.Text,
            Barcodes   = result.Barcodes.Select(b => new BarcodeInfo
                         { Format = b.Format.ToString(), Value = b.Value }).ToList(),
            Confidence = result.Confidence
        };
    }

    public string ScanLabelRegion(string imagePath, int x, int y, int width, int height)
    {
        // Target a specific label area — no template JSON required
        var region = new CropRectangle(x, y, width, height);
        using var input = new OcrInput();
        input.LoadImage(imagePath, region);
        input.Deskew();
        input.Contrast();

        return _ocr.Read(input).Text;
    }

    public string ProcessShipmentPdf(string pdfPath)
    {
        // Native PDF — no external library, no page conversion loop
        return _ocr.Read(pdfPath).Text;
    }
}
Imports IronOcr

Public Class IronOcrWarehouseScanner
    Private ReadOnly _ocr As IronTesseract

    Public Sub New()
        _ocr = New IronTesseract()
        _ocr.Configuration.ReadBarCodes = True ' barcodes in same pass
    End Sub

    Public Function ScanItem(imagePath As String) As WarehouseItemResult
        ' One call: text + barcodes + structured word positions
        Dim result = _ocr.Read(imagePath)

        Return New WarehouseItemResult With {
            .AllText = result.Text,
            .Barcodes = result.Barcodes.Select(Function(b) New BarcodeInfo With {
                .Format = b.Format.ToString(),
                .Value = b.Value
            }).ToList(),
            .Confidence = result.Confidence
        }
    End Function

    Public Function ScanLabelRegion(imagePath As String, x As Integer, y As Integer, width As Integer, height As Integer) As String
        ' Target a specific label area — no template JSON required
        Dim region = New CropRectangle(x, y, width, height)
        Using input As New OcrInput()
            input.LoadImage(imagePath, region)
            input.Deskew()
            input.Contrast()

            Return _ocr.Read(input).Text
        End Using
    End Function

    Public Function ProcessShipmentPdf(pdfPath As String) As String
        ' Native PDF — no external library, no page conversion loop
        Return _ocr.Read(pdfPath).Text
    End Function
End Class
$vbLabelText   $csharpLabel

Pour la documentation OCR régionale et le guide d'importation PDF , IronOCR couvre les deux sans aucun produit supplémentaire.

Modèle de déploiement

Les deux bibliothèques fonctionnent sur site, sans transmission de données documentaires via le cloud. Les principales différences de déploiement concernent les modèles d'initialisation, la gestion des fichiers de configuration et le contenu de l'artefact de déploiement de chaque bibliothèque.

Approche Dynamsoft

Dynamsoft exige des appels d'initialisation statiques sur la classe SDK avant de créer une instance. Chaque produit possède son propre modèle d'initialisation, et la clé de licence active uniquement ce produit spécifique. Les fichiers de configuration de modèles — les documents de paramètres JSON pour MRZ, VIN, ou motifs d'étiquettes personnalisés — doivent être présents et correctement référencés lors de l'exécution. Un déploiement qui inclut Recognizer d'étiquettes et Reader de codes-barres gère deux flux d'activation, deux ensembles de modèles et deux chaînes Dispose.

Pour les déploiements en entrepôt ou sur borne interactive, la dépendance du fichier de configuration ajoute un artefact de déploiement en plus des fichiers binaires. Les modèles JSON sont des fichiers séparés, non compilés dans le package. Mal configurer le chemin du modèle sur un nouveau serveur et la reconnaissance renvoie silencieusement des résultats vides ou déclenche une erreur à l'exécution lors de l'appel AppendSettingsFromString.

Approche d'IronOCR

IronOCR se déploie sous la forme d'un seul package NuGet . L'activation de la licence consiste en l'affectation d'une chaîne de caractères sur une seule ligne :

// Application startup — one line, works for all features
IronOcr.License.LicenseKey = Environment.GetEnvironmentVariable("IRONOCR_LICENSE");
// Application startup — one line, works for all features
IronOcr.License.LicenseKey = Environment.GetEnvironmentVariable("IRONOCR_LICENSE");
' Application startup — one line, works for all features
IronOcr.License.LicenseKey = Environment.GetEnvironmentVariable("IRONOCR_LICENSE")
$vbLabelText   $csharpLabel

Aucun fichier modèle. Aucune gestion binaire native. Aucun dossier tessdata. Le guide de déploiement Docker nécessite seulement libgdiplus sur Linux— une %@--CODE-766--@@ ligne dans le Dockerfile.

FROM mcr.microsoft.com/dotnet/aspnet:8.0
RUN apt-get update && apt-get install -y libgdiplus
COPY --from=build /app/publish /app
WORKDIR /app
ENTRYPOINT ["dotnet", "YourApp.dll"]

Ce même package prend en charge Linux , AWS Lambda et Azure App Service sans configuration spécifique à la plateforme. Pour les équipes utilisant des pipelines CI/CD, il n'existe pas de fichiers modèles à versionner ou à déployer séparément pour les artefacts.

Référence de mappage d'API

Reconnaissance d'étiquettes Dynamsoft Équivalent d'IronOCR
LabelRecognizer.InitLicense(key) IronOcr.License.LicenseKey = key
new LabelRecognizer() new IronTesseract()
_recognizer.AppendSettingsFromString(json) Non requis — configuration automatique du moteur
_recognizer.RecognizeFile(path) ocr.Read(path)
_recognizer.RecognizeByFile(path, "") ocr.Read(path)
result.LineResults[i].Text result.Lines[i].Text
Analyseur manuel TD3 MRZ (plus de 150 lignes) ocr.ReadPassport(path).Surname etc.
BarcodeReader.InitLicense(key) (produit distinct) ocr.Configuration.ReadBarCodes = true
_barcodeReader.DecodeFile(path) result.Barcodes (même appel que OCR)
barcode.BarcodeFormatString barcode.Format.ToString()
barcode.BarcodeText barcode.Value
DocumentNormalizer.InitLicense(key) (produit distinct) Non requis
Prise en charge des fichiers PDF non disponible ocr.Read("document.pdf")
Aucun fichier PDF consultable result.SaveAsSearchablePdf(path)
recognizer.Dispose() using var ocr = new IronTesseract()

Quand les équipes envisagent de passer de Dynamsoft à IronOCR

Le champ d'application s'étend au-delà des zones de gestion des déchets (MRZ) ou des étiquettes

La plupart des migrations ont lieu lorsqu'un projet débute de manière ciblée — par exemple, " lecture des passeports MRZ " — et que des exigences produit apparaissent ensuite. Le client souhaite archiver les passeports numérisés sous forme de PDF consultables. L'équipe de conformité souhaite effectuer une reconnaissance optique de caractères (OCR) sur les tampons de visa. La file d'attente du support technique contient des tickets concernant des fichiers PDF que Dynamsoft ne parvient pas à traiter. Dans ce cas, l'équipe assure la maintenance de Dynamsoft pour MRZ, Plus que d'une seconde bibliothèque OCR pour tous les autres types de documents. Deux contrats de licence, deux procédures de maintenance, deux modèles d'API dans le même code source. IronOCR gère la demande MRZ initiale via ReadPassport() et les exigences élargies via la même instance IronTesseract. Les équipes qui passent d'un système à deux bibliothèques à un seul package constatent généralement une réduction de 30 à 40 % du code de la couche d'intégration.

Les coûts d'abonnement annuels ne sont pas durables

Les coûts de licence Dynamsoft multi-produits se cumulent annuellement — contactez Dynamsoft pour connaître les prix actuels. Sur plusieurs années, les frais d'abonnement annuels combinés pour plusieurs produits peuvent largement dépasser le coût $999 unique d'IronOCR. Le modèle de licence perpétuelle est le plus important pour les produits avec une durée de vie commerciale définie — un système de traitement de documents gouvernementaux qui fonctionnera pendant sept ans ne veut pas d'une dépendance de renouvellement annuel sur un fournisseur spécialisé pour un composant central.

Saisie PDF requise

Dynamsoft Label Recognizer ne prend pas en charge nativement le format PDF. Chaque document livré au format PDF nécessite une étape de prétraitement : convertir chaque page en image, traiter l'image avec Dynamsoft, puis collecter et réassembler les résultats. Ce pipeline ajoute une dépendance de rendu PDF, une boucle d'itération de page et un problème de mappage de coordonnées si vous devez corréler les résultats de reconnaissance à la géométrie PDF originale. IronOCR lit les PDF nativement — ocr.Read("passport-scans.pdf") traite chaque page, et result.Pages vous donne accès par page au texte, aux mots, et aux scores de confiance. Pour les équipes où 20 % ou plus des données d'entrée arrivent sous forme de PDF, la solution de contournement de Dynamsoft ajoute une charge de maintenance importante à chaque mise à jour de la bibliothèque de rendu PDF.

La taxe sur l'intégration multiproduits est trop élevée.

Chaque produit Dynamsoft supplémentaire est un appel d'initialisation statique distinct, une chaîne Dispose distincte, et un fichier de configuration JSON distinct à gérer. Les équipes qui ont intégré trois produits Dynamsoft indiquent que la surface d'intégration représente le principal coût de maintenance, et non la qualité de la reconnaissance. La rotation des clés de licence, les mises à jour des versions du SDK et le déploiement des fichiers modèles doivent être coordonnés simultanément pour les trois produits. Le modèle à package unique d'IronOCR signifie une seule version à mettre à jour, une seule clé de licence à renouveler et une seule interface API à maintenir, quel que soit le nombre de fonctionnalités OCR utilisées par l'application.

Des types de documents internationaux sont nécessaires

Dynamsoft Label Recognizer est conçu autour des formats MRZ à caractères latins conformément au document 9303 de l'OACI. Les applications traitant des documents d'identité en langue CJK, des passeports en écriture arabe ou des étiquettes d'expédition multilingues atteignent rapidement les limites de couverture linguistique. IronOCR propose plus de 125 packs de langue sous forme de packages NuGet individuels : arabe, chinois simplifié, chinois traditionnel, japonais, coréen, et bien d'autres. Chacun s'installe via dotnet add package IronOcr.Languages.Arabic sans changer le code de reconnaissance. Le guide multilingue couvre la reconnaissance multilingue simultanée en quelques lignes de configuration.

Considérations courantes en matière de migration

Remplacement de l'analyseur MRZ

L'étape de migration la plus immédiate est de remplacer la combinaison RecognizeFile de Dynamsoft + analyseur TD3 manuel avec ReadPassport. Le chemin d'extraction Dynamsoft renvoie du texte brut comme P<GBRSMITH<<JOHN<<<<<<<<<<<<<<<<<<<<<<<<<< et nécessite plus de 150 lignes d'analyse de décalage de caractères pour le format TD3. Le remplaçant IronOCR :

// Before: Dynamsoft raw extraction + manual 150-line parser
var results = _recognizer.RecognizeFile(imagePath);
var rawMrz = string.Join("\n", results.SelectMany(r => r.LineResults).Select(l => l.Text));
var parsed = MyTd3Parser.Parse(rawMrz);  // delete this file

// After: IronOCR parsed output directly
var passportData = new IronTesseract().ReadPassport(imagePath);
string surname  = passportData.Surname;
string docNum   = passportData.DocumentNumber;
DateTime? dob   = passportData.DateOfBirth;
// Before: Dynamsoft raw extraction + manual 150-line parser
var results = _recognizer.RecognizeFile(imagePath);
var rawMrz = string.Join("\n", results.SelectMany(r => r.LineResults).Select(l => l.Text));
var parsed = MyTd3Parser.Parse(rawMrz);  // delete this file

// After: IronOCR parsed output directly
var passportData = new IronTesseract().ReadPassport(imagePath);
string surname  = passportData.Surname;
string docNum   = passportData.DocumentNumber;
DateTime? dob   = passportData.DateOfBirth;
Imports System
Imports System.Linq

' Before: Dynamsoft raw extraction + manual 150-line parser
Dim results = _recognizer.RecognizeFile(imagePath)
Dim rawMrz = String.Join(vbCrLf, results.SelectMany(Function(r) r.LineResults).Select(Function(l) l.Text))
Dim parsed = MyTd3Parser.Parse(rawMrz)  ' delete this file

' After: IronOCR parsed output directly
Dim passportData = New IronTesseract().ReadPassport(imagePath)
Dim surname As String = passportData.Surname
Dim docNum As String = passportData.DocumentNumber
Dim dob As DateTime? = passportData.DateOfBirth
$vbLabelText   $csharpLabel

L'analyseur syntaxique manuel a été entièrement supprimé. La détection des formats TD1 (cartes d'identité), TD2 (visas) et TD3 (passeports) est automatique dans ReadPassport. Le manuel de lecture du passeport indique comment remplir chaque champ renvoyé.

Consolidation de l'initialisation multiproduit

Les applications multi-produits Dynamsoft ont plusieurs appels statiques InitLicense au démarrage, chacun nécessitant sa propre clé. Regroupez ces éléments en une seule ligne de licence IronOCR et supprimez les blocs d'initialisation par produit :

// Before: three static initializations
LabelRecognizer.InitLicense(mrzKey);
BarcodeReader.InitLicense(barcodeKey);
DocumentNormalizer.InitLicense(documentKey);

// After: one line, all capabilities enabled
IronOcr.License.LicenseKey = Environment.GetEnvironmentVariable("IRONOCR_LICENSE");

var ocr = new IronTesseract();
ocr.Configuration.ReadBarCodes = true;  // barcodes included automatically
// Before: three static initializations
LabelRecognizer.InitLicense(mrzKey);
BarcodeReader.InitLicense(barcodeKey);
DocumentNormalizer.InitLicense(documentKey);

// After: one line, all capabilities enabled
IronOcr.License.LicenseKey = Environment.GetEnvironmentVariable("IRONOCR_LICENSE");

var ocr = new IronTesseract();
ocr.Configuration.ReadBarCodes = true;  // barcodes included automatically
Imports System

' Before: three static initializations
LabelRecognizer.InitLicense(mrzKey)
BarcodeReader.InitLicense(barcodeKey)
DocumentNormalizer.InitLicense(documentKey)

' After: one line, all capabilities enabled
IronOcr.License.LicenseKey = Environment.GetEnvironmentVariable("IRONOCR_LICENSE")

Dim ocr As New IronTesseract()
ocr.Configuration.ReadBarCodes = True  ' barcodes included automatically
$vbLabelText   $csharpLabel

Les appels Dynamsoft Dispose existants dans les classes de service devraient être remplacés par des blocs standard using sur des instances IronTesseract, ou une seule instance réutilisée enregistrée dans le conteneur DI. Le guide d'installation d'IronTesseract couvre les deux configurations.

Ajout de la prise en charge des fichiers PDF

La nouvelle fonctionnalité la plus couramment acquise par les équipes de migration est l'importation native de fichiers PDF — une fonctionnalité que Dynamsoft n'a jamais proposée. Après la suppression de la boucle de conversion PDF-image, la lecture native des PDF ne nécessite aucune modification du code au-delà du chemin d'entrée :

// Before: PDF rendering loop (50+ lines with external library)
var pdfDoc = PdfDocument.Load(pdfPath);
foreach (var page in pdfDoc.Pages)
{
    var bitmap = page.RenderAsBitmap(150);
    var results = _labelRecognizer.RecognizeFile(SaveBitmapToTemp(bitmap));
    // aggregate...
}

// After: native PDF — no loop, no external library
var result = new IronTesseract().Read(pdfPath);
string fullText = result.Text;
result.SaveAsSearchablePdf("searchable-output.pdf");
// Before: PDF rendering loop (50+ lines with external library)
var pdfDoc = PdfDocument.Load(pdfPath);
foreach (var page in pdfDoc.Pages)
{
    var bitmap = page.RenderAsBitmap(150);
    var results = _labelRecognizer.RecognizeFile(SaveBitmapToTemp(bitmap));
    // aggregate...
}

// After: native PDF — no loop, no external library
var result = new IronTesseract().Read(pdfPath);
string fullText = result.Text;
result.SaveAsSearchablePdf("searchable-output.pdf");
Imports IronOcr

' Before: PDF rendering loop (50+ lines with external library)
Dim pdfDoc = PdfDocument.Load(pdfPath)
For Each page In pdfDoc.Pages
    Dim bitmap = page.RenderAsBitmap(150)
    Dim results = _labelRecognizer.RecognizeFile(SaveBitmapToTemp(bitmap))
    ' aggregate...
Next

' After: native PDF — no loop, no external library
Dim result = New IronTesseract().Read(pdfPath)
Dim fullText As String = result.Text
result.SaveAsSearchablePdf("searchable-output.pdf")
$vbLabelText   $csharpLabel

Pour les équipes qui ont également besoin de produire des archives PDF interrogeables à partir d'entrées numérisées, SaveAsSearchablePdf est un appel de méthode unique. Le guide PDF consultable détaille les options de sortie.

Prétraitement pour la qualité des étiquettes industrielles

Le moteur de modèles de Dynamsoft est optimisé pour des conditions d'étiquetage contrôlées. Pour les images dégradées (étiquettes usées, emballages à faible contraste, numérisations industrielles déformées), le pipeline de prétraitement d'IronOCR comble les lacunes. Le guide de correction de la qualité d'image couvre chaque filtre. Pour les flux de travail spécifiques aux étiquettes, Deskew et Contrast sont les plus utiles :

using var input = new OcrInput();
input.LoadImage(labelImagePath);
input.Deskew();    // correct rotation from handheld scanner
input.Contrast();  // recover faded label text
input.DeNoise();   // remove packaging texture interference

var labelText = new IronTesseract().Read(input).Text;
Console.WriteLine($"Confidence: {new IronTesseract().Read(input).Confidence}%");
using var input = new OcrInput();
input.LoadImage(labelImagePath);
input.Deskew();    // correct rotation from handheld scanner
input.Contrast();  // recover faded label text
input.DeNoise();   // remove packaging texture interference

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

Using input As New OcrInput()
    input.LoadImage(labelImagePath)
    input.Deskew()    ' correct rotation from handheld scanner
    input.Contrast()  ' recover faded label text
    input.DeNoise()   ' remove packaging texture interference

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

Fonctionnalités supplémentaires d'IronOCR

Fonctionnalités non abordées dans les sections précédentes mais fréquemment utilisées par les équipes après la migration :

  • Reconnaissance de l'écriture manuscrite : Traitement des notes et annotations manuscrites en parallèle du texte imprimé – une fonctionnalité que Dynamsoft ne propose pas.
  • Traitement des documents numérisés : PDF numérisés multipages avec prétraitement automatique par page
  • Extraction de données tabulaires : Détection et extraction de données tabulaires à partir de factures, de manifestes et de feuilles de données.
  • Exportation hOCR : Exporter les résultats de reconnaissance au format HTML avec les coordonnées du cadre de délimitation pour l'analyse de mise en page ultérieure
  • OCR asynchrone : reconnaissance non bloquante pour les applications serveur ASP.NET et à haut débit
  • Suivi de la progression : Surveillez les tâches par lots multipages grâce aux rappels de progression.
  • Index de plus de 125 langues : Liste complète des packages NuGet pour les langues prises en charge, y compris les alphabets non latins
  • Lecture MICR/chèques : Reconnaissance de caractères magnétiques pour le traitement des documents financiers — un autre cas d'utilisation spécialisé géré dans un seul package
  • Scores de confiance par mot : Signaux de qualité précis pour les chaînes de traitement automatisées des documents

Compatibilité .NET et préparation à l'avenir

IronOCR cible .NET 8 et .NET 9 comme environnements d'exécution de premier ordre, avec une compatibilité ascendante totale avec .NET Framework 4.6.2 et .NET Core 3.1. La bibliothèque est distribuée sous la forme d'un package NuGet unique qui résout automatiquement le binaire de la plateforme appropriée pour Fenêtresx64, Fenêtresx86, Linuxx64, macOSx64 et macOSARM grâce au graphe d'identificateurs d'exécution de NuGet — sans références de package conditionnelles ni fichiers de projet spécifiques à la plateforme. Reconnaissance d'étiquettes Dynamsoft prend également en charge les environnements d'exécution .NET modernes, mais son modèle multiproduit implique que la compatibilité .NET de chaque produit doit être vérifiée et mise à jour indépendamment. Le rythme de développement actif d'IronOCR assure des mises à jour des packages NuGet alignées sur chaque cycle de publication de .NET , et le modèle à package unique signifie que la compatibilité avec .NET 10, prévue pour fin 2026, s'appliquera uniformément à toutes les fonctionnalités sans suivi par produit.

Conclusion

Dynamsoft Label Recognizer est un logiciel spécialisé et performant. Pour une borne interactive traitant uniquement les zones de reconnaissance d'étiquettes (MRZ) des passeports, ou une station de montage lisant uniquement les codes VIN, son moteur de reconnaissance basé sur des modèles remplit cette fonction spécifique avec fiabilité. Le problème, c'est que les applications réelles restent rarement limitées à un domaine précis. Les pages de données complètes des passeports doivent être numérisées par reconnaissance optique de caractères (OCR). Les étiquettes d'expédition sont fournies au format PDF. Les systèmes d'inventaire nécessitent le code-barres et le texte lors du même passage. Chaque extension de périmètre nécessite la maintenance d'un autre produit Dynamsoft, d'une nouvelle licence annuelle et d'une nouvelle interface API.

Le modèle de coûts le concrétise. Les totaux sur plusieurs années pour la lecture MRZ plus codes-barres au sein d'une équipe de développement utilisant le modèle d'abonnement annuel de Dynamsoft se cumulent de manière significative. IronOCR couvre les deux capacités — plus PDF natif, sortie PDF interrogeable, OCR complet du document, plus de 125 langues, et prétraitement — à $999 une fois. La migration elle-même est largement mécanique : remplacez RecognizeFile par ocr.Read, supprimez l'analyseur MRZ TD3 manuel, activez ReadBarCodes = true, et retirez la boucle de rendu PDF externe.

La différence architecturale ne se limite pas au coût. La conception de Dynamsoft oblige les équipes à penser en termes de produits plutôt qu'en termes de fonctionnalités, à se demander " quel produit Dynamsoft gère cela ? " avant même d'écrire une seule ligne de code. La conception d'IronOCR inverse cela : une instance, une configuration, un objet résultat, quel que soit le contenu du document. Cette différence s'accentue tout au long de la durée de vie d'un projet, à mesure que les exigences augmentent.

Pour les équipes qui développent des applications innovantes nécessitant une combinaison de reconnaissance MRZ, de lecture de codes-barres, d'OCR de documents généraux ou de traitement PDF, le modèle tout-en-un d'IronOCR élimine dès le départ le problème de coordination multi-produits. Pour les équipes utilisant actuellement plusieurs produits Dynamsoft ainsi qu'une bibliothèque OCR distincte, le processus de migration consolide cette interface en une seule dépendance. Le centre de documentation IronOCR couvre toutes les fonctionnalités abordées ici avec des exemples de code fonctionnels et des guides de déploiement.

Veuillez noterDynamsoft et Tesseract sont des marques déposées de leurs propriétaires respectifs. Ce site n'est affilié, soutenu ou sponsorisé par Dynamsoft ou Google. 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 Dynamsoft OCR SDK ?

Dynamsoft OCR SDK est une solution d'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 à Dynamsoft 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 de Dynamsoft, 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 Dynamsoft 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 Dynamsoft 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 de Dynamsoft 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 à Dynamsoft 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 à Dynamsoft 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 du SDK OCR de Dynamsoft vers IronOCR ?

La migration du SDK OCR de Dynamsoft 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