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

Une comparaison entre IronOCR et Dynamsoft OCR

La reconnaissance optique de caractères, ou OCR, est un processus de saisie de données qui implique la reconnaissance et la numérisation de texte, à la fois écrit et imprimé. Il s'agit d'un type de technologie informatique qui utilise l'analyse d'image pour convertir des photographies numériques de texte imprimé en lettres et en chiffres utilisables par d'autres programmes tels que les traitements de texte. Le texte est converti en codes de caractères de manière à pouvoir être recherché et modifié sur un ordinateur.

Alors que le passé était un monde dans lequel tous les documents étaient physiques, et que l'avenir pourrait être une société où tous les documents sont numériques, le présent est en flux. Les documents physiques et numériques coexistent dans cet état de transition – par conséquent, les technologies comme l'OCR sont cruciales pour la conversion dans les deux sens.

La récupération de documents, la saisie de données et l'accessibilité ne sont que quelques-unes des applications de l'OCR. La majorité des applications OCR proviennent de documents numérisés, bien que les photographies soient aussi parfois utilisées. L'OCR est un précieux gain de temps car retaper le matériel est souvent la seule autre option. Voici quelques exemples d'utilisation de l'OCR :

  • Les fichiers texte modifiables peuvent être récupérés à partir de documents numérisés, y compris les télécopies.
  • Utilisation de numérisations de livres pour créer des e-books consultables et modifiables.
  • Utilisation de captures d'écran pour rechercher et modifier du texte.
  • La technologie de synthèse vocale est utilisée pour lire des livres aux personnes malvoyantes.

Bien que ce ne soit que quelques-unes des applications de l'OCR, elles démontrent la polyvalence de la technologie dans un large éventail d'industries. Presque tous les employés dans toutes les entreprises dépendent fortement des documents au quotidien, l'utilisation commerciale est donc une considération clé dans le développement des systèmes OCR.

Dans cet article, nous comparerons les deux lecteurs OCR les plus puissants :

  • IronOCR
  • Dynamsoft OCR

IronOCR et Dynamsoft OCR sont deux bibliothèques .NET OCR qui supportent la conversion d'images numérisées et le traitement OCR de documents PDF. Vous pouvez transformer des images en texte consultable avec seulement quelques lignes de code. Vous pouvez également récupérer des mots, lettres et paragraphes individuels.

IronOCR — les fonctionnalités remarquables

IronOCR offre la capacité unique de détecter, lire et interpréter du texte à partir d'images et de documents PDF qui n'ont pas été numérisés avec précision. IronOCR offre l'approche la plus simple pour extraire le texte des documents et des photos, même si ce n'est pas toujours le plus rapide, car il améliore automatiquement les numérisations de basse qualité, réduisant le désalignement, la distorsion, le bruit de fond, et les problèmes de perspective, tout en améliorant la résolution et le contraste.

IronOCR permet aux développeurs de lui envoyer des images numérisées d'une ou de plusieurs pages, et renverra tout le texte, les codes-barres et les informations QR. Un ensemble de classes dans la bibliothèque OCR ajoute la capacité OCR aux applications web, de bureau ou console. Tesseract OCR C#, ainsi que les applications net JPG, PNG, TIFF, PDF, GIF, et BMP, ne sont que quelques-uns des formats pouvant être utilisés comme entrée.

Le moteur de reconnaissance optique de caractères (OCR) d'IronOCR peut lire le texte préparé en utilisant de nombreuses polices communes, italiques, graisses, et soulignements. Les classes de découpage permettent à l'OCR de fonctionner rapidement et précisément. Lors du travail avec des documents multipages, le moteur multithread d'IronOCR accélère l'OCR.

Fonctionnalités d'IronOCR

Pour la gestion de Tesseract, nous utilisons IronOCR car il est unique dans les manières suivantes :

  • Fonctionne dès la boîte en pur .NET
  • Ne nécessite pas l'installation de Tesseract sur votre machine
  • Exécute les moteurs les plus récents : Tesseract 5 (ainsi que Tesseract 4 & 3)
  • Est disponible pour tout projet .NET : .NET Framework 4.5 +, .NET Standard 2 + et .NET Core 2, 3 & .NET 5
  • A une précision et une vitesse améliorées par rapport à Tesseract traditionnel
  • Supporte Xamarin, Mono, Azure, et Docker
  • Gère le système complexe de dictionnaire de Tesseract en utilisant des packages NuGet
  • Supporte PDFS, MultiFrame Tiffs, et tous les principaux formats d'image sans configuration
  • Peut corriger les numérisations de basse qualité et déformées pour obtenir les meilleurs résultats de Tesseract.

Dynamsoft OCR — fonctionnalités

La bibliothèque Dynamsoft.NET OCR est un composant .NET qui offre une reconnaissance optique de caractères rapide et fiable. Elle est utilisée pour créer des applications de bureau .NET en C# ou VB.NET. Vous pouvez simplement créer du code pour convertir le texte inutile dans des fichiers PDF ou des photos en texte numérique pour édition, recherche, archivage, et plus en utilisant les API OCR de base.

Les images des scanners et autres dispositifs compatibles TWAIN peuvent être acquises de la manière suivante :

  • Les mécanismes de transfert d'image natifs, en mémoire tampon et sur disque sont tous supportés.
  • Avec le chargeur automatique de documents, la numérisation en lot est possible (ADF).
  • Les attributs TWAIN peuvent être utilisés pour modifier des fonctionnalités courantes des dispositifs.
  • Les fonctionnalités IfAutoFeed, IfAutoScan, Résolution, Profondeur de bits, Luminosité, Contraste, Unité, Recto-verso, et autres peuvent toutes être modifiées.
  • Supporte la détection de pages blanches.
  • Vous permet de modifier et enregistrer les profils de scanner.

Capture d'images à partir de webcams compatibles UVC et WIA :

  • Affichez un flux vidéo en direct lors de la capture de photos depuis une webcam choisie.
  • Personnalisez les paramètres de la caméra : Luminosité, Contraste, Teinte, Saturation, Netteté, Gamma, Balance des blancs, Compensation de contre-jour, Gain, Activation de la couleur, Zoom, Focus, Exposition, Iris, Panoramique, Inclinaison, Roulement.

Chargement et affichage d'images robustes

  • Les images aux formats BMP, JPEG, PNG, TIFF, et TIFF multipage peuvent être chargées.
  • Le zoom avant et arrière sur les photos est pris en charge.
  • Les images peuvent être récupérées à partir d'un lecteur local, d'un serveur FTP, d'un serveur HTTP ou d'une base de données.
  • Décodage d'image pour BMP, JPEG, PNG et TIFF utilisant l'un des ensembles de composants d'imagerie .NET les plus complets

Enregistrement et téléchargement/téléversement

  • Vous permet de lire et d'écrire des photos via un flux de fichiers.
  • Supporte l'enregistrement des photos capturées au format BMP, JPEG, PNG, TIFF, ou TIFF multipage sur un lecteur local, un serveur web, ou une base de données.
  • Sont supportées les compressions RLE, G3/G4, LZW, PackBits, et TIFF.
  • Téléchargements et téléversements HTTPs supportés.
  • L'un des ensembles de composants d'imagerie .NET les plus vastes disponibles supporte le codage d'images BMP, JPEG, PNG et TIFF.
  • Permet d'attacher de nouvelles photos obtenues à des fichiers TIFF existants.

Lire du texte à partir de PDF numérisés ou d'autres images dans ASP.NET (Reconnaissance optique de caractères)

Les clients veulent que le travail soit accompli rapidement dans le monde d'aujourd'hui en constante évolution. Les clients avec des projets urgents nous contactent fréquemment. Notre technologie peut simplement reconnaître le contenu d'une image et le convertir en texte si le projet implique de numériser des documents contenant des images. La reconnaissance optique de caractères (OCR) permet à votre entreprise de gagner du temps et de l'argent tout en réduisant les erreurs de saisie de données.

Utiliser IronOCR

IronOCR utilise la classe IronOcr.IronTesseract pour effectuer ses conversions OCR.

Nous utilisons la classe IronOcr.IronTesseract pour lire le texte d'une image et retourner automatiquement son résultat en tant que chaîne dans cet exemple de base.

// PM> Install-Package IronOcr
using IronOcr;

class Program
{
    static void Main(string[] args)
    {
        // Create a new instance of the IronTesseract class
        var ironOcr = new IronTesseract();

        // Read the text from the image
        var result = ironOcr.Read(@"img\Screenshot.png");

        // Output the text to the console
        Console.WriteLine(result.Text);
    }
}
// PM> Install-Package IronOcr
using IronOcr;

class Program
{
    static void Main(string[] args)
    {
        // Create a new instance of the IronTesseract class
        var ironOcr = new IronTesseract();

        // Read the text from the image
        var result = ironOcr.Read(@"img\Screenshot.png");

        // Output the text to the console
        Console.WriteLine(result.Text);
    }
}
' PM> Install-Package IronOcr
Imports IronOcr

Friend Class Program
	Shared Sub Main(ByVal args() As String)
		' Create a new instance of the IronTesseract class
		Dim ironOcr = New IronTesseract()

		' Read the text from the image
		Dim result = ironOcr.Read("img\Screenshot.png")

		' Output the text to the console
		Console.WriteLine(result.Text)
	End Sub
End Class
$vbLabelText   $csharpLabel

Ainsi, le paragraphe suivant est 100 pour cent précis :

Exemple Simple IronOCR

Dans cet exemple simple, nous testerons la précision de notre bibliothèque OCR C# pour lire du texte à partir d'une image PNG
Image. C'est un test très basique, mais les choses deviendront plus compliquées au fur et à mesure que le tutoriel se poursuivra.

Le rapide renard brun saute par-dessus le chien paresseux

Bien que cela puisse sembler simple à la surface, il existe un comportement sophistiqué derrière cela : analyse de l'image pour l'alignement, la qualité et la résolution, examen de ses attributs, optimisation du moteur OCR, et enfin lecture du texte comme le ferait un humain.

L'OCR est une tâche difficile à réaliser pour une machine, et les vitesses de lecture peuvent être comparables à celles d'un humain. En d'autres termes, l'OCR n'est pas un processus rapide. Dans ce cas, cependant, il est absolument correct.

Précision des résultats des applications OCR C#

Dans la plupart des scénarios réels, les développeurs voudront que leurs projets s'exécutent aussi rapidement que possible. Dans ce cas, nous vous proposons d'utiliser à la place les classes OcrInput et IronTesseract de l'espace de noms des compléments IronOCR.

Vous pouvez définir les caractéristiques exactes d'un travail OCR avec OcrInput, comme :

  • JPEG, TIFF, GIF, BMP, et PNG ne sont que quelques-uns des formats d'image qui peuvent être utilisés
  • Importer des documents PDF dans leur totalité ou en parties
  • Améliorer le contraste, la résolution, et la taille de l'image
  • Rotation, bruit de numérisation, bruit numérique, désalignement, et correction de l'image négative

IronTesseract

Choisissez parmi des centaines de langues et dialectes préemballés

  • Utilisez les moteurs OCR Tesseract 5, 4 ou 3 immédiatement
  • Si nous examinons une capture d'écran, un extrait ou l'ensemble du document, spécifiez le type de document
  • Reconnaître les codes-barres
  • Les résultats OCR peuvent être des PDFs consultables, des HTML Hocr, un DOM, et des chaînes
using IronOcr;

class Program
{
    static void Main(string[] args)
    {
        // Create an instance of IronTesseract
        var ocr = new IronTesseract();

        // Use the OcrInput class to read from an image file
        using (var input = new OcrInput(@"img\Potter.tiff"))
        {
            // Perform the OCR operation
            var result = ocr.Read(input);

            // Output the recognized text to the console
            Console.WriteLine(result.Text);
        }
    }
}
using IronOcr;

class Program
{
    static void Main(string[] args)
    {
        // Create an instance of IronTesseract
        var ocr = new IronTesseract();

        // Use the OcrInput class to read from an image file
        using (var input = new OcrInput(@"img\Potter.tiff"))
        {
            // Perform the OCR operation
            var result = ocr.Read(input);

            // Output the recognized text to the console
            Console.WriteLine(result.Text);
        }
    }
}
Imports IronOcr

Friend Class Program
	Shared Sub Main(ByVal args() As String)
		' Create an instance of IronTesseract
		Dim ocr = New IronTesseract()

		' Use the OcrInput class to read from an image file
		Using input = New OcrInput("img\Potter.tiff")
			' Perform the OCR operation
			Dim result = ocr.Read(input)

			' Output the recognized text to the console
			Console.WriteLine(result.Text)
		End Using
	End Sub
End Class
$vbLabelText   $csharpLabel

Nous pouvons utiliser cela même sur une numérisation de qualité moyenne avec une précision de 100%.

Exemple de numérisation OCR C# à partir de Tiff

Comme vous pouvez le voir, lire le texte (et, si désiré, les codes-barres) à partir d'une image numérisée telle qu'un TIFF était assez facile. La précision de ce travail OCR est de 100 pour cent.

Ensuite, nous essaierons une numérisation de qualité beaucoup plus basse de la même page, à faible DPI et avec beaucoup de distorsion et de bruit numérique, ainsi que des dommages au document original.

Numérisation OCR C# de basse résolution avec du bruit numérique

C'est là qu'IronOCR brille vraiment en comparaison avec d'autres bibliothèques OCR telles que Tesseract, et nous constaterons que d'autres projets OCR évitent de discuter de l'utilisation de l'OCR sur des images numérisées du monde réel plutôt que des cas de test " parfaits " créés numériquement pour obtenir une précision OCR de 100%.

using IronOcr;

class Program
{
    static void Main(string[] args)
    {
        // Create an instance of IronTesseract
        var ocr = new IronTesseract();

        // Use the OcrInput class to read from a low-quality image file
        using (var input = new OcrInput(@"img\Potter.LowQuality.tiff"))
        {
            // Deskew the image to improve accuracy
            input.Deskew();

            // Perform the OCR operation
            var result = ocr.Read(input);

            // Output the recognized text to the console
            Console.WriteLine(result.Text);
        }
    }
}
using IronOcr;

class Program
{
    static void Main(string[] args)
    {
        // Create an instance of IronTesseract
        var ocr = new IronTesseract();

        // Use the OcrInput class to read from a low-quality image file
        using (var input = new OcrInput(@"img\Potter.LowQuality.tiff"))
        {
            // Deskew the image to improve accuracy
            input.Deskew();

            // Perform the OCR operation
            var result = ocr.Read(input);

            // Output the recognized text to the console
            Console.WriteLine(result.Text);
        }
    }
}
Imports IronOcr

Friend Class Program
	Shared Sub Main(ByVal args() As String)
		' Create an instance of IronTesseract
		Dim ocr = New IronTesseract()

		' Use the OcrInput class to read from a low-quality image file
		Using input = New OcrInput("img\Potter.LowQuality.tiff")
			' Deskew the image to improve accuracy
			input.Deskew()

			' Perform the OCR operation
			Dim result = ocr.Read(input)

			' Output the recognized text to the console
			Console.WriteLine(result.Text)
		End Using
	End Sub
End Class
$vbLabelText   $csharpLabel

Sans ajouter Input.Deskew() pour redresser l'image nous obtenons une précision de 52,5%. Ce n'est pas suffisant.

Ajouter Input.Deskew() nous amène à une précision de 99,8% ce qui est presque aussi précis que l'OCR d'une numérisation de haute qualité.

Utiliser Dynamsoft OCR

Nous présenterons quelques extraits de code pour utiliser Dynamic Web TWAIN pour effectuer une numérisation TWAIN et un OCR côté client en JavaScript.

Numériser des images

Vous pouvez modifier les paramètres de numérisation et acquérir des photos à partir de scanners TWAIN en utilisant les API simples de Dynamic Web TWAIN.

function acquireImage() {
    // Select an available TWAIN scanner
    DWObject.SelectSourceByIndex(document.getElementById("source").selectedIndex);

    // Set scanning settings like pixel type, resolution, ADF, etc.
    DWObject.IfShowUI = false; // Do not show the user interface of the scanner
    DWObject.PixelType = 1; // Scan in grayscale
    DWObject.Resolution = 300;
    DWObject.IfFeederEnabled = true; // Scan from auto feeder
    DWObject.IfDuplexEnabled = false;
    DWObject.IfDisableSourceAfterAcquire = true;

    // Acquire images from scanners
    DWObject.AcquireImage();
}
function acquireImage() {
    // Select an available TWAIN scanner
    DWObject.SelectSourceByIndex(document.getElementById("source").selectedIndex);

    // Set scanning settings like pixel type, resolution, ADF, etc.
    DWObject.IfShowUI = false; // Do not show the user interface of the scanner
    DWObject.PixelType = 1; // Scan in grayscale
    DWObject.Resolution = 300;
    DWObject.IfFeederEnabled = true; // Scan from auto feeder
    DWObject.IfDuplexEnabled = false;
    DWObject.IfDisableSourceAfterAcquire = true;

    // Acquire images from scanners
    DWObject.AcquireImage();
}
JAVASCRIPT

Télécharger le module professionnel OCR

Pour utiliser le module professionnel OCR pour OCR côté client, vous devrez inclure ocrpro.js dans l'en-tête et également télécharger la DLL OCR Pro.

<script type="text/javascript" src="Resources/addon/dynamsoft.webtwain.addon.ocrpro.js"></script>
<script type="text/javascript" src="Resources/addon/dynamsoft.webtwain.addon.ocrpro.js"></script>
HTML

Apportez des modifications au fichier .js :

// Define base path
var CurrentPathName = unescape(location.pathname);
var CurrentPath = CurrentPathName.substring(0, CurrentPathName.lastIndexOf("/") + 1);

// Download the OCR Pro add-on
DWObject.Addon.OCRPro.Download(CurrentPath + "Resources/addon/OCRPro.zip", OnSuccess, OnFailure);
// Define base path
var CurrentPathName = unescape(location.pathname);
var CurrentPath = CurrentPathName.substring(0, CurrentPathName.lastIndexOf("/") + 1);

// Download the OCR Pro add-on
DWObject.Addon.OCRPro.Download(CurrentPath + "Resources/addon/OCRPro.zip", OnSuccess, OnFailure);
JAVASCRIPT

Reconnaître du texte en utilisant l'OCR

Utiliser l'API de reconnaissance OCR JS pour extraire du texte à partir d'images numérisées est aussi simple qu'insérer le code ci-dessous.

// Recognize text from the image at index 0
DWObject.Addon.OCRPro.Recognize(0, GetOCRProInfo, GetErrorInfo); // 0 is the index of the image
// Recognize text from the image at index 0
DWObject.Addon.OCRPro.Recognize(0, GetOCRProInfo, GetErrorInfo); // 0 is the index of the image
JAVASCRIPT

Lire des régions découpées d'images

Les deux logiciels offrent des solutions pour découper des images pour OCR.

Lire des régions découpées avec IronOCR

La branche d'Iron de Tesseract OCR est habile à lire des régions spécifiques d'images, comme le montre le code exemple suivant.

Nous utilisons System.Drawing.Rectangle pour décrire la région exacte d'une image à lire en pixels.

Lorsqu'il s'agit d'un formulaire standardisé qui est rempli, et qu'une seule partie du contenu change d'un cas à l'autre, cela peut être très utile.

Numérisation d'une section de page : Nous utiliserons System.Drawing.Rectangle pour désigner une région à lire à partir d'un document, améliorant la vitesse et l'exactitude.

Exemple de numérisation OCR C# à partir de Tiff
Exemple de numérisation OCR C# à partir de Tiff
using IronOcr;
using System.Drawing;

class Program
{
    static void Main(string[] args)
    {
        // Create an instance of IronTesseract
        var ocr = new IronTesseract();

        using (var input = new OcrInput())
        {
            // Define content area of interest
            var contentArea = new Rectangle() { X = 215, Y = 1250, Height = 280, Width = 1335 };

            // Add the specific region to the input
            input.AddImage("img/ComSci.png", contentArea);

            // Perform OCR operation
            var result = ocr.Read(input);

            // Output recognized text to console
            Console.WriteLine(result.Text);
        }
    }
}
using IronOcr;
using System.Drawing;

class Program
{
    static void Main(string[] args)
    {
        // Create an instance of IronTesseract
        var ocr = new IronTesseract();

        using (var input = new OcrInput())
        {
            // Define content area of interest
            var contentArea = new Rectangle() { X = 215, Y = 1250, Height = 280, Width = 1335 };

            // Add the specific region to the input
            input.AddImage("img/ComSci.png", contentArea);

            // Perform OCR operation
            var result = ocr.Read(input);

            // Output recognized text to console
            Console.WriteLine(result.Text);
        }
    }
}
Imports IronOcr
Imports System.Drawing

Friend Class Program
	Shared Sub Main(ByVal args() As String)
		' Create an instance of IronTesseract
		Dim ocr = New IronTesseract()

		Using input = New OcrInput()
			' Define content area of interest
			Dim contentArea = New Rectangle() With {
				.X = 215,
				.Y = 1250,
				.Height = 280,
				.Width = 1335
			}

			' Add the specific region to the input
			input.AddImage("img/ComSci.png", contentArea)

			' Perform OCR operation
			Dim result = ocr.Read(input)

			' Output recognized text to console
			Console.WriteLine(result.Text)
		End Using
	End Sub
End Class
$vbLabelText   $csharpLabel

Cela entraîne une augmentation de 41 pour cent de la vitesse, tout en nous permettant d'être plus spécifiques. C'est extrêmement précieux pour des applications OCR .NET impliquant des documents qui sont comparables et cohérents, y compris les factures, reçus, chèques, formulaires, demandes de dépenses, etc.

Lors de la lecture de PDFs, les ContentAreas (découpe OCR) sont également supportées.

Lire des régions découpées avec Dynamsoft OCR

Pour commencer, lancez Visual Studio et construisez une nouvelle application Forms Windows C#, ou ouvrez-en une existante. Nous devrons inclure DynamicDotNetTWAIN.dll, DynamicOCR.dll, et le package langue approprié.

  1. Naviguez vers Outils -> Choisir des Éléments de la Boîte à Outils, puis vers l'onglet Composants Framework .NET, cliquez sur le bouton Parcourir, et localisez DynamicDotNetTWAIN.dll.

  2. Faites un clic droit sur le fichier de projet dans l'Explorateur de Solution et sélectionnez Ajouter-> Élément Existant... puis ajoutez les éléments nécessaires depuis le répertoire des ressources OCR.

Voici le code pour cliquer sur le bouton LoadImage :

private void button1_Click(object sender, EventArgs e) 
{
    OpenFileDialog filedlg = new OpenFileDialog(); 
    if (filedlg.ShowDialog() == DialogResult.OK) 
    { 
        dynamicDotNetTwain1.LoadImage(filedlg.FileName);
        // Choose an image from your local disk and load it into Dynamic .NET TWAIN
    } 
}

private void dynamicDotNetTwain1_OnImageAreaSelected(short sImageIndex, int left, int top, int right, int bottom) 
{
    dynamicDotNetTwain1.OCRTessDataPath = "../../"; 
    dynamicDotNetTwain1.OCRLanguage = "eng";
    OcrResultFormat ocrResultFormat = Dynamsoft.DotNet.TWAIN.OCR.ResultFormat.Text;

    byte [] sbytes = dynamicDotNetTwain1.OCR(dynamicDotNetTwain1.CurrentImageIndexInBuffer, left, top, right, bottom);
    // OCR the selected area of the image

    if (sbytes != null) 
    { 
        SaveFileDialog filedlg = new SaveFileDialog(); 
        filedlg.Filter = "Text File(*.txt)| *.txt"; 
        if (filedlg.ShowDialog() == DialogResult.OK) 
        {
            FileStream fs = File.OpenWrite(filedlg.FileName); 
            fs.Write(sbytes, 0, sbytes.Length);
            // Save the OCR result as a text file
            fs.Close(); 
        }
        MessageBox.Show("OCR successful");
    } 
    else 
    {
        MessageBox.Show(dynamicDotNetTwain1.ErrorString); 
    }
}
private void button1_Click(object sender, EventArgs e) 
{
    OpenFileDialog filedlg = new OpenFileDialog(); 
    if (filedlg.ShowDialog() == DialogResult.OK) 
    { 
        dynamicDotNetTwain1.LoadImage(filedlg.FileName);
        // Choose an image from your local disk and load it into Dynamic .NET TWAIN
    } 
}

private void dynamicDotNetTwain1_OnImageAreaSelected(short sImageIndex, int left, int top, int right, int bottom) 
{
    dynamicDotNetTwain1.OCRTessDataPath = "../../"; 
    dynamicDotNetTwain1.OCRLanguage = "eng";
    OcrResultFormat ocrResultFormat = Dynamsoft.DotNet.TWAIN.OCR.ResultFormat.Text;

    byte [] sbytes = dynamicDotNetTwain1.OCR(dynamicDotNetTwain1.CurrentImageIndexInBuffer, left, top, right, bottom);
    // OCR the selected area of the image

    if (sbytes != null) 
    { 
        SaveFileDialog filedlg = new SaveFileDialog(); 
        filedlg.Filter = "Text File(*.txt)| *.txt"; 
        if (filedlg.ShowDialog() == DialogResult.OK) 
        {
            FileStream fs = File.OpenWrite(filedlg.FileName); 
            fs.Write(sbytes, 0, sbytes.Length);
            // Save the OCR result as a text file
            fs.Close(); 
        }
        MessageBox.Show("OCR successful");
    } 
    else 
    {
        MessageBox.Show(dynamicDotNetTwain1.ErrorString); 
    }
}
Private Sub button1_Click(ByVal sender As Object, ByVal e As EventArgs)
	Dim filedlg As New OpenFileDialog()
	If filedlg.ShowDialog() = DialogResult.OK Then
		dynamicDotNetTwain1.LoadImage(filedlg.FileName)
		' Choose an image from your local disk and load it into Dynamic .NET TWAIN
	End If
End Sub

Private Sub dynamicDotNetTwain1_OnImageAreaSelected(ByVal sImageIndex As Short, ByVal left As Integer, ByVal top As Integer, ByVal right As Integer, ByVal bottom As Integer)
	dynamicDotNetTwain1.OCRTessDataPath = "../../"
	dynamicDotNetTwain1.OCRLanguage = "eng"
	Dim ocrResultFormat As OcrResultFormat = Dynamsoft.DotNet.TWAIN.OCR.ResultFormat.Text

	Dim sbytes() As Byte = dynamicDotNetTwain1.OCR(dynamicDotNetTwain1.CurrentImageIndexInBuffer, left, top, right, bottom)
	' OCR the selected area of the image

	If sbytes IsNot Nothing Then
		Dim filedlg As New SaveFileDialog()
		filedlg.Filter = "Text File(*.txt)| *.txt"
		If filedlg.ShowDialog() = DialogResult.OK Then
			Dim fs As FileStream = File.OpenWrite(filedlg.FileName)
			fs.Write(sbytes, 0, sbytes.Length)
			' Save the OCR result as a text file
			fs.Close()
		End If
		MessageBox.Show("OCR successful")
	Else
		MessageBox.Show(dynamicDotNetTwain1.ErrorString)
	End If
End Sub
$vbLabelText   $csharpLabel

Voici à quoi ressemble l'application :

Application de Démo d'OCR de Zone utilisant le SDK OCR Dynamic .NET TWAIN

Optimisation des Performances d'Image

La qualité de l'image d'entrée est le déterminant le plus crucial de la vitesse d'une tâche OCR. Plus le bruit de fond est faible et plus le dpi est élevé, avec une valeur idéale d'environ 200 dpi, plus la sortie OCR sera rapide et précise.

Techniques de Traitement d'Images pour Dynamsoft OCR

Nous devons utiliser l'OCR dans une variété de situations, comme numériser un numéro de carte de crédit avec notre téléphone ou extraire du texte à partir de documents papier. Les capacités OCR sont incluses dans la reconnaissance d'étiquettes Dynamsoft (DLR) et Dynamic Web TWAIN (DWT).

Bien qu'ils puissent faire un excellent travail en général, nous pouvons améliorer les résultats en utilisant diverses techniques de traitement d'images.

Éclaircir/supprimer les ombres

Une mauvaisé illumination peut avoir un impact sur le résultat OCR. Pour améliorer le résultat, nous pouvons blanchir les photos ou éliminer les ombres des images.

Invert

Parce que le moteur OCR est souvent entraîné sur du texte en couleurs foncées, le texte en couleurs claires peut être plus difficile à découvrir et à reconnaître.

Texte clair

Il sera plus facile à reconnaître si nous inversons sa couleur

Texte clair inversé

Pour effectuer l'inversion, nous pouvons utiliser le paramètre GrayscaleTransformationModes dans DLR.

Voici les paramètres JSON :

"GrayscaleTransformationModes": [
    {
        "Mode": "DLR_GTM_INVERTED"
    }
]

Résultat de lecture de DLR .net :

Résultat de texte clair

Rescale

Si la hauteur de la lettre est trop basse, le moteur OCR peut ne pas produire un bon résultat. En général, l'image devrait avoir une résolution d'au moins 300 DPI.

Il y a un paramètre ScaleUpModes dans DLR 1.1 qui vous permet d'agrandir les lettres. Bien sûr, nous pouvons faire monter l'échelle de l'image nous-mêmes.

Lire l'image directement produit un mauvais résultat :

Image 1x

Après avoir redimensionné l'image x2, le résultat est correct :

Image 2x

Deskew

C'est bien si le texte est un peu déformé. Cependant, s'il est trop désaligné, le résultat sera affecté négativement. Pour améliorer le résultat, nous devons découper l'image.

Pour accomplir cela, nous pouvons utiliser la Transformation Hough Line dans OpenCV et Python.

Voici le code pour redresser l'image ci-dessus :

import cv2
import numpy as np
import math
from PIL import Image

def deskew():
    src = cv2.imread("neg.jpg", cv2.IMREAD_COLOR)
    gray = cv2.cvtColor(src, cv2.COLOR_BGR2GRAY)
    kernel = np.ones((5,5), np.uint8)
    erode_img = cv2.erode(gray, kernel)
    eroDil = cv2.dilate(erode_img, kernel)
    show_and_wait_key("eroDil", eroDil)

    canny = cv2.Canny(eroDil, 50, 150)
    show_and_wait_key("canny", canny)

    lines = cv2.HoughLinesP(canny, 0.8, np.pi / 180, 90, minLineLength=100, maxLineGap=10)
    drawing = np.zeros(src.shape[:], dtype=np.uint8)

    maxY = 0
    degree_of_bottomline = 0
    index = 0
    for line in lines:
        x1, y1, x2, y2 = line[0]
        cv2.line(drawing, (x1, y1), (x2, y2), (0, 255, 0), 1, lineType=cv2.LINE_AA)
        k = float(y1-y2)/(x1-x2)
        degree = np.degrees(math.atan(k))
        if index == 0:
            maxY = y1
            degree_of_bottomline = degree
        else:        
            if y1 > maxY:
                maxY = y1
                degree_of_bottomline = degree
        index += 1
    show_and_wait_key("houghP", drawing)

    img = Image.fromarray(src)
    rotate_img = img.rotate(degree_of_bottomline)
    rotate_img_cv = np.array(rotate_img)
    cv2.imshow("rotateImg", rotate_img_cv)
    cv2.imwrite("deskewed.jpg", rotate_img_cv)
    cv2.waitKey()

def show_and_wait_key(win_name, img):
    cv2.imshow(win_name, img)
    cv2.waitKey()

if __name__ == "__main__":
    deskew()
import cv2
import numpy as np
import math
from PIL import Image

def deskew():
    src = cv2.imread("neg.jpg", cv2.IMREAD_COLOR)
    gray = cv2.cvtColor(src, cv2.COLOR_BGR2GRAY)
    kernel = np.ones((5,5), np.uint8)
    erode_img = cv2.erode(gray, kernel)
    eroDil = cv2.dilate(erode_img, kernel)
    show_and_wait_key("eroDil", eroDil)

    canny = cv2.Canny(eroDil, 50, 150)
    show_and_wait_key("canny", canny)

    lines = cv2.HoughLinesP(canny, 0.8, np.pi / 180, 90, minLineLength=100, maxLineGap=10)
    drawing = np.zeros(src.shape[:], dtype=np.uint8)

    maxY = 0
    degree_of_bottomline = 0
    index = 0
    for line in lines:
        x1, y1, x2, y2 = line[0]
        cv2.line(drawing, (x1, y1), (x2, y2), (0, 255, 0), 1, lineType=cv2.LINE_AA)
        k = float(y1-y2)/(x1-x2)
        degree = np.degrees(math.atan(k))
        if index == 0:
            maxY = y1
            degree_of_bottomline = degree
        else:        
            if y1 > maxY:
                maxY = y1
                degree_of_bottomline = degree
        index += 1
    show_and_wait_key("houghP", drawing)

    img = Image.fromarray(src)
    rotate_img = img.rotate(degree_of_bottomline)
    rotate_img_cv = np.array(rotate_img)
    cv2.imshow("rotateImg", rotate_img_cv)
    cv2.imwrite("deskewed.jpg", rotate_img_cv)
    cv2.waitKey()

def show_and_wait_key(win_name, img):
    cv2.imshow(win_name, img)
    cv2.waitKey()

if __name__ == "__main__":
    deskew()
PYTHON

Lignes détectées :

Lignes détectées

Redressée :

Image redressée

Techniques de Traitement d'Images pour IronOCR

La qualité de l'image d'entrée n'est pas importante ici car IronOCR excelle à réparer des documents défectueux (bien que cela soit chronophage et obligera vos tâches OCR à utiliser plus de cycles CPU).

Choisir des formats d'image d'entrée avec moins de bruit numérique, tels que TIFF ou PNG, peut également entraîner des résultats plus rapides que des formats d'images avec pertes, tels que JPEG.

Les filtres d'image listés ci-dessous peuvent améliorer considérablement la performance :

  • OcrInput.Rotate(double degrees) — Fait pivoter les images dans le sens horaire d'un nombre spécifique de degrés. Les entiers négatifs sont utilisés pour la rotation dans le sens antihoraire.
  • OcrInput.Binarize() — Ce filtre d'image rend chaque pixel soit noir ou blanc, sans intermédiaire. Il peut améliorer la performance de l'OCR dans les circonstances où le contraste texte-fond est très faible.
  • OcrInput.ToGrayScale() — Ce filtre d'image convertit chaque pixel en une nuance de gris. Peu probable d'améliorer la précision de l'OCR, mais peut augmenter la vitesse.
  • OcrInput.Contrast() — Augmente automatiquement le contraste. Dans les numérisations à faible contraste, ce filtre améliore fréquemment la vitesse et la précision de l'OCR.
  • OcrInput.DeNoise() — Ce filtre ne devrait être utilisé que lorsque le bruit est attendu.
  • OcrInput.Invert() — Inverse toutes les couleurs. Par exemple, le blanc devient noir : le noir devient blanc.
  • OcrInput.Dilate() — Morphologie avancée. La dilatation est le processus d'ajout de pixels aux bords des objets dans une image. (Inverse of Erode)
  • OcrInput.Erode() — Fonction de morphologie avancée. L'érosion est le processus de suppression de pixels des bords des objets. (Inverse of Dilate)
  • OcrInput.Deskew() — Fait pivoter une image de sorte qu'elle soit orthogonale et dans le bon sens. Comme la tolérance de Tesseract pour les numérisations désalignées peut être aussi faible que 5 degrés, c'est assez utile pour l'OCR.
  • DeepCleanBackgroundNoise() — Élimine beaucoup de bruit de fond. Utilisez ce filtre uniquement si vous savez qu'il y a beaucoup de bruit de fond dans le document car il peut réduire la précision de l'OCR sur des documents clairs et est assez intensif pour le CPU.
  • OcrInput.EnhanceResolution — Améliore la résolution des photos basse résolution. En raison de OcrInput, ce filtre est rarement utilisé. OcrInput détectera et résoudra automatiquement la basse résolution.

Nous voudrions peut-être utiliser IronTesseract pour accélérer l'OCR sur des numérisations de haute qualité. Si nous recherchons la vitesse, nous pourrions commencer ici et par la suite réactiver des fonctionnalités jusqu'à ce que l'équilibre correct soit atteint.

using IronOcr;

class Program
{
    static void Main(string[] args)
    {
        var ocr = new IronTesseract();

// Configuration for speed tuning
        ocr.Configuration.BlackListCharacters = "~`$#^*_}{][|\\";
        ocr.Configuration.PageSegmentationMode = TesseractPageSegmentationMode.Auto;
        ocr.Configuration.TesseractVersion = TesseractVersion.Tesseract5;
        ocr.Configuration.EngineMode = TesseractEngineMode.LstmOnly;
        ocr.Language = OcrLanguage.EnglishFast;

        using (var input = new OcrInput(@"img\Potter.tiff"))
        {
            var result = ocr.Read(input);
            Console.WriteLine(result.Text);
        }
    }
}
using IronOcr;

class Program
{
    static void Main(string[] args)
    {
        var ocr = new IronTesseract();

// Configuration for speed tuning
        ocr.Configuration.BlackListCharacters = "~`$#^*_}{][|\\";
        ocr.Configuration.PageSegmentationMode = TesseractPageSegmentationMode.Auto;
        ocr.Configuration.TesseractVersion = TesseractVersion.Tesseract5;
        ocr.Configuration.EngineMode = TesseractEngineMode.LstmOnly;
        ocr.Language = OcrLanguage.EnglishFast;

        using (var input = new OcrInput(@"img\Potter.tiff"))
        {
            var result = ocr.Read(input);
            Console.WriteLine(result.Text);
        }
    }
}
Imports IronOcr

Friend Class Program
	Shared Sub Main(ByVal args() As String)
		Dim ocr = New IronTesseract()

' Configuration for speed tuning
		ocr.Configuration.BlackListCharacters = "~`$#^*_}{][|\"
		ocr.Configuration.PageSegmentationMode = TesseractPageSegmentationMode.Auto
		ocr.Configuration.TesseractVersion = TesseractVersion.Tesseract5
		ocr.Configuration.EngineMode = TesseractEngineMode.LstmOnly
		ocr.Language = OcrLanguage.EnglishFast

		Using input = New OcrInput("img\Potter.tiff")
			Dim result = ocr.Read(input)
			Console.WriteLine(result.Text)
		End Using
	End Sub
End Class
$vbLabelText   $csharpLabel

Ce résultat est 99,8% précis comparé à la base de référence de 100% — mais 35% plus rapide.

Licences et Tarification

Licences et Tarification

Licence par an. Tous les tarifs incluent un an de maintenance, c'est-à-dire des mises à jour gratuites du logiciel et un soutien premium.

Dynamsoft offre deux types de licences :

Licence par dispositif client

La licence " Un dispositif client " donne accès à une Application de même origine (même protocole, même hôte et même port) pour utiliser les fonctionnalités du logiciel à partir d'un dispositif client unique. Un dispositif client inactif est un dispositif qui n'a pas accédé à aucune capacité logicielle pendant 90 jours d'affilée. Une licence de dispositif client inactif sera libérée instantanément et sera disponible pour l'utilisation par tout autre dispositif client actif. Lorsque vous atteignez le nombre maximum de sièges de licence autorisés, Dynamsoft vous donnera 10 % de votre allocation de dispositif client pour une utilisation d'urgence. Une fois l'allocation de dispositif client supplémentaire épuisée, aucun nouveau dispositif client ne pourra accéder et utiliser le logiciel tant qu'il n'y aura pas à nouveau de sièges de licence disponibles. Veuillez garder à l'esprit que dépasser votre allocation de dispositif client n'a aucun effet sur les dispositifs client qui ont déjà été licenciés.

Licence par serveur

Pour déployer l'application sur un seul serveur, une " Licence pour un Serveur " est requise. Les serveurs font référence aux serveurs physiques et virtuels et comprennent, sans s'y limiter, les serveurs de production, les serveurs de basculement, les serveurs de développement qui sont également utilisés pour les tests, les serveurs d'assurance qualité, les serveurs de test, et les serveurs de mise en scène, qui nécessitent tous une licence. Des licences supplémentaires ne sont pas nécessaires pour les serveurs d'intégration continue (serveurs de build) ou les serveurs de développement localhost. La licence par serveur n'est valable que pour les installations de serveur sur site, et non pour les déploiements sur le cloud.

La tarification pour Dynamsoft OCR commence à 1 249$/an.

IronOCR Licensing and Pricing

En tant que développeurs, nous voulons tous accomplir nos projets avec le moins d'argent et de ressources possible - budgéter est crucial. Examinez le graphique pour déterminer quelle licence est la mieux adaptée à vos besoins et votre budget.

IronOCR fournit des licences avec un nombre personnalisable de développeurs, de projets, et de lieux, vous permettant de répondre aux besoins de votre projet tout en ne payant que pour la couverture dont vous avez besoin.

Les clés de licence IronOCR vous permettent de publier votre produit sans filigrane.

Les licences commencent à partir de $799 et incluent un an de soutien et de mises à jour.

Vous pouvez également utiliser une clé de licence d'essai pour essayer IronOCR gratuitement.

Conclusion

Tesseract OCR sur Mac, Windows, Linux, Azure OCR, et Docker sont tous disponibles avec IronOCR pour C#. .NET Framework 4.0 ou supérieur est requis, .NET Standard 2.0+, .NET Core 2.0+, .NET 5, Mono pour macOS et Linux, et Xamarin pour macOS ne sont que quelques exemples de développement multiplateforme. IronOCR utilise aussi le dernier moteur Tesseract 5 pour lire du texte, des codes-barres, et des QR codes depuis tous les principaux formats d'image et de PDF. En quelques minutes, cette bibliothèque ajoute des fonctionnalités OCR à vos applications de bureau, console, ou web ! L'OCR peut également lire des PDFs et des TIFFs multi-pages, et être enregistré comme document PDF consultable ou XHTML dans n'importe quel Scan OCR. Le texte brut, les données de code-barres, et une classe de résultats OCR englobant des paragraphes, des lignes, des mots, et des caractères font partie de ses choix de sortie de données. Il est disponible en 125 langues, y compris l'arabe, le chinois, l'anglais, le finlandais, le français, l'allemand, l'hébreu, l'italien, le japonais, le coréen, le portugais, le russe et l'espagnol, mais sachez que des packs de langues personnalisés peuvent également être générés.

Le complément OCR Dynamic .NET TWAIN est un composant .NET rapide et fiable pour la reconnaissance optique de caractères que vous pouvez utiliser dans les applications WinForms et WPF écrites en C# ou VB .NET. Vous pouvez numériser des documents ou capturer des photos à partir de webcams en utilisant le module de capture d'image de Dynamic .NET TWAIN, puis effectuer un OCR sur les images pour convertir le texte dans les images en texte, fichiers PDF consultables, ou chaînes. Plusieurs langues asiatiques, ainsi que l'arabe, sont proposées en plus de l'anglais.

IronOCR offre de meilleures licences que Dynamsoft OCR ; IronOcr commence à $799 avec un an gratuit, tandis que Dynamsoft commence à 1 249$ avec un essai gratuit. IronOCR propose également des licences pour plusieurs utilisateurs, tandis qu'avec Dynamsoft, vous ne recevez qu'une licence par utilisateur.

Bien que les deux logiciels visent à offrir les meilleures performances en termes de lectures OCR de codes-barres, image à texte, et image à texte, IronOCR se démarque par le fait qu'il brille même sur des images en assez mauvais état. Il met en place automatiquement ses méthodes de réglage sophistiquées pour vous donner les meilleurs résultats OCR. IronOCR utilise également Tesseract pour vous donner des résultats optimaux avec peu ou pas d'erreurs.

Iron Software offre également à ses clients et utilisateurs l'option de saisir l'ensemble de sa suite logicielle en seulement deux clics. Cela signifie que pour le prix de deux des composants dans la suite de logiciels Iron, vous pouvez actuellement obtenir tous les cinq composants et un soutien ininterrompu.

Veuillez noterDynamsoft OCR est une marque déposée de son propriétaire respectif. Ce site n'est pas affilié à, approuvé par, ou sponsorisé par Dynamsoft OCR. Tous les noms de produits, logos et marques sont la propriété de leurs propriétaires respectifs. Les comparaisons sont uniquement à des fins d'information et reflètent les informations disponibles publiquement au moment de la rédaction.

Questions Fréquemment Posées

Comment puis-je convertir des images de texte en formats numériques en utilisant C# ?

Vous pouvez utiliser IronOCR en C# pour convertir des images de texte en formats numériques. IronOCR offre des méthodes pour affiner et corriger automatiquement les scans de faible qualité, ce qui le rend idéal pour convertir divers formats d'image en texte.

Quels avantages IronOCR offre-t-il pour traiter les scans de faible qualité ?

IronOCR améliore automatiquement les scans de faible qualité en réduisant l'inclinaison, la distorsion et le bruit de fond tout en améliorant la résolution et le contraste, ce qui assure une plus grande précision dans la reconnaissance de texte.

Quelle bibliothèque OCR est meilleure pour les applications multiplateformes ?

IronOCR est adapté aux applications multiplateformes car il prend en charge des environnements comme Xamarin et Azure, offrant flexibilité aux développeurs travaillant avec diverses plateformes.

Quels formats d'image IronOCR prend-il en charge ?

IronOCR prend en charge une large gamme de formats d'image, ce qui le rend polyvalent pour différentes applications OCR. Il peut traiter des images et des documents PDF, offrant une flexibilité dans la gestion de diverses sources d'entrée.

La technologie OCR peut-elle aider à la gestion documentaire dans les entreprises ?

Oui, la technologie OCR peut grandement aider la gestion documentaire en numérisant les documents physiques, les rendant consultables et éditables. Cela réduit la saisie manuelle des données, minimise les erreurs et améliore l'accessibilité.

Comment Dynamsoft OCR traite-t-il l'acquisition d'image à partir de dispositifs ?

Dynamsoft OCR prend en charge l'acquisition d'images à partir de dispositifs compatibles TWAIN et de webcams, permettant une numérisation par lots et la modification des attributs du scanner pour un traitement d'image efficace.

Quelles sont les options de tarification pour IronOCR par rapport à d'autres bibliothèques ?

IronOCR propose des licences personnalisables qui peuvent être adaptées en fonction du nombre de développeurs, de projets et d'emplacements, offrant des options plus flexibles et rentables par rapport à certaines autres bibliothèques.

Quels sont les problèmes courants rencontrés lors de l'utilisation de la technologie OCR ?

Les problèmes courants avec la technologie OCR incluent la gestion des images de faible résolution, la distorsion et les polices de texte variées. Cependant, des bibliothèques comme IronOCR possèdent des fonctionnalités intégrées pour résoudre ces problèmes, améliorant la précision de l'OCR.

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