Lire du texte à partir d'images avec C# OCR

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

Dans ce tutoriel, nous allons apprendre à convertir des images en texte en C# et dans d'autres langages .NET.

Lecture de texte à partir d'images dans les applications .NET

Nous utiliserons la classe IronOcr.IronTesseract pour reconnaître du texte dans des images et nous examinerons les nuances de l'utilisation de Iron Tesseract OCR pour obtenir les meilleures performances en termes de précision et de vitesse lors de la lecture de texte à partir d'images dans .NET

Pour réaliser l'opération "Image to Text", nous allons installer la bibliothèque IronOCR dans un projet Visual Studio.

Pour ce faire, nous téléchargeons le fichier DLL IronOCR ou utiliser NuGet .

Install-Package IronOcr

Pourquoi IronOCR ?

Nous utilisons IronOCR pour la gestion de Tesseract parce qu'il est unique en son genre :

  • Fonctionne dès sa sortie de la boîte en .NET pur
  • 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 &amp ; 3)
  • Est disponible pour tout projet .NET : .NET Framework 4.5 +, .NET Standard 2 + et .NET Core 2, 3 & 5!
  • Amélioration de la précision et de la vitesse par rapport au Tesseract traditionnel
  • Prise en charge de Xamarin, Mono, Azure et Docker
  • Gérer le système complexe de dictionnaires Tesseract à l'aide de paquets NuGet
  • Prise en charge des PDFS, des Tiffs multi-trames et de tous les principaux formats d'image sans configuration
  • Permet de corriger les scans de mauvaise qualité et les scans biaisés afin d'obtenir les meilleurs résultats avec Tesseract.

    Commencez à utiliser IronOCR dans votre projet dès aujourd'hui avec un essai gratuit.

    Première étape :
    green arrow pointer

Utilisation de Tesseract dans C# ;

Dans cet exemple simple, vous pouvez voir que nous utilisons la fonction IronOcr.IronTesseract pour lire le texte d'une image et renvoyer automatiquement sa valeur sous forme de chaîne de caractères.

:path=/static-assets/ocr/content-code-examples/tutorials/how-to-read-text-from-an-image-in-csharp-net-1.cs
// PM> Install-Package IronOcr
using IronOcr;

OcrResult result = new IronTesseract().Read(@"img\Screenshot.png");
Console.WriteLine(result.Text);
' PM> Install-Package IronOcr
Imports IronOcr

Private result As OcrResult = (New IronTesseract()).Read("img\Screenshot.png")
Console.WriteLine(result.Text)
VB   C#

Ce qui donne une précision de 100 % avec le texte suivant :

IronOCR Simple Example

In this simple example we will test the accuracy of our C# OCR library to read text from a PNG
Image. This is a very basic test, but things will get more complicated as the tutorial continues.

The quick brown fox jumps over the lazy dog

Bien que cela puisse sembler simpliste, un comportement sophistiqué se produit "sous la surface" : l'analyse de l'image pour en vérifier l'alignement, la qualité et la résolution, l'examen de ses propriétés, l'optimisation du moteur OCR et l'utilisation d'un réseau d'intelligence artificielle entraîné pour lire le texte comme le ferait un être humain.

L'OCR n'est pas un processus simple à réaliser pour un ordinateur, et les vitesses de lecture peuvent être similaires à celles d'un humain. En d'autres termes, l'OCR n'est pas un processus instantané. Dans ce cas, cependant, elle est exacte à 100 %.

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

Utilisation avancée du Tesseract d'IronOCR pour C# ;

Dans la plupart des cas d'utilisation réels, les développeurs souhaitent obtenir les meilleures performances possibles pour leur projet. Dans ce cas, nous vous recommandons d'utiliser la fonction OcrInput et Tesseract de fer dans l'espace de noms IronOcr.

OcrInput vous permet de définir les caractéristiques spécifiques d'un travail d'OCR, par exemple :

  • Travailler avec presque tous les types d'images, y compris JPEG, TIFF, GIF, BMP et PNG
  • Importation de documents PDF entiers ou partiels
  • Améliorer le contraste, la résolution et la taille
  • Correction de la rotation, du bruit de numérisation, du bruit numérique, de l'obliquité, des images négatives

    IronTesseract

  • Choisissez parmi des centaines de langues et de variantes de langues prêtes à l'emploi
  • Utiliser les moteurs d'OCR Tesseract 5, 4 ou 3 "prêts à l'emploi"
  • Spécifiez un type de document, qu'il s'agisse d'une capture d'écran, d'un extrait ou d'un document entier
  • Lire les codes-barres
  • Résultats de sortie vers : PDF consultables, Hocr HTML, DOM et chaînes de caractères

Exemple : Démarrer avec OcrInput + IronTesseract

Tout cela peut sembler décourageant, mais dans l'exemple ci-dessous, vous verrez les paramètres par défaut que nous vous recommandons d'utiliser au départ, et qui fonctionneront avec presque toutes les images que vous entrerez dans IronOCR.

:path=/static-assets/ocr/content-code-examples/tutorials/how-to-read-text-from-an-image-in-csharp-net-2.cs
using IronOcr;

