Démarrer avec l'OCR en C# et VB.NET

This article was translated from English: Does it need improvement?
Translated
View the article in English

IronOCR est une bibliothèque logicielle C# permettant aux développeurs de logiciels de la plateforme .NET de reconnaître et de lire du texte à partir d'images et de documents PDF. Il s'agit d'une bibliothèque OCR purement .NET qui utilise le moteur Tesseract le plus avancé que l'on connaisse.

Installation

Installation avec NuGet Package Manager

Installez IronOCR dans Visual Studio ou en ligne de commande avec le gestionnaire de paquets NuGet. Dans Visual Studio, accédez à la console avec :

  • Outils ->
  • NuGet Package Manager ->
  • Console du gestionnaire de paquets
Install-Package IronOcr

Et consultez IronOCR sur NuGet pour en savoir plus sur les mises à jour et l'installation des versions.

Il existe d'autres Packages NuGet IronOCR disponibles pour différentes plateformes :

Télécharger le fichier .ZIP IronOCR

Vous pouvez également choisir de télécharger IronOCR sous forme de fichier .ZIP. Cliquez sur télécharger directement la DLL. Une fois le fichier .zip téléchargé :

Instructions pour l'installation du Framework .NET 4.0+ :

  • Incluez dans votre projet le fichier IronOCR.dll qui se trouve dans le dossier net40
  • Puis ajouter les références de l'Assemblée à :

    * System.Configuration
    
    * System.Drawing
    
    * System.Web

Instructions pour .NET Standard & .NET Core 2.0+, & .NET 5

  • Inclure la dll IronOcr.dll dans le dossier netstandard2.0 dans votre projet
  • Puis ajoutez une référence de paquetage NuGet à :

    * System.Drawing.Common 4.7 ou supérieur

Télécharger le programme d'installation de l'IronOCR (Windows uniquement)

Une autre option consiste à télécharger notre programme d'installation d'IronOCR qui installera toutes les ressources nécessaires au fonctionnement d'IronOCR. N'oubliez pas que cette option n'est disponible que pour les systèmes Windows. Pour télécharger le programme d'installation, veuillez cliquez ici. Une fois le fichier .zip téléchargé :

Instructions pour l'installation du Framework .NET 4.0+ :

  • Incluez dans votre projet le fichier IronOCR.dll qui se trouve dans le dossier net40
  • Puis ajouter les références de l'Assemblée à :

    * System.Configuration
    
    * System.Drawing
    
    * System.Web

Instructions pour .NET Standard & .NET Core 2.0+, & .NET 5

  • Inclure la dll IronOcr.dll dans le dossier netstandard2.0 dans votre projet
  • Puis ajoutez une référence de paquetage NuGet à :

    * System.Drawing.Common 4.7 ou supérieur

Pourquoi choisir IronOCR ?

IronOCR est une bibliothèque logicielle .NET facile à installer, complète et bien documentée.

Choisissez IronOCR pour obtenir une précision d'OCR de plus de 99,8 %** sans utiliser de services Web externes, sans frais permanents et sans envoyer de documents confidentiels sur Internet.

Pourquoi les développeurs C# choisissent IronOCR plutôt que Vanilla Tesseract :

  • Installation en tant que DLL unique ou NuGet
  • Comprend les moteurs Tesseract 5, 4 et 3 dans leur emballage d'origine.
  • La précision 99,8 % est nettement supérieure à celle du Tesseract classique.
  • Vitesse fulgurante et multithreading
  • Compatible avec les applications MVC, WebApp, Desktop, Console et Serveur
  • Pas d'Exes ou de code C++ à utiliser
  • Prise en charge complète de l'OCR des PDF
  • Pour effectuer l'OCR de presque n'importe quel fichier image ou PDF
  • Prise en charge complète de .NET Core, Standard et FrameWork
  • Déploiement sur Windows, Mac, Linux, Azure, Docker, Lambda, AWS
  • Lire les codes-barres et les codes QR
  • Exporter l'OCR en XHTML
  • Exportation de l'OCR vers des documents PDF interrogeables
  • Prise en charge du multithreading
  • 125 langues internationales, toutes gérées via NuGet ou des fichiers OcrData
  • Extraire des images, des coordonnées, des statistiques et des polices. Pas seulement du texte.
  • Peut être utilisé pour redistribuer Tesseract OCR dans des applications commerciales et propriétaires.

    IronOCR brille lorsqu'il travaille avec des images du monde réel et des documents imparfaits tels que des photographies ou des scans de faible résolution qui peuvent présenter du bruit numérique ou des imperfections

    Autres oCR gratuit pour la plateforme .NET, telles que les autres API .NET Tesseract et les services web, ne sont pas aussi performantes dans ces cas d'utilisation réels.

    OCR avec Tesseract 5 - Commencer à coder en C&num ;

    L'exemple de code ci-dessous montre à quel point il est facile de lire du texte à partir d'une image en utilisant C# ou VB .NET.

