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 consiste à reconnaître et numériser le texte, qu'il soit écrit ou 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 chiffres qui peuvent être utilisés par d'autres programmes tels que les traitements de texte. Le texte est converti en codes de caractères afin qu'il puisse être recherché et modifié sur un ordinateur.

Autrefois, tous les documents étaient physiques, et l'avenir pourrait être une société où tous les documents sont numériques, mais le présent est en transition. Les documents physiques et numériques coexistent dans cet état transitoire — c'est pourquoi des technologies comme l'OCR sont cruciales pour la conversion bidirectionnelle.

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 scannés, bien que les photographies soient également parfois utilisées. L'OCR est un précieux gain de temps car la saisie manuelle est souvent la seule autre option. Voici quelques exemples d'utilisation de l'OCR :

  • Les fichiers texte éditables peuvent être récupérés à partir de documents scannés, y compris les télécopies.
  • Utiliser les scans de livres pour créer des livres électroniques consultables et éditables.
  • Utiliser des photos 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 soient que quelques-unes des applications de l'OCR, elles démontrent la polyvalence de la technologie dans un large éventail de secteurs. Presque tous les employés de toutes les entreprises s'appuient fortement sur les documents au quotidien, l'utilisation commerciale est donc un aspect clé dans le développement de 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 OCR .NET qui prennent en charge la conversion d'images scanné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 caractéristiques exceptionnelles

IronOCR offre la capacité unique de détecter, lire et interpréter le texte à partir d'images et de documents PDF qui n'ont pas été scannés avec précision. IronOCR offre l'approche la plus simple pour extraire du texte des documents et photos, même si ce n'est pas toujours la plus rapide, car il affine automatiquement et corrige les scans de faible qualité, réduisant la distorsion, le bruit de fond, 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 scannées simple ou multi page, et il retournera tout le texte, les codes-barres et les informations QR. Un ensemble de classes dans la bibliothèque OCR ajoute des capacités OCR aux applications basées sur le web, de bureau ou en 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 en entrée.

Le moteur de reconnaissance optique de caractères (OCR) d'IronOCR peut lire le texte préparé à l'aide de nombreuses polices communes, italiques, poids et soulignements. Les classes de rognage permettent à l'OCR de fonctionner rapidement et avec précision. Lorsqu'on travaille avec des documents multipages, le moteur multithread d'IronOCR accélère l'OCR.

Caractéristiques d'IronOCR

Pour la gestion de Tesseract, nous utilisons IronOCR car il est unique de la manière suivante :

  • Fonctionne immédiatement dans du 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
  • Offre une précision et une rapidité améliorées par rapport à Tesseract traditionnel
  • Prend en charge Xamarin, Mono, Azure et Docker
  • Gère le système complexe de dictionnaires Tesseract utilisant les packages NuGet
  • Prend en charge les PDF, les Tiffs MultiFrame et tous les principaux formats d'image sans configuration
  • Peut corriger les scans de faible qualité et inclinés 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 des caractères rapide et fiable. Elle est utilisée pour créer des applications de bureau .NET en C# ou VB.NET. Vous pouvez facilement créer du code pour convertir le texte inutile dans les PDF ou photos en texte numérique pour l'édition, la recherche, l'archivage et plus encore en utilisant les API OCR de base.

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

  • Les mécanismes de transfert d'images en mémoire native, tamponnée et fichier disque sont tous pris en charge.
  • Avec le chargeur automatique de documents, le balayage par lots est possible (ADF).
  • Les attributs TWAIN peuvent être utilisés pour modifier les fonctionnalités communes des appareils.
  • IfAutoFeed, IfAutoScan, Résolution, Profondeur de couleur, Luminosité, Contraste, Unité, Recto-verso et autres caractéristiques peuvent toutes être modifiées.
  • Prend en charge la détection des pages blanches.
  • Vous permet de modifier et d'enregistrer les profils de scanner.

Capturez des images de webcams compatibles UVC et WIA :

  • Affichez un flux vidéo en direct lors de la capture de photos depuis une webcam sélectionnée.
  • Personnalisez les paramètres de la caméra : Luminosité, Contraste, Teinte, Saturation, Netteté, Gamma, Balance des blancs, Compensation du contre-jour, Gain, Activation des couleurs, Zoom, Mise au point, Exposition, Iris, Panoramique, Inclinaison, Rotation.

Chargement / Affichage robuste des images

  • Les images aux formats BMP, JPEG, PNG, TIFF, et TIFF multi-page 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 d'un disque local, d'un serveur FTP, d'un serveur HTTP ou d'une base de données.
  • Le décodage d'images pour BMP, JPEG, PNG, et TIFF en utilisant l'un des ensembles de composants d'imagerie .NET les plus complets