IronTesseract ocr = new IronTesseract();
using OcrInput input = new OcrInput();
var pageindices = new int[] { 1, 2 };
input.LoadImageFrames(@"img\Potter.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("img\Potter.tiff", pageindices)
Dim result As OcrResult = ocr.Read(input)
Console.WriteLine(result.Text)
VB   C#

Nous pouvons l'utiliser 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 constater, la lecture du texte(et éventuellement des codes-barres) à partir d'une image numérisée telle qu'un TIFF était plutôt facile.

Ce travail d'OCR donne une précision de 100%.

L'OCR n'est pas une science parfaite lorsqu'il s'agit de documents réels, mais IronTesseract est à peu près aussi bon que possible.

Vous noterez également qu'IronOCR peut lire automatiquement des documents de plusieurs pages, tels que des TIFF et même desextraire du texte à partir de documents PDF automatiquement.

Exemple : Une numérisation de faible qualité


C# OCR Scan à basse résolution avec bruit numérique

Nous allons maintenant essayer un scan de qualité nettement inférieure de la même page, à un faible DPI, qui présente de nombreuses distorsions et du bruit numérique et qui a endommagé le papier d'origine.

C'est là qu'IronOCR se démarque vraiment des autres bibliothèques d'OCR telles que Tesseract, et nous verrons que les autres projets d'OCR évitent d'en discuter. OCR sur des images scannées réelles plutôt que sur des cas de test irréalistement "parfaits" créés numériquement pour donner une précision d'OCR de 100 %.

:path=/static-assets/ocr/content-code-examples/tutorials/how-to-read-text-from-an-image-in-csharp-net-3.cs
using IronOcr;

IronTesseract ocr = new IronTesseract();
using OcrInput input = new OcrInput();
var pageindices = new int[] { 1, 2 };
input.LoadImageFrames(@"img\Potter.LowQuality.tiff", pageindices);
input.Deskew(); // removes rotation and perspective
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.LowQuality.tiff", pageindices)
input.Deskew() ' removes rotation and perspective
Dim result As OcrResult = ocr.Read(input)
Console.WriteLine(result.Text)
VB   C#

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

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

Les filtres d'image peuvent prendre un peu de temps pour fonctionner, mais ils réduisent également le temps de traitement de l'OCR. C'est un équilibre délicat pour un développeur qui doit apprendre à connaître ses documents d'entrée.

Si vous n'êtes pas sûr de vous :

  • Input.Deskew() est un filtre sûr et très efficace.
  • Deuxièmement, essayez Input.DeNoise() pour corriger un bruit numérique considérable.

Optimisation des performances

Le facteur le plus important pour la vitesse d'un travail d'OCR est en fait la qualité de l'image d'entrée. Moins il y a de bruit de fond et plus le nombre de ppp est élevé, avec une cible parfaite d'environ 200 ppp, plus les résultats de l'OCR seront rapides et précis.

Cela n'est toutefois pas nécessaire, car IronOCR excelle dans la correction de documents imparfaits(bien que cela prenne du temps et que vos travaux d'OCR utilisent davantage de cycles de l'unité centrale).

Si possible, le choix de formats d'image d'entrée avec moins de bruit numérique, tels que TIFF ou PNG, peut également permettre d'obtenir des résultats plus rapides que ceux obtenus avec les formats TIFF ou PNG perte des formats d'image tels que JPEG.

Filtres à images

Les filtres d'image suivants peuvent réellement améliorer les performances :

  • 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. l'érosion supprime les pixels sur les limites de l'objetOpposé à la dilatation
  • 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.DeepCleanBackgroundNoise() Suppression des bruits de fond importants. Ce filtre n'est utilisé que si l'on sait que le bruit de fond du document est extrême, car il risque également de réduire la précision de l'OCR des documents propres, et il est très coûteux pour l'unité centrale.
  • 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.

Optimisation des performances pour plus de rapidité

En utilisant Iron Tesseract, nous pouvons souhaiter accélérer l'OCR sur des scans de meilleure qualité.

Si l'on optimise la vitesse, on peut commencer par cette position, puis activer les fonctions jusqu'à ce que l'on ait trouvé l'équilibre parfait.

:path=/static-assets/ocr/content-code-examples/tutorials/how-to-read-text-from-an-image-in-csharp-net-4.cs
using IronOcr;

IronTesseract ocr = new IronTesseract();

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

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

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

Private ocr As New IronTesseract()

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

Using input As New OcrInput()
	Dim pageindices = New Integer() { 1, 2 }
	input.LoadImageFrames("img\Potter.tiff", pageindices)
	
	Dim result As OcrResult = ocr.Read(input)
	Console.WriteLine(result.Text)
End Using
VB   C#

Ce résultat est 99,8% précis par rapport à la référence 100% - mais 35% plus rapide.

Lecture de régions recadrées d'images

Comme vous pouvez le voir dans l'exemple de code suivant, la version d'Iron de l'OCR Tesseract est capable de lire des zones spécifiques d'une image.

Nous pouvons utiliser un System.Drawing.Rectangle pour spécifier, en pixels, la zone exacte de l'image à lire.

Cela peut s'avérer extrêmement utile lorsqu'il s'agit d'un formulaire standardisé qui est rempli, où seule une certaine zone comporte un texte qui change d'un cas à l'autre.

Exemple : Numérisation d'une zone de la page

Nous pouvons utiliser un System.Drawing.Rectangle pour spécifier une région dans laquelle nous lirons un document. L'unité de mesure est toujours le pixel.

Nous verrons que cela permet d'améliorer la vitesse et d'éviter la lecture de textes inutiles. Dans cet exemple, nous lirons le nom d'un élève à partir d'une zone centrale d'un document standardisé.

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


:path=/static-assets/ocr/content-code-examples/tutorials/how-to-read-text-from-an-image-in-csharp-net-5.cs
using IronOcr;
using IronSoftware.Drawing;

IronTesseract ocr = new IronTesseract();
using OcrInput input = new OcrInput();
// a 41% improvement on speed
Rectangle contentArea = new Rectangle(x: 215, y: 1250, height: 280, width: 1335);
input.LoadImage("img/ComSci.png", contentArea);
OcrResult result = ocr.Read(input);
Console.WriteLine(result.Text);
Imports IronOcr
Imports IronSoftware.Drawing

Private ocr As New IronTesseract()
Private OcrInput As using
' a 41% improvement on speed
Private contentArea As New Rectangle(x:= 215, y:= 1250, height:= 280, width:= 1335)
input.LoadImage("img/ComSci.png", contentArea)
Dim result As OcrResult = ocr.Read(input)
Console.WriteLine(result.Text)
VB   C#

Cela permet une augmentation de la vitesse de 41% - et nous permet d'être spécifiques. Cette fonction est extrêmement utile pour les scénarios d'OCR .NET dans lesquels les documents sont similaires et cohérents, tels que les factures, les reçus, les chèques, les formulaires, les notes de frais, etc.

Domaines de contenu(Recadrage OCR) est également pris en charge pour la lecture des PDF.

Langues internationales

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és à partir de ce site web, ou également à partir du gestionnaire de paquets NuGet pour Visual Studio.

Nous pouvons les installer en consultant NuGet(rechercher "IronOcr.Languages") ou de laPage des packs linguistiques OCR.

Les langues prises en charge sont les suivantes :

  • Afrikaans
  • Amharique Aussi connu sous le nom de አማርኛ
  • Arabe Aussi connu sous le nom de العربية
  • Alphabet arabe Aussi connu sous le nom de العربية
  • Alphabet arménien Aussi connu sous le nom de Հայերեն
  • Assamais Aussi connu sous le nom de অসমীয়া
  • Azerbaïdjan Aussi connu sous le nom de azərbaycan dili
  • AzerbaïdjanaisCyrillique Aussi connu sous le nom de azərbaycan dili
  • Biélorusse Aussi connu sous le nom de беларуская мова
  • Bengali Aussi connu sous le nom de Bangla,বাংলা
  • Alphabet bengali Aussi connu sous le nom de Bangla,বাংলা
  • Tibétain Aussi connu sous le nom de tibétain standard, tibétain, central ཡིག་
  • Bosniaque Aussi connu sous le nom de bosanski jezik
  • Breton Aussi connu sous le nom de brezhoneg
  • Bulgare Aussi connu sous le nom de български език
  • Alphabet autochtone canadien Aussi connu sous le nom de Premières nations canadiennes, Canadiens autochtones, Canadiens natifs, Inuits
  • Catalan Aussi connu sous le nom de català, valencià
  • Cebuano Aussi connu sous le nom de Bisaya, Binisaya
  • Tchèque Aussi connu sous le nom de čeština, český jazyk
  • Alphabet Cherokee Aussi connu sous le nom de ᏣᎳᎩ ᎦᏬᏂᎯᏍᏗ, Tsalagi Gawonihisdi
  • Chinois simplifié Aussi connu sous le nom de 中文(Zhōngwén), 汉语, 漢語
  • ChinoisSimplifiéVertical Aussi connu sous le nom de 中文(Zhōngwén), 汉语, 漢語
  • ChinoisTraditionnel Aussi connu sous le nom de 中文(Zhōngwén), 汉语, 漢語
  • ChinoisTraditionnelVertical Aussi connu sous le nom de 中文(Zhōngwén), 汉语, 漢語
  • Cherokee Aussi connu sous le nom de ᏣᎳᎩ ᎦᏬᏂᎯᏍᏗ, Tsalagi Gawonihisdi
  • Corse Aussi connu sous le nom de corsu, lingua corsa
  • Gallois Aussi connu sous le nom de Cymraeg
  • Alphabet cyrillique Aussi connu sous le nom d'alphabet cyrillique
  • Danois Aussi connu sous le nom de dansk
  • DanishFraktur Autrefois connu sous le nom de dansk
  • Allemand Aussi connu sous le nom de Deutsch
  • GermanFraktur Aussi connu sous le nom de Deutsch
  • Alphabet Devanagari Aussi connu sous le nom de Nagair,देवनागरी
  • Divehi Aussi connu sous le nom de ދިވެހި
  • Dzongkha Aussi connu sous le nom de རྫོང་ཁ
  • Grec Aussi connu sous le nom de ελληνικά
  • Anglais
  • MiddleEnglish Aussi connu sous le nom d'anglais(1100-1500 AD)
  • Espéranto
  • Estonien Aussi connu sous le nom de eesti, eesti keel
  • Alphabet éthiopien Aussi connu sous le nom de Ge'ez,ግዕዝ, Gəʿəz
  • Basque Aussi connu sous le nom de euskara, euskera
  • Féroïen Aussi connu sous le nom de føroyskt
  • Persan Aussi connu sous le nom de فارسی
  • Filipino Aussi connu sous le nom de langue nationale des Philippines, Tagalog normalisé
  • Finnois Aussi connu sous le nom de suomi, suomen kieli
  • Financier Aussi connu sous le nom de Documents financiers, numériques et techniques
  • Français Aussi connu sous le nom de français, langue française
  • Alphabet Fraktur Aussi connu sous le nom de Fraktur générique, main calligraphique de l'alphabet latin
  • Frankish Aussi connu sous le nom de Frenkisk, Old Franconian
  • MiddleFrench Aussi connu sous le nom de Moyen Français, Middle French(ca. 1400-1600 AP. J.-C)
  • WesternFrisian Aussi connu sous le nom de Frysk
  • Alphabet géorgien Aussi connu sous le nom de ქართული
  • Gaélique écossais également connu sous le nom de Gàidhlig
  • Irlandais Aussi connu sous le nom de Gaeilge
  • Galicien Aussi connu sous le nom de galego
  • AncientGreek Aussi connu sous le nom de Ἑλληνική
  • Alphabet grec Aussi connu sous le nom de ελληνικά
  • Gujarati Aussi connu sous le nom de ગુજરાતી
  • Alphabet Gujarati Aussi connu sous le nom de ગુજરાતી
  • Alphabet Gurmukhi Aussi connu sous le nom de Gurmukhī, ਗੁਰਮੁਖੀ, Shahmukhi, گُرمُکھی, Sihk Script
  • Alphabet Hangul Aussi connu sous le nom d'alphabet coréen,한글,Hangeul,조선글,hosŏn'gŭl
  • Alphabet HangulVertical Aussi connu sous le nom d'Alphabet coréen,한글,Hangeul,조선글,hosŏn'gŭl
  • Alphabet simplifié Han Aussi connu sous le nom de Samhan ,한어, 韓語
  • HanSimplifiedVerticalAlphabet Aussi connu sous le nom de Samhan ,한어, 韓語
  • Alphabet traditionnel Han Aussi connu sous le nom de Samhan ,한어, 韓語
  • HanTraditionalVerticalAlphabet Aussi connu sous le nom de Samhan ,한어, 韓語
  • Haïtien Aussi connu sous le nom de Kreyòl ayisyen
  • Hébreu Aussi connu sous le nom de עברית
  • Alphabet hébreu Aussi connu sous le nom de עברית
  • Hindi Aussi connu sous le nom de हिन्दी, हिंदी
  • Croate Aussi connu sous le nom de hrvatski jezik
  • Hongrois Aussi connu sous le nom de magyar
  • Arménien Aussi connu sous le nom de Հայերեն
  • Inuktitut Aussi connu sous le nom de ᐃᓄᒃᑎᑐᑦ
  • Indonésien Aussi connu sous le nom de Bahasa Indonesia
  • Islandais Aussi connu sous le nom de Íslenska
  • Italien Aussi connu sous le nom d'italiano
  • ItalienAncien Aussi connu sous le nom d'italiano
  • Alphabet japonais Aussi connu sous le nom de 日本語(にほんご)
  • Alphabet japonais vertical Aussi connu sous le nom de 日本語(にほんご)
  • Javanais Aussi connu sous le nom de basa Jawa
  • Japonais Aussi connu sous le nom de 日本語(にほんご)
  • JaponaisVertical Aussi connu sous le nom de 日本語(にほんご)
  • Kannada Aussi connu sous le nom de ಕನ್ನಡ
  • Alphabet Kannada Aussi connu sous le nom de ಕನ್ನಡ
  • Géorgien Aussi connu sous le nom de ქართული
  • GeorgianOld Aussi connu sous le nom de ქართული
  • Kazakh Aussi connu sous le nom de қазақ тілі
  • Khmer Aussi connu sous le nom de ខ្មែរ, ខេមរភាសា, ភាសាខ្មែរ
  • Alphabet khmer Aussi connu sous le nom de ខ្មែរ, ខេមរភាសា, ភាសាខ្មែរ
  • Kirghiz Aussi connu sous le nom de Кыргызча, Кыргыз тили
  • Kurmanji, کورمانجی ,Kurmancî_
  • Coréen Aussi connu sous le nom de 한국어(韓國語), 조선어(朝鮮語)
  • CoréenVertical Aussi connu sous le nom de 한국어(韓國語), 조선어(朝鮮語)
  • Lao Autrement connu sous le nom de ພາສາລາວ
  • Alphabet lao Aussi connu sous le nom de ພາສາລາວ
  • Latin Aussi connu sous le nom de latine, lingua latina
  • Alphabet latin Aussi connu sous le nom de latin, lingua latina
  • Letton Aussi connu sous le nom de latviešu valoda
  • Lituanien Aussi connu sous le nom de lietuvių kalba
  • Luxembourgeois Aussi connu sous le nom de Lëtzebuergesch
  • Malayalam Aussi connu sous le nom de മലയാളം
  • Alphabet malayalam Aussi connu sous le nom de മലയാളം
  • Marathi Autrement connu sous le nom de मराठी
  • MICR également connu sous le nom de reconnaissance de caractères par encre magnétique, codage de chèques MICR
  • Macédonien Aussi connu sous le nom de македонски јазик
  • Maltais Aussi connu sous le nom de Malti
  • Mongol Aussi connu sous le nom de монгол
  • Maori Aussi connu sous le nom de te reo Māori
  • Malais Aussi connu sous le nom de bahasa Melayu, بهاس ملايو
  • Myanmar Aussi connu sous le nom de Birman ,ဗမာစာ
  • Alphabet du Myanmar Aussi connu sous le nom de birman ,ဗမာစာ
  • Népalais Aussi connu sous le nom de नेपाली
  • Néerlandais Aussi connu sous le nom de Nederlands, Vlaams
  • Norvégien Aussi connu sous le nom de Norsk
  • Occitan Aussi connu sous le nom d'occitan, lenga d'òc
  • Oriya Aussi connu sous le nom de ଓଡ଼ିଆ
  • Alphabet Oriya Aussi connu sous le nom de ଓଡ଼ିଆ
  • Panjabi Aussi connu sous le nom de ਪੰਜਾਬੀ, پنجابی
  • Polonais Aussi connu sous le nom de język polski, polszczyzna
  • Portugais Aussi connu sous le nom de português
  • Pashto Aussi connu sous le nom de پښتو
  • Quechua Aussi connu sous le nom de Runa Simi, Kichwa
  • Roumain Aussi connu sous le nom de limba română
  • Russe Aussi connu sous le nom de русский язык
  • Sanskrit Aussi connu sous le nom de संस्कृतम्
  • Sinhala Aussi connu sous le nom de සිංහල
  • Alphabet cinghalais Aussi connu sous le nom de සිංහල
  • Slovaque Aussi connu sous le nom de slovenčina, slovenský jazyk
  • SlovakFraktur Aussi connu sous le nom de slovenčina, slovenský jazyk
  • Slovène Aussi connu sous le nom de slovenski jezik, slovenščina
  • Sindhi Aussi connu sous le nom de सिन्धी, سنڌي، سندھی
  • Espagnol Aussi connu sous le nom de español, castellano
  • SpanishOld Aussi connu sous le nom de español, castellano
  • Albanais Aussi connu sous le nom de gjuha shqipe
  • Serbe Aussi connu sous le nom de српски језик
  • SerbeLatin Aussi connu sous le nom de српски језик
  • Sundanais Aussi connu sous le nom de Basa Sunda
  • Swahili Aussi connu sous le nom de Kiswahili
  • Suédois Aussi connu sous le nom de Svenska
  • Syriaque Autrement appelé syrien, araméen syriaque,ܠܫܢܐ ܣܘܪܝܝܐ, Leššānā Suryāyā
  • Alphabet syriaque Autrement appelé syrien, araméen syriaque,ܠܫܢܐ ܣܘܪܝܝܐ, Leššānā Suryāyā
  • Tamil Aussi connu sous le nom de தமிழ்
  • Alphabet tamoul Aussi connu sous le nom de தமிழ்
  • Tatar Aussi connu sous le nom de татар теле, tatar tele
  • Telugu Aussi connu sous le nom de తెలుగు
  • Alphabet telugu Aussi connu sous le nom de తెలుగు
  • Tadjik Aussi connu sous le nom de тоҷикӣ, toğikī, تاجیکی
  • Tagalog Aussi connu sous le nom de Wikang Tagalog, ᜏᜒᜃᜅ᜔ ᜆᜄᜎᜓᜄ᜔
  • Thai Aussi connu sous le nom de ไทย
  • Alphabet Thaana Aussi connu sous le nom de Taana , Tāna , ތާނަ
  • Alphabet thaïlandais Aussi connu sous le nom de ไทย
  • Alphabet tibétain Aussi connu sous le nom de tibétain standard, tibétain, central ཡིག་
  • Tigrinya Aussi connu sous le nom de ትግርኛ
  • Tonga Autrement connu sous le nom de faka Tonga
  • Turc Aussi connu sous le nom de Türkçe
  • Uyghur Aussi connu sous le nom de Uyƣurqə, ئۇيغۇرچە
  • Ukrainien Aussi connu sous le nom de українська мова
  • Urdu Aussi connu sous le nom de اردو
  • Ouzbek Aussi connu sous le nom de O'zbek, Ўзбек, أۇزبېك
  • OuzbekCyrillique Aussi connu sous le nom de O'zbek, Ўзбек, أۇزبېك
  • Vietnamien Aussi connu sous le nom de Tiếng Việt
  • Alphabet vietnamien Aussi connu sous le nom de Tiếng Việt
  • Yiddish Aussi connu sous le nom de ייִדיש
  • Yoruba Aussi connu sous le nom de Yorùbá

Exemple : OCR en arabe (+ beaucoup d'autres)

Dans l'exemple suivant, nous allons montrer comment nous pouvons numériser un document arabe.

PM> Install-Package IronOcr.Languages.Arabic
C# OCR en langue arabe
:path=/static-assets/ocr/content-code-examples/tutorials/how-to-read-text-from-an-image-in-csharp-net-6.cs
// PM> Install IronOcr.Languages.Arabic
using IronOcr;

IronTesseract ocr = new IronTesseract();
ocr.Language = OcrLanguage.Arabic;

using OcrInput input = new OcrInput();
input.LoadImageFrame("img/arabic.gif", 1);
// 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");
' PM> Install IronOcr.Languages.Arabic
Imports IronOcr

Private ocr As New IronTesseract()
ocr.Language = OcrLanguage.Arabic

Using input As New OcrInput()
	input.LoadImageFrame("img/arabic.gif", 1)
	' 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 : OCR dans plus d'une langue dans le même document.

Dans l'exemple suivant, nous allons montrer comment numériser par OCR plusieurs langues dans le même document.

C'est en fait très courant, car un document chinois peut par exemple contenir des mots et des Urls anglais.

PM> Install-Package IronOcr.Languages.ChineseSimplified
:path=/static-assets/ocr/content-code-examples/tutorials/how-to-read-text-from-an-image-in-csharp-net-7.cs
using IronOcr;

IronTesseract ocr = new IronTesseract();
ocr.Language = OcrLanguage.ChineseSimplified;

// We can add any number of languages.
ocr.AddSecondaryLanguage(OcrLanguage.English);
// Optionally add custom tesseract .traineddata files by specifying a file path

using OcrInput input = new OcrInput();
input.LoadImage("img/MultiLanguage.jpeg");
OcrResult result = ocr.Read(input);
result.SaveAsTextFile("MultiLanguage.txt");
Imports IronOcr

Private ocr As New IronTesseract()
ocr.Language = OcrLanguage.ChineseSimplified

' We can add any number of languages.
ocr.AddSecondaryLanguage(OcrLanguage.English)
' Optionally add custom tesseract .traineddata files by specifying a file path

Using input As New OcrInput()
	input.LoadImage("img/MultiLanguage.jpeg")
	Dim result As OcrResult = ocr.Read(input)
	result.SaveAsTextFile("MultiLanguage.txt")
End Using
VB   C#

Documents multi-pages

IronOCR peut combiner plusieurs pages / images en un seul OcrResult. Cette fonction est extrêmement utile lorsqu'un document a été créé à partir de plusieurs images. Nous verrons plus loin que cette fonction spéciale d'IronTesseract est extrêmement utile pour produire des fichiers PDF et HTML consultables à partir d'entrées OCR.

IronOCR permet de "mélanger et de faire correspondre" des images, des cadres TIFF et des pages PDF en une seule entrée OCR.

:path=/static-assets/ocr/content-code-examples/tutorials/how-to-read-text-from-an-image-in-csharp-net-8.cs
using IronOcr;

IronTesseract ocr = new IronTesseract();

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

OcrResult result = ocr.Read(input);

Console.WriteLine($"{result.Pages.Length} Pages"); // 3 Pages
Imports IronOcr

Private ocr As New IronTesseract()

Private OcrInput As using
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)

Console.WriteLine($"{result.Pages.Length} Pages") ' 3 Pages
VB   C#

Il est également possible d'océriser facilement toutes les pages d'un fichier TIFF.

:path=/static-assets/ocr/content-code-examples/tutorials/how-to-read-text-from-an-image-in-csharp-net-9.cs
using IronOcr;

IronTesseract ocr = new IronTesseract();

using OcrInput input = new OcrInput();
var pageindices = new int[] { 1, 2 };
input.LoadImageFrames("MultiFrame.Tiff", pageindices);
OcrResult result = ocr.Read(input);

Console.WriteLine(result.Text);
Console.WriteLine($"{result.Pages.Length} Pages");
// 1 page for every frame (page) in the TIFF
Imports IronOcr

Private ocr As New IronTesseract()

Private OcrInput As using
Private pageindices = New Integer() { 1, 2 }
input.LoadImageFrames("MultiFrame.Tiff", pageindices)
Dim result As OcrResult = ocr.Read(input)

Console.WriteLine(result.Text)
Console.WriteLine($"{result.Pages.Length} Pages")
' 1 page for every frame (page) in the TIFF
VB   C#
:path=/static-assets/ocr/content-code-examples/tutorials/how-to-read-text-from-an-image-in-csharp-net-10.cs
using IronOcr;

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

OcrResult result = ocr.Read(input);

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

Private ocr As New IronTesseract()
Private OcrInput As using
input.LoadPdf("example.pdf", Password:= "password")
' We can also select specific PDF page numbers to OCR

Dim result As OcrResult = ocr.Read(input)

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

PDF consultables

L'exportation des résultats de l'OCR sous forme de PDF consultables en C# et VB.NET est une fonctionnalité très appréciée d'IronOCR. Cela peut vraiment aider les entreprises et les gouvernements à alimenter leurs bases de données, à optimiser leur référencement et à améliorer l'utilisation des PDF.

:path=/static-assets/ocr/content-code-examples/tutorials/how-to-read-text-from-an-image-in-csharp-net-11.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#

Une autre astuce OCR consiste à convertir un document PDF existant en document interrogeable.

:path=/static-assets/ocr/content-code-examples/tutorials/how-to-read-text-from-an-image-in-csharp-net-12.cs
using IronOcr;

IronTesseract ocr = new IronTesseract();

using OcrInput input = new OcrInput();
input.Title = "Pdf Metadata Name";
input.LoadPdf("example.pdf", Password: "password");
OcrResult result = ocr.Read(input);
result.SaveAsSearchablePdf("searchable.pdf");
Imports IronOcr

Private ocr As New IronTesseract()

Private OcrInput As using
input.Title = "Pdf Metadata Name"
input.LoadPdf("example.pdf", Password:= "password")
Dim result As OcrResult = ocr.Read(input)
result.SaveAsSearchablePdf("searchable.pdf")
VB   C#

Il en va de même pour la conversion de documents TIFF d'une ou plusieurs pages en PDF interrogeables à l'aide d'IronTesseract.

:path=/static-assets/ocr/content-code-examples/tutorials/how-to-read-text-from-an-image-in-csharp-net-13.cs
using IronOcr;

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

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

Exporter Hocr HTML

Nous pouvons également exporter les résultats de l'OCR vers Hocr HTML. Il s'agit d'un document XML qui peut être analysé par un lecteur XML ou balisé en HTML visuellement attrayant.

Cela permet un certain degré de conversion PDF vers HTML et TIFF vers HTML.

:path=/static-assets/ocr/content-code-examples/tutorials/how-to-read-text-from-an-image-in-csharp-net-14.cs
using IronOcr;

IronTesseract ocr = new IronTesseract();

using OcrInput input = new OcrInput();
input.Title = "Html Title";

// Add more content as required...
input.LoadImage("image2.jpeg");
input.LoadPdf("example.pdf",Password: "password");
var pageindices = new int[] { 1, 2 };
input.LoadImageFrames("example.tiff", pageindices);

OcrResult result = ocr.Read(input);
result.SaveAsHocrFile("hocr.html");
Imports IronOcr

Private ocr As New IronTesseract()

Private OcrInput As using
input.Title = "Html Title"

' Add more content as required...
input.LoadImage("image2.jpeg")
input.LoadPdf("example.pdf",Password:= "password")
Dim pageindices = New Integer() { 1, 2 }
input.LoadImageFrames("example.tiff", pageindices)

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

Lecture des codes-barres dans les documents OCR

IronOCR présente un avantage supplémentaire unique par rapport au tesseract traditionnel : il lit également les codes-barres et les codes QR ;

:path=/static-assets/ocr/content-code-examples/tutorials/how-to-read-text-from-an-image-in-csharp-net-15.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)
{
    Console.WriteLine(barcode.Value);
    // type and location properties also exposed
}
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
		Console.WriteLine(barcode.Value)
		' type and location properties also exposed
	Next barcode