OneLiner

:path=/static-assets/ocr/content-code-examples/get-started/get-started-1.cs
string Text = new IronTesseract().Read(@"img\Screenshot.png").Text;
Dim Text As String = (New IronTesseract()).Read("img\Screenshot.png").Text
VB   C#

Hello World configurable

:path=/static-assets/ocr/content-code-examples/get-started/get-started-2.cs
using IronOcr;

IronTesseract ocr = new IronTesseract();
using OcrInput input = new OcrInput();

// Add multiple images
input.LoadImage("images/sample.jpeg");

OcrResult result = ocr.Read(input);
Console.WriteLine(result.Text);
Imports IronOcr

Private ocr As New IronTesseract()
Private OcrInput As using

' Add multiple images
input.LoadImage("images/sample.jpeg")

Dim result As OcrResult = ocr.Read(input)
Console.WriteLine(result.Text)
VB   C#

C# C# PDF OCR

La même approche peut être utilisée pour extraire du texte de n'importe quel document PDF.

:path=/static-assets/ocr/content-code-examples/get-started/get-started-3.cs
using IronOcr;

IronTesseract ocr = new IronTesseract();
using OcrInput input = new OcrInput();

// We can also select specific PDF page numbers to OCR
input.LoadPdf("example.pdf", Password: "password");

OcrResult result = ocr.Read(input);
Console.WriteLine(result.Text);

// 1 page for every page of the PDF
Console.WriteLine($"{result.Pages.Length} Pages");
Imports IronOcr

Private ocr As New IronTesseract()
Private OcrInput As using

' We can also select specific PDF page numbers to OCR
input.LoadPdf("example.pdf", Password:= "password")

Dim result As OcrResult = ocr.Read(input)
Console.WriteLine(result.Text)

' 1 page for every page of the PDF
Console.WriteLine($"{result.Pages.Length} Pages")
VB   C#

OCR pour les TIFF multipages

:path=/static-assets/ocr/content-code-examples/get-started/get-started-4.cs
using IronOcr;

IronTesseract ocr = new IronTesseract();
using OcrInput input = new OcrInput();
var pageindices = new int[] { 1, 2 };
input.LoadImageFrames("multi-frame.tiff", pageindices);
OcrResult result = ocr.Read(input);
Console.WriteLine(result.Text);
Imports IronOcr

Private ocr As New IronTesseract()
Private OcrInput As using
Private pageindices = New Integer() { 1, 2 }
input.LoadImageFrames("multi-frame.tiff", pageindices)
Dim result As OcrResult = ocr.Read(input)
Console.WriteLine(result.Text)
VB   C#

Codes-barres et QR

IronOCR a la particularité de pouvoir lire les codes-barres et les codes QR des documents pendant la numérisation du texte. Les instances de la classe OcrResult.OcrBarcode donnent au développeur des informations détaillées sur chaque code-barres scanné.

:path=/static-assets/ocr/content-code-examples/get-started/get-started-5.cs
using IronOcr;

IronTesseract ocr = new IronTesseract();
ocr.Configuration.ReadBarCodes = true;

using OcrInput input = new OcrInput();
input.LoadImage("img/Barcode.png");

OcrResult Result = ocr.Read(input);
foreach (var Barcode in Result.Barcodes)
{
    // type and location properties also exposed
    Console.WriteLine(Barcode.Value);
}
Imports IronOcr