Sauvegarde et Téléchargement / Téléversement

  • Vous permet de lire et d'écrire des photos via un flux de fichier.
  • Prend en charge l'enregistrement des photos capturées sous BMP, JPEG, PNG, TIFF, ou TIFF multi-page sur un lecteur local, un serveur web ou une base de données.
  • Les compressions RLE, G3/G4, LZW, PackBits, et TIFF sont toutes prises en charge.
  • Les téléversements et téléchargements HTTPS sont pris en charge.
  • L'un des ensembles de composants d'imagerie .NET les plus étendus disponibles prend en charge l'encodage d'images BMP, JPEG, PNG, et TIFF.
  • Vous permet d'attacher des photos nouvellement obtenues aux fichiers TIFF existants.

Lire du texte à partir de PDF scannés ou d'autres images dans ASP.NET (Reconnaissance Optique de Caractères)

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

Utilisation d'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 sous forme de 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);
    }
}
$vbLabelText   $csharpLabel

En conséquence, le paragraphe suivant est précis à 100 %.

IronOCR Exemple Simple

Dans cet exemple simple, nous allons tester la précision de notre bibliothèque C# OCR pour lire le texte à partir d'un PNG
Image. C'est un test très basique, mais les choses deviendront plus compliquées à mesure que le tutoriel avance.

Le vif renard brun saute par-dessus le chien paresseux

Bien qu'il paraisse simple en surface, il se passe un comportement sophistiqué en arrière-plan : le balayage de l'image pour l'alignement, la qualité et la résolution, en examinant ses attributs, optimisant le moteur OCR, et enfin lisant le texte comme un humain pourrait le faire.

L'OCR est une tâche difficile à accomplir par une machine, et les vitesses de lecture peuvent être comparables à celles d'un humain. En d'autres termes, l'OCR n'est pas une procédure rapide. Cependant, dans ce cas, il est absolument correct

précision des résultats de l'application OCR C#

Dans la plupart des scénarios réels, les développeurs voudront que leurs projets fonctionnent aussi rapidement que possible. Dans ce scénario, nous vous proposons plutôt d'utiliser 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, telles que :

  • 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 intégralité ou en portions
  • Améliorer le contraste, la résolution et la taille de l'image
  • Correction de la rotation, du bruit de scan, du bruit numérique, de l'inclinaison, et des images négatives

IronTesseract

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

  • Utilisez dès maintenant les moteurs OCR Tesseract 5, 4 ou 3
  • Si nous regardons une capture d'écran, un extrait, ou l'intégralité du document, spécifiez le type de document
  • Reconnaître les codes-barres
  • Les PDF consultables, Hocr HTML, un DOM, et des chaînes sont toutes des options pour les résultats OCR
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);
        }
    }
}
$vbLabelText   $csharpLabel

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

Exemple de numérisation OCR à partir d'un fichier TIFF en C#

Comme vous pouvez le voir, lire du texte (et, le cas échéant, des codes-barres) à partir d'une image scannée telle qu'un TIFF a été assez facile. La précision de ce travail OCR est de 100%.

Ensuite, nous allons essayer un scan de bien moins bonne qualité de la même page, à faible DPI avec beaucoup de distorsion et de bruit numérique, ainsi que des dommages au papier original.

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

C'est là qu'IronOCR brille vraiment par rapport à 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 scannées du monde réel plutôt que sur des cas de test 'parfaits' créés numériquement afin d'obtenir 100 % de précision OCR.

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);
        }
    }
}
$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% qui est presque aussi précise que l'OCR d'un scan de haute qualité.

Utilisation de Dynamsoft OCR

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

Images de scan<

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 OCR professionnel

Pour utiliser le module professionnel OCR pour l'OCR côté client, vous devez inclure ocrpro.js dans l'en-tête et également télécharger le 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 le texte en utilisant l'OCR

Utiliser l'API de reconnaissance OCR JS pour extraire du texte à partir d'images scannées est aussi simple que d'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

Lecture des régions rognées des images

Les deux ensembles de logiciels offrent des solutions pour rogner les images pour l'OCR.

Lecture des régions rognées avec IronOCR

La branche d'Iron de Tesseract OCR est compétente pour lire des régions spécifiques d'images, comme montré dans l'exemple de code suivant.

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

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

Numérisation d'une section de page : nous utilisons System.Drawing.Rectangle pour désigner une région à lire dans un document, ce qui améliore la vitesse et la précision.