End Using
VB   C#

Examen détaillé des résultats de l'OCR image-texte

La dernière chose que nous verrons dans ce tutoriel est l'objet des résultats de l'OCR. Lorsque nous lisons une OCR, nous ne voulons normalement en extraire que le texte, mais IronOCR contient en fait une grande quantité d'informations qui peuvent être utiles aux développeurs avancés.

Dans un objet de résultats d'OCR, nous avons une collection de pages qui peuvent être itérées. Chaque page peut contenir des codes-barres, des graphiques de puissance, des lignes de texte, des mots et des caractères.

Chacun de ces objets contient en fait : un lieu ; une coordonnée X ; une coordonnée Y ; une largeur et une hauteur ; une image associée qui peut être inspectée ; un nom de police ; la taille de la police ; le sens dans lequel le texte est écrit ; la rotation du texte ; et la confiance statistique qu'IronOCR a pour ce mot, cette ligne ou ce paragraphe spécifique.

En bref, cela permet aux développeurs d'être créatifs et de travailler avec les données OCR de la manière qu'ils choisissent pour inspecter et exporter des informations.

Nous pouvons également travailler et exporter n'importe quel élément de l'objet .NET OCR Results, tel qu'un paragraphe, un mot ou un code-barres, sous forme d'image ou de BitMap.

:path=/static-assets/ocr/content-code-examples/tutorials/how-to-read-text-from-an-image-in-csharp-net-16.cs
using IronOcr;
using IronSoftware.Drawing;

// We can delve deep into OCR results as an object model of Pages, Barcodes, Paragraphs, Lines, Words and Characters
// This allows us to explore, export and draw OCR content using other APIs

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

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

OcrResult result = ocr.Read(input);

foreach (var page in result.Pages)
{
    // Page object
    int pageNumber = page.PageNumber;
    string pageText = page.Text;
    int pageWordCount = page.WordCount;

    // null if we don't set Ocr.Configuration.ReadBarCodes = true;
    OcrResult.Barcode[] barcodes = page.Barcodes;

    AnyBitmap pageImage = page.ToBitmap(input);
    System.Drawing.Bitmap pageImageLegacy = page.ToBitmap(input);
    double pageWidth = page.Width;
    double pageHeight = page.Height;

    foreach (var paragraph in page.Paragraphs)
    {
        // Pages -> Paragraphs
        int paragraphNumber = paragraph.ParagraphNumber;
        String paragraphText = paragraph.Text;
        System.Drawing.Bitmap paragraphImage = paragraph.ToBitmap(input);
        int paragraphXLocation = paragraph.X;
        int paragraphYLocation = paragraph.Y;
        int paragraphWidth = paragraph.Width;
        int paragraphHeight = paragraph.Height;
        double paragraphOcrAccuracy = paragraph.Confidence;
        var paragraphTextDirection = paragraph.TextDirection;

        foreach (var line in paragraph.Lines)
        {
            // Pages -> Paragraphs -> Lines
            int lineNumber = line.LineNumber;
            String lineText = line.Text;
            AnyBitmap lineImage = line.ToBitmap(input);
            System.Drawing.Bitmap lineImageLegacy = line.ToBitmap(input);
            int lineXLocation = line.X;
            int lineYLocation = line.Y;
            int lineWidth = line.Width;
            int lineHeight = line.Height;
            double lineOcrAccuracy = line.Confidence;
            double lineSkew = line.BaselineAngle;
            double lineOffset = line.BaselineOffset;

            foreach (var word in line.Words)
            {
                // Pages -> Paragraphs -> Lines -> Words
                int wordNumber = word.WordNumber;
                String wordText = word.Text;
                AnyBitmap wordImage = word.ToBitmap(input);
                System.Drawing.Image wordImageLegacy = word.ToBitmap(input);
                int wordXLocation = word.X;
                int wordYLocation = word.Y;
                int wordWidth = word.Width;
                int wordHeight = word.Height;
                double wordOcrAccuracy = word.Confidence;

                if (word.Font != null)
                {
                    // Word.Font is only set when using Tesseract Engine Modes rather than LTSM
                    String fontName = word.Font.FontName;
                    double fontSize = word.Font.FontSize;
                    bool isBold = word.Font.IsBold;
                    bool isFixedWidth = word.Font.IsFixedWidth;
                    bool isItalic = word.Font.IsItalic;
                    bool isSerif = word.Font.IsSerif;
                    bool isUnderlined = word.Font.IsUnderlined;
                    bool fontIsCaligraphic = word.Font.IsCaligraphic;
                }

                foreach (var character in word.Characters)
                {
                    // Pages -> Paragraphs -> Lines -> Words -> Characters
                    int characterNumber = character.CharacterNumber;
                    String characterText = character.Text;
                    AnyBitmap characterImage = character.ToBitmap(input);
                    System.Drawing.Bitmap characterImageLegacy = character.ToBitmap(input);
                    int characterXLocation = character.X;
                    int characterYLocation = character.Y;
                    int characterWidth = character.Width;
                    int characterHeight = character.Height;
                    double characterOcrAccuracy = character.Confidence;

                    // Output alternative symbols choices and their probability.
                    // Very useful for spell checking
                    OcrResult.Choice[] characterChoices = character.Choices;
                }
            }
        }
    }
}
Imports IronOcr
Imports IronSoftware.Drawing

' We can delve deep into OCR results as an object model of Pages, Barcodes, Paragraphs, Lines, Words and Characters
' This allows us to explore, export and draw OCR content using other APIs

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

Using input As New OcrInput()
	Dim pageindices = New Integer() { 1, 2 }
	input.LoadImageFrames("img\Potter.tiff", pageindices)
	
	Dim result As OcrResult = ocr.Read(input)
	
	For Each page In result.Pages
		' Page object
		Dim pageNumber As Integer = page.PageNumber
		Dim pageText As String = page.Text
		Dim pageWordCount As Integer = page.WordCount
	
		' null if we don't set Ocr.Configuration.ReadBarCodes = true;
		Dim barcodes() As OcrResult.Barcode = page.Barcodes
	
		Dim pageImage As AnyBitmap = page.ToBitmap(input)
		Dim pageImageLegacy As System.Drawing.Bitmap = page.ToBitmap(input)
		Dim pageWidth As Double = page.Width
		Dim pageHeight As Double = page.Height
	
		For Each paragraph In page.Paragraphs
			' Pages -> Paragraphs
			Dim paragraphNumber As Integer = paragraph.ParagraphNumber
			Dim paragraphText As String = paragraph.Text
			Dim paragraphImage As System.Drawing.Bitmap = paragraph.ToBitmap(input)
			Dim paragraphXLocation As Integer = paragraph.X
			Dim paragraphYLocation As Integer = paragraph.Y
			Dim paragraphWidth As Integer = paragraph.Width
			Dim paragraphHeight As Integer = paragraph.Height
			Dim paragraphOcrAccuracy As Double = paragraph.Confidence
			Dim paragraphTextDirection = paragraph.TextDirection
	
			For Each line In paragraph.Lines
				' Pages -> Paragraphs -> Lines
				Dim lineNumber As Integer = line.LineNumber
				Dim lineText As String = line.Text
				Dim lineImage As AnyBitmap = line.ToBitmap(input)
				Dim lineImageLegacy As System.Drawing.Bitmap = line.ToBitmap(input)
				Dim lineXLocation As Integer = line.X
				Dim lineYLocation As Integer = line.Y
				Dim lineWidth As Integer = line.Width
				Dim lineHeight As Integer = line.Height
				Dim lineOcrAccuracy As Double = line.Confidence
				Dim lineSkew As Double = line.BaselineAngle
				Dim lineOffset As Double = line.BaselineOffset
	
				For Each word In line.Words
					' Pages -> Paragraphs -> Lines -> Words
					Dim wordNumber As Integer = word.WordNumber
					Dim wordText As String = word.Text
					Dim wordImage As AnyBitmap = word.ToBitmap(input)
					Dim wordImageLegacy As System.Drawing.Image = word.ToBitmap(input)
					Dim wordXLocation As Integer = word.X
					Dim wordYLocation As Integer = word.Y
					Dim wordWidth As Integer = word.Width
					Dim wordHeight As Integer = word.Height
					Dim wordOcrAccuracy As Double = word.Confidence
	
					If word.Font IsNot Nothing Then
						' Word.Font is only set when using Tesseract Engine Modes rather than LTSM
						Dim fontName As String = word.Font.FontName
						Dim fontSize As Double = word.Font.FontSize
						Dim isBold As Boolean = word.Font.IsBold
						Dim isFixedWidth As Boolean = word.Font.IsFixedWidth
						Dim isItalic As Boolean = word.Font.IsItalic
						Dim isSerif As Boolean = word.Font.IsSerif
						Dim isUnderlined As Boolean = word.Font.IsUnderlined
						Dim fontIsCaligraphic As Boolean = word.Font.IsCaligraphic
					End If
	
					For Each character In word.Characters
						' Pages -> Paragraphs -> Lines -> Words -> Characters
						Dim characterNumber As Integer = character.CharacterNumber
						Dim characterText As String = character.Text
						Dim characterImage As AnyBitmap = character.ToBitmap(input)
						Dim characterImageLegacy As System.Drawing.Bitmap = character.ToBitmap(input)
						Dim characterXLocation As Integer = character.X
						Dim characterYLocation As Integer = character.Y
						Dim characterWidth As Integer = character.Width
						Dim characterHeight As Integer = character.Height
						Dim characterOcrAccuracy As Double = character.Confidence
	
						' Output alternative symbols choices and their probability.
						' Very useful for spell checking
						Dim characterChoices() As OcrResult.Choice = character.Choices
					Next character
				Next word
			Next line
		Next paragraph
	Next page
End Using
VB   C#

Résumé

IronOCR offre aux développeurs C# les outils les plus avancés pour la gestion de l'informationAPI Tesseract que nous connaissons, quelle que soit la plate-forme.

IronOCR peut être déployé sur Windows, Linux, Mac, Azure, AWS, Lambda et prend en charge les projets .NET Framework ainsi que .NET Standard et .NET Core.

Nous pouvons constater que si nous introduisons un document imparfait dans IronOCR, il peut lire son contenu avec une précision statistique d'environ 99 %, même si le document était mal formaté, incliné et contenait du bruit numérique.

Nous pouvons également lire les codes-barres dans les scans OCR, et même exporter notre OCR sous forme de HTML et de PDF consultables.

Cette fonctionnalité est propre à IronOCR et vous ne la trouverez pas dans les bibliothèques d'OCR standard ou dans Tesseract vanille.

Aller de l'avant

Pour continuer à en savoir plus sur l'IronOCR, nous vous recommandons :

Téléchargement du code source