Private ocr As New IronTesseract()
ocr.Configuration.ReadBarCodes = True

Using input As New OcrInput()
	input.LoadImage("img/Barcode.png")
	
	Dim Result As OcrResult = ocr.Read(input)
	For Each Barcode In Result.Barcodes
		' type and location properties also exposed
		Console.WriteLine(Barcode.Value)
	Next Barcode
End Using
VB   C#

ROC sur des zones spécifiques d'images

Toutes les méthodes de numérisation et de lecture d'IronOCR permettent de spécifier exactement la partie de la page ou des pages dont on souhaite lire le texte. Cette fonction est très utile lorsqu'il s'agit de formulaires standardisés et permet de gagner énormément de temps et d'améliorer l'efficacité.

Pour utiliser les régions de culture, nous devons ajouter une référence système à System.Drawing afin de pouvoir utiliser l'objet System.Drawing.Rectangle.

:path=/static-assets/ocr/content-code-examples/get-started/get-started-6.cs
using IronOcr;

IronTesseract ocr = new IronTesseract();
using OcrInput input = new OcrInput();

// Dimensions are in pixel
var contentArea = new System.Drawing.Rectangle() { X = 215, Y = 1250, Height = 280, Width = 1335 };

input.LoadImage("document.png", contentArea);

OcrResult result = ocr.Read(input);
Console.WriteLine(result.Text);
Imports IronOcr

Private ocr As New IronTesseract()
Private OcrInput As using

' Dimensions are in pixel
Private contentArea = New System.Drawing.Rectangle() With {
	.X = 215,
	.Y = 1250,
	.Height = 280,
	.Width = 1335
}

input.LoadImage("document.png", contentArea)

Dim result As OcrResult = ocr.Read(input)
Console.WriteLine(result.Text)
VB   C#

OCR pour les scans de faible qualité

La classe OcrInput d'IronOCR peut corriger des scans que le Tesseract normal ne peut pas lire.

:path=/static-assets/ocr/content-code-examples/get-started/get-started-7.cs
using IronOcr;

IronTesseract ocr = new IronTesseract();
using OcrInput input = new OcrInput();
var pageindices = new int[] { 1, 2 };
input.LoadImageFrames(@"img\Potter.tiff", pageindices);

// fixes digital noise and poor scanning
input.DeNoise();

// fixes rotation and perspective
input.Deskew();

OcrResult result = ocr.Read(input);
Console.WriteLine(result.Text);
Imports IronOcr

Private ocr As New IronTesseract()
Private OcrInput As using
Private pageindices = New Integer() { 1, 2 }
input.LoadImageFrames("img\Potter.tiff", pageindices)

' fixes digital noise and poor scanning
input.DeNoise()

' fixes rotation and perspective
input.Deskew()

Dim result As OcrResult = ocr.Read(input)
Console.WriteLine(result.Text)
VB   C#

Exporter les résultats de l'OCR sous forme de PDF consultable

:path=/static-assets/ocr/content-code-examples/get-started/get-started-8.cs
using IronOcr;

IronTesseract ocr = new IronTesseract();
using OcrInput input = new OcrInput();
input.Title = "Quarterly Report";
input.LoadImage("image1.jpeg");
input.LoadImage("image2.png");
var pageindices = new int[] { 1, 2 };
input.LoadImageFrames("image3.gif", pageindices);

OcrResult result = ocr.Read(input);
result.SaveAsSearchablePdf("searchable.pdf");
Imports IronOcr

Private ocr As New IronTesseract()
Private OcrInput As using
input.Title = "Quarterly Report"
input.LoadImage("image1.jpeg")
input.LoadImage("image2.png")
Dim pageindices = New Integer() { 1, 2 }
input.LoadImageFrames("image3.gif", pageindices)

Dim result As OcrResult = ocr.Read(input)
result.SaveAsSearchablePdf("searchable.pdf")
VB   C#

Conversion de fichiers TIFF en fichiers PDF interrogeables

:path=/static-assets/ocr/content-code-examples/get-started/get-started-9.cs
using IronOcr;

IronTesseract ocr = new IronTesseract();
using OcrInput input = new OcrInput();
var pageindices = new int[] { 1, 2 };
input.LoadImageFrames("example.tiff", pageindices);
ocr.Read(input).SaveAsSearchablePdf("searchable.pdf");
Imports IronOcr

Private ocr As New IronTesseract()
Private OcrInput As using
Private pageindices = New Integer() { 1, 2 }
input.LoadImageFrames("example.tiff", pageindices)
ocr.Read(input).SaveAsSearchablePdf("searchable.pdf")
VB   C#

Exporter les résultats de l'OCR au format HTML

:path=/static-assets/ocr/content-code-examples/get-started/get-started-10.cs
using IronOcr;

IronTesseract ocr = new IronTesseract();
using OcrInput input = new OcrInput();
input.Title = "Html Title";
input.LoadImage("image1.jpeg");

OcrResult Result = ocr.Read(input);
Result.SaveAsHocrFile("results.html");
Imports IronOcr

Private ocr As New IronTesseract()
Private OcrInput As using
input.Title = "Html Title"
input.LoadImage("image1.jpeg")

Dim Result As OcrResult = ocr.Read(input)
Result.SaveAsHocrFile("results.html")
VB   C#

Filtres d'amélioration des images OCR

IronOCR fournit des filtres uniques aux objets OcrInput afin d'améliorer les performances de l'OCR.

Exemple de code d'amélioration d'image

:path=/static-assets/ocr/content-code-examples/get-started/get-started-11.cs
using IronOcr;

IronTesseract ocr = new IronTesseract();
using OcrInput input = new OcrInput();
input.LoadImage("LowQuality.jpeg");

// fixes digital noise and poor scanning
input.DeNoise();

// fixes rotation and perspective
input.Deskew();

OcrResult result = ocr.Read(input);
Console.WriteLine(result.Text);
Imports IronOcr

Private ocr As New IronTesseract()
Private OcrInput As using
input.LoadImage("LowQuality.jpeg")

' fixes digital noise and poor scanning
input.DeNoise()

' fixes rotation and perspective
input.Deskew()

Dim result As OcrResult = ocr.Read(input)
Console.WriteLine(result.Text)
VB   C#

Liste des filtres d'images OCR

Les filtres d'entrée intégrés à IronOCR pour améliorer les performances de l'OCR sont les suivants :

  • OcrInput.Rotate( doubles diplômes) - Fait pivoter les images d'un certain nombre de degrés dans le sens des aiguilles d'une montre. Pour une rotation dans le sens inverse des aiguilles d'une montre, utilisez des nombres négatifs.
  • OcrInput.Binarize() - Ce filtre d'image transforme chaque pixel en noir ou en blanc, sans solution intermédiaire. Peut améliorer les performances de l'OCR en cas de contraste très faible entre le texte et l'arrière-plan.
  • OcrInput.ToGrayScale() - Ce filtre d'image transforme chaque pixel en une nuance de gris. Il est peu probable qu'il améliore la précision de l'OCR, mais il peut en améliorer la vitesse
  • OcrInput.Contrast() - Augmente automatiquement le contraste. Ce filtre améliore souvent la vitesse et la précision de l'OCR dans les scans à faible contraste.
  • OcrInput.DeNoise() - Supprime le bruit numérique. Ce filtre ne doit être utilisé que lorsque l'on s'attend à ce qu'il y ait du bruit.
  • OcrInput.Invert() - Inverse toutes les couleurs. Par exemple, le blanc devient noir : le noir devient blanc.
  • OcrInput.Dilate() Morphologie avancée. La dilatation ajoute des pixels aux limites des objets d'une image. En face de Erode
  • OcrInput.Erode() Morphologie avancée. Erosion supprime les pixels sur les limites de l'objetOpposé à Dilater
  • OcrInput.Deskew() - Fait pivoter une image de façon à ce qu'elle soit dans le bon sens et orthogonale. Ceci est très utile pour l'OCR car la tolérance de Tesseract pour les scans biaisés peut être aussi basse que 5 degrés.
  • OcrInput.EnhanceResolution - Améliore la résolution des images de faible qualité. Ce filtre n'est pas souvent nécessaire car OcrInput.MinimumDPI et OcrInput.TargetDPI détectent et résolvent automatiquement les entrées à faible résolution.
  • EnhanceResolution est un paramètre qui détecte automatiquement les images à faible résolution (qui sont inférieures à 275 dpi) et de mettre automatiquement l'image à l'échelle, puis de rendre tout le texte plus net afin qu'il puisse être lu parfaitement par une bibliothèque OCR. Bien que cette opération prenne du temps en elle-même, elle permet généralement de réduire la durée totale d'une opération d'OCR sur une image.
  • Langue IronOCR prend en charge 22 packs de langues internationales, et le paramètre de langue peut être utilisé pour sélectionner une ou plusieurs langues multiples à appliquer pour une opération d'OCR.
  • Stratégie IronOCR prend en charge deux stratégies. Nous pouvons opter pour une numérisation rapide et moins précise d'un document, ou utiliser une stratégie avancée qui fait appel à des modèles d'intelligence artificielle pour améliorer automatiquement la précision du texte OCR en examinant la relation statistique des mots les uns par rapport aux autres dans une phrase.
  • L'espace couleur est un paramètre qui permet de choisir l'OCR en niveaux de gris ou en couleur. En général, les niveaux de gris sont la meilleure option. Cependant, lorsqu'il y a des textes ou des arrière-plans de teinte similaire mais de couleur très différente, un espace couleur complet donnera de meilleurs résultats.
  • **En général, toutes les bibliothèques d'OCR s'attendent à voir du texte noir sur fond blanc. Ce paramètre permet à IronOCR de détecter automatiquement les négatifs, ou les pages sombres avec du texte blanc, et de les lire.
  • **Ce paramètre permet au développeur d'indiquer à la bibliothèque d'OCR s'il s'agit d'un document complet ou d'un extrait, tel qu'une capture d'écran.
  • RotateAndStraighten est un paramètre avancé qui donne à IronOCR la capacité unique de lire des documents qui ne sont pas seulement tournés, mais qui contiennent peut-être une perspective, comme des photographies de documents textuels.
  • ReadBarcodes est une fonction utile qui permet à IronOCR de lire automatiquement les codes-barres et les codes QR sur les pages comme il lit également le texte, sans ajouter une grande charge de temps supplémentaire.
  • **Ce paramètre détermine le nombre de bits par pixel que la bibliothèque OCR utilisera pour déterminer la profondeur d'une couleur. Une profondeur de couleur plus élevée peut améliorer la qualité de l'OCR, mais augmente également le temps nécessaire à l'opération d'OCR.

125 Packs linguistiques

IronOCR prend en charge 125 langues internationales par le biais de packs de langues distribués sous forme de DLL, qui peuvent être téléchargée à partir de ce site webou encore de la Gestionnaire de paquets NuGet.

Les langues comprennent l'allemand, le français, l'anglais, le chinois, le japonais et bien d'autres encore. Il existe des packs linguistiques spécialisés pour les passeports MRZ, les chèques MICR, les données financières, les plaques d'immatriculation et bien d'autres encore. Vous pouvez également utiliser n'importe quel fichier tesseract ".traineddata", y compris ceux que vous créez vous-même.

Exemple de langue

:path=/static-assets/ocr/content-code-examples/get-started/get-started-12.cs
using IronOcr;

// PM> Install IronOcr.Languages.Arabic
IronTesseract ocr = new IronTesseract();
ocr.Language = OcrLanguage.Arabic;

using OcrInput input = new OcrInput();

var pageindices = new int[] { 1, 2 };
input.LoadImageFrames("img/arabic.gif", pageindices);
// Add image filters if needed
// In this case, even thought input is very low quality
// IronTesseract can read what conventional Tesseract cannot.
OcrResult result = ocr.Read(input);
// Console can't print Arabic on Windows easily.
// Let's save to disk instead.
result.SaveAsTextFile("arabic.txt");
Imports IronOcr

' PM> Install IronOcr.Languages.Arabic
Private ocr As New IronTesseract()
ocr.Language = OcrLanguage.Arabic

Using input As New OcrInput()
	
	Dim pageindices = New Integer() { 1, 2 }
	input.LoadImageFrames("img/arabic.gif", pageindices)
	' Add image filters if needed
	' In this case, even thought input is very low quality
	' IronTesseract can read what conventional Tesseract cannot.
	Dim result As OcrResult = ocr.Read(input)
	' Console can't print Arabic on Windows easily.
	' Let's save to disk instead.
	result.SaveAsTextFile("arabic.txt")
End Using
VB   C#

Exemple de langues multiples

Il est également possible d'effectuer l'OCR en utilisant plusieurs langues en même temps. Cela peut vraiment aider à obtenir des métadonnées et des adresses URL en anglais dans des documents Unicode.

:path=/static-assets/ocr/content-code-examples/get-started/get-started-13.cs
using IronOcr;

// PM> Install IronOcr.Languages.ChineseSimplified
IronTesseract ocr = new IronTesseract();
ocr.Language = OcrLanguage.ChineseSimplified;

// We can add any number of languages
ocr.AddSecondaryLanguage(OcrLanguage.English);

using OcrInput input = new OcrInput();
input.LoadPdf("multi-language.pdf");
OcrResult result = ocr.Read(input);
result.SaveAsTextFile("results.txt");
Imports IronOcr

' PM> Install IronOcr.Languages.ChineseSimplified
Private ocr As New IronTesseract()
ocr.Language = OcrLanguage.ChineseSimplified

' We can add any number of languages
ocr.AddSecondaryLanguage(OcrLanguage.English)

Using input As New OcrInput()
	input.LoadPdf("multi-language.pdf")
	Dim result As OcrResult = ocr.Read(input)
	result.SaveAsTextFile("results.txt")
End Using
VB   C#

Objets des résultats détaillés de l'OCR

IronOCR renvoie un objet de résultat d'OCR pour chaque opération d'OCR. En général, les développeurs n'utilisent la propriété text de cet objet que pour obtenir le texte scanné à partir de l'image. Cependant, le DOM des résultats de l'OCR est beaucoup plus avancé que cela.

:path=/static-assets/ocr/content-code-examples/get-started/get-started-14.cs
using IronOcr;

IronTesseract ocr = new IronTesseract();

// Must be set to true to read barcode
ocr.Configuration.ReadBarCodes = true;
using OcrInput input = new OcrInput();
var pageindices = new int[] { 1, 2 };
input.LoadImageFrames(@"img\sample.tiff", pageindices);

OcrResult result = ocr.Read(input);
var pages = result.Pages;
var words = pages[0].Words;
var barcodes = result.Barcodes;
// Explore here to find a massive, detailed API:
// - Pages, Blocks, Paraphaphs, Lines, Words, Chars
// - Image Export, Fonts Coordinates, Statistical Data, Tables
Imports IronOcr

Private ocr As New IronTesseract()

' Must be set to true to read barcode
ocr.Configuration.ReadBarCodes = True
Using input As New OcrInput()
	Dim pageindices = New Integer() { 1, 2 }
	input.LoadImageFrames("img\sample.tiff", pageindices)
	
	Dim result As OcrResult = ocr.Read(input)
	Dim pages = result.Pages
	Dim words = pages(0).Words
	Dim barcodes = result.Barcodes
	' Explore here to find a massive, detailed API:
	' - Pages, Blocks, Paraphaphs, Lines, Words, Chars
	' - Image Export, Fonts Coordinates, Statistical Data, Tables
End Using
VB   C#

Performance

IronOCR fonctionne dès le départ sans qu'il soit nécessaire d'ajuster les performances ou de modifier lourdement les images d'entrée.

La vitesse est fulgurante : IronOCR.2020 + est jusqu'à 10 fois plus rapide et fait plus de 250% d'erreurs en moins que les versions précédentes.

En savoir plus

Pour en savoir plus sur l'OCR en C#, VB, F#, ou tout autre langage .NET, veuillez lire nos tutoriels communautairesqui donnent des exemples concrets d'utilisation d'IronOCR et peuvent montrer les nuances permettant de tirer le meilleur parti de cette bibliothèque.

Un plein Référence API pour les développeurs .NET est également disponible.