Exemple de numérisation OCR à partir d'un fichier TIFF en C#
Exemple de numérisation OCR à partir d'un fichier TIFF en C#
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);
        }
    }
}
$vbLabelText   $csharpLabel

Ceci résulte en une augmentation de 41 % de la vitesse, tout en nous permettant d'être plus précis. Cela est extrêmement précieux pour les applications OCR .NET impliquant des documents qui sont comparables et cohérents, y compris les factures, les reçus, les chèques, les formulaires, les réclamations de dépenses, etc.

Lorsque nous lisons des PDF, les ContentAreas (rognage OCR) sont également pris en charge.

Lecture des régions rognées avec Dynamsoft OCR

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

  1. Accédez à Outils -> Choisir des éléments de la boîte à outils, puis à l'onglet Composants .NET Framework, cliquez sur le bouton Parcourir et localisez DynamicDotNetTWAIN.dll.

  2. Cliquez avec le bouton droit sur le fichier de projet dans l'Explorateur de solutions et sélectionnez Ajouter -> Élément existant... puis ajoutez les éléments nécessaires à partir du répertoire de 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); 
    }
}
$vbLabelText   $csharpLabel

Voici à quoi ressemble l'application:

Application de démonstration de Zone OCR utilisant le SDK OCR TWAIN .NET dynamique

Optimisation de la performance des images

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

Techniques de traitement d'image pour Dynamsoft OCR

Nous devons utiliser l'OCR dans une variété de situations, telles que scanner 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'image.

Alléger/retirer les ombres

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

Inverser

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

Texte léger

Il sera plus facile de le reconnaître si nous en invertissons la 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"
    }
]

Resultat de lecture de DLR .net :

Résultat de texte léger

Redimensionner

Si la hauteur des lettres est trop faible, le moteur OCR peut ne pas produire un bon résultat. En général, l'image doit avoir un DPI d'au moins 300.

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

Lire l'image directement donne un résultat incorrect :

1 image

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

2x image

Déformer

Tout va bien si le texte est un peu déformé. Cependant, s'il est trop incliné, le résultat sera affecté négativement. Pour améliorer le résultat, nous avons besoin de rogner l'image.

Pour accomplir cela, nous pouvons utiliser la Transformée de Hough en 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é :

Image déformée

Techniques de traitement d'image pour IronOCR

La qualité de l'image d'entrée n'est pas importante ici car IronOCR excelle à réparer les documents défaillants (bien que cela soit long et entraînera l'utilisation de plus de cycles CPU lors de vos tâches OCR).

Choisir des formats d'image d'entrée avec moins de bruit numérique, comme le TIFF ou le PNG, peut également donner des résultats plus rapides que les formats d'image avec perte, comme le JPEG.

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

  • OcrInput.Rotate(double degrees) — Tourne les images dans le sens des aiguilles d'une montre d'un nombre spécifié de degrés Les entiers négatifs sont utilisés pour la rotation dans le sens inverse des aiguilles d'une montre.
  • OcrInput.Binarize() - Ce filtre d'image rend chaque pixel soit noir, soit blanc, sans intermédiaire. Cela peut améliorer la performance OCR dans des circonstances où le contraste texte-fond est très faible.
  • OcrInput.ToGrayScale() - Ce filtre d'image convertit chaque pixel en une nuance de gris. Il est peu probable qu'il améliore la précision de l'OCR, mais il peut augmenter la vitesse.
  • OcrInput.Contrast() - Augmente automatiquement le contraste. Dans les scans à 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 du 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 consistant à ajouter des pixels aux bords des objets d'une image. (Inverse of Erode)
  • OcrInput.Erode() - Une fonction de morphologie avancée. L'érosion est le processus de suppression des pixels des bords des objets. (Inverse of Dilate)
  • OcrInput.Deskew() — Fait pivoter une image afin qu'elle soit orthogonale et à l'endroit. Comme Tesseract a une tolérance pour les scans inclinés qui peut descendre jusqu'à 5 degrés, cela est assez utile pour l'OCR.
  • DeepCleanBackgroundNoise() - Supprime beaucoup de bruit de fond. N'utilisez ce filtre que si vous savez qu'il y a beaucoup de bruit de fond dans le document, car cela peut réduire la précision de l'OCR sur des documents clairs et est assez gourmand en ressources 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 pourrions vouloir utiliser IronTesseract pour accélérer l'OCR sur des scans de meilleure qualité. Si nous cherchons la vitesse, nous pourrions commencer ici et ensuite réactiver les fonctions jusqu'à ce que le bon équilibre 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);
        }
    }
}
$vbLabelText   $csharpLabel

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

Licences et Tarification

Licensing et Tarification Dynamsoft

Licence par an. Tous les tarifs incluent un an de maintenance, qui comprend des mises à jour logicielles gratuites et un support premium.

Dynamsoft propose deux types de licences :

Licence par appareil client

La " Licence pour un appareil client " donne accès à une application avec origine identique (même protocole, même hôte et même port) pour utiliser les fonctionnalités du logiciel à partir d'un seul appareil client. Un appareil client inactif est celui qui n'a pas accédé à aucune fonctionnalité du logiciel pendant 90 jours consécutifs. Un siège de licence d'un appareil client inactif sera immédiatement libéré et mis à disposition pour être utilisé par tout autre appareil client actif. Lorsque vous atteignez le nombre maximum de sièges de licence autorisés, Dynamsoft vous accordera 10% supplémentaires de votre allocation d'appareils clients pour une utilisation d'urgence. Une fois l'allocation d'appareils clients supplémentaires épuisée, aucun nouvel appareil client ne pourra accéder et utiliser le logiciel tant qu'il n'y a plus de sièges de licence disponibles. Veuillez garder à l'esprit que dépasser votre allocation d'appareils clients n'a aucun effet sur les appareils clients déjà licenciés.

Licence par serveur

Pour déployer l'application sur un seul serveur, une " Licence pour un serveur " est requise. Les serveurs désignent à la fois les serveurs physiques et virtuels et incluent, sans s'y limiter, les serveurs de production, les serveurs de secours, les serveurs de développement également utilisés pour les tests, les serveurs d'assurance qualité, les serveurs de test, et les serveurs de préproduction, nécessitant tous une licence. Des licences supplémentaires ne sont pas requises pour les serveurs d'intégration continue (serveurs de construction) ou les serveurs de développement local. La licence par serveur n'est valable que pour les installations de serveurs sur site, et non pour les déploiements dans le cloud.

Le tarif pour Dynamsoft OCR commence à 1 249 USD / an.

Licensing et Tarification IronOCR

En tant que développeurs, nous voulons tous réaliser nos projets avec un minimum d'argent et de ressources — établir un budget est essentiel. Examinez le tableau pour déterminer quelle licence convient le mieux à vos besoins et à votre budget.

IronOCR propose des licences avec un nombre modifiable 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 support 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 sont tous des exemples de développement multiplateforme. IronOCR utilise également le dernier moteur Tesseract 5 pour lire le texte, les codes-barres, et les QR codes à partir de tous les principaux formats d'image et PDF. En quelques minutes, cette bibliothèque ajoute des fonctionnalités OCR à vos applications de bureau, de console, ou web ! L'OCR peut également lire des PDF et des TIFF multipages, et peut être enregistré au format PDF consultable ou XHTML dans tout Scan OCR. Le texte brut, les données de code-barres, et une classe de résultat OCR englobant les paragraphes, les lignes, les mots, et les caractères font partie de ses options de sortie de données. Il est disponible en 125 langues, y compris l'arabe, le chinois, l'anglais, le finnois, le français, l'allemand, l'hébreu, l'italien, le japonais, le coréen, le portugais, le russe, et l'espagnol, mais gardez à l'esprit que des packs de langues personnalisés peuvent également être générés.

L'add-on Dynamic .NET TWAIN OCR est un composant .NET rapide et fiable pour la reconnaissance optique de caractères, que vous pouvez utiliser dans des applications WinForms et WPF écrites en C# ou VB .NET. Vous pouvez scanner des documents ou capturer des photos depuis des webcams en utilisant le module de capture d'image Dynamic .NET TWAIN, puis effectuer l'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 une année gratuite, tandis que Dynamsoft commence à 1249 USD avec un essai gratuit. IronOCR propose également des licences pour plusieurs utilisateurs, tandis qu'avec Dynamsoft, vous ne recevez qu'une seule licence par utilisateur.

Bien que les deux ensembles de logiciels visent à offrir les meilleures performances pour la lecture OCR de codes-barres, l'image en texte, et l'image en texte, IronOCR se distingue par le fait qu'il brille même sur les images qui sont en très mauvais état. Il met automatiquement en place 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 la possibilité d'obtenir l'ensemble de sa suite logicielle en seulement deux clics. Cela signifie que pour le prix de deux des composants de la suite Iron Software, vous pouvez actuellement obtenir tous les cinq composants et un support ininterrompu.

Veuillez noterDynamsoft OCR est une marque déposée de son propriétaire respectif. Ce site n'est pas affilié, approuvé 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 faites à titre d'information uniquement et reflètent les informations publiquement disponibles 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