Exemple d'OCR Tesseract en C
parJim Baker
Tesseract est un excellent OCR académique(reconnaissance optique des caractères) est disponible gratuitement pour presque tous les cas d'utilisation par les développeurs.
C# a la chance de disposer d'une des bibliothèques Tesseract les plus précises et les plus rapides qui soient.
IronOCR étend Google Tesseract avec IronTesseract
- une bibliothèque OCR native C# avec une stabilité améliorée et une plus grande précision que la bibliothèque Tesseract gratuite.
Cet article compare et explique pourquoi les développeurs .NET considèrent fortement l'utilisation d'IronOCR IronTesseract
par rapport à Tesseract vanille.
Comment utiliser Tesseract OCR en C# pour .NET ?
- Installer Google Tesseract et IronOCR for .NET dans Visual Studio
- Vérifier les dernières versions en C#
- Vérifier la précision et la compatibilité des images
- Tester les performances et le fonctionnement de l'API
- Envisager une prise en charge multilingue
Exemple de code pour l'utilisation de l'OCR en .NET - Extraction de texte à partir d'images en C# ;
Utilisez NuGet Package Manager pour installer le NuGet Package IronOCR dans votre solution Visual Studio.
:path=/static-assets/ocr/content-code-examples/tutorials/c-sharp-tesseract-ocr-1.cs
using IronOcr;
using System;
var ocr = new IronTesseract();
// Hundreds of languages available
ocr.Language = OcrLanguage.English;
using var input = new OcrInput();
var pageindices = new int[] { 1, 2 };
input.LoadImageFrames(@"img\example.tiff", pageindices);
// input.DeNoise(); optional filter
// input.Deskew(); optional filter
OcrResult result = ocr.Read(input);
Console.WriteLine(result.Text);
// Explore the OcrResult using IntelliSense
Imports IronOcr
Imports System
Private ocr = New IronTesseract()
' Hundreds of languages available
ocr.Language = OcrLanguage.English
Dim input = New OcrInput()
Dim pageindices = New Integer() { 1, 2 }
input.LoadImageFrames("img\example.tiff", pageindices)
' input.DeNoise(); optional filter
' input.Deskew(); optional filter
Dim result As OcrResult = ocr.Read(input)
Console.WriteLine(result.Text)
' Explore the OcrResult using IntelliSense
Options d'installation
Utilisation du moteur Tesseract pour l'OCR avec .NET
Lors de l'utilisation de Tesseract Engine, la plupart d'entre nous travaillent avec une bibliothèque C++.
L'interopération n'est pas très amusante dans .NET - et sa compatibilité multiplateforme et Azure est médiocre. Il nous oblige à choisir le degré de robustesse de notre application, ce qui signifie que nous ne pouvons la déployer que sur des cibles 32 ou 64 bits.
Il se peut que nous devions nous assurer que les moteurs d'exécution Visual C++ sont installés et même compiler nous-mêmes Tesseract pour obtenir la dernière version. Les solutions libres en C# pour ce type d'applications peuvent avoir des années de retard.
Nous devons également trouver, télécharger et gérer des DLL et des EXE C++ que nous ne comprenons peut-être pas, et les déployer dans des environnements où les autorisations ne leur permettent peut-être pas de s'exécuter.
Il est facile à installer à l'aide du NuGet Package Manager pour extraire du texte à partir d'images et de fichiers PDF à l'aide de la reconnaissance optique de caractères.
IronOCR Tesseract pour C&num ;
Avec IronOCR, l'installation de Tesseract se fait entièrement à l'aide du gestionnaire de paquets NuGet.
Install-Package IronOcr
Il n'y a pas de dll ou d'exe natifs à installer. Tout est géré par une seule bibliothèque de composants .NET.
L'ensemble de l'API est en .NET natif à l'aide d'une API C# simple utilisant Tesseract.
Il prend en charge ces types de projets Visual Studio pour ajouter la reconnaissance optique de caractères en C# :
- framework .NET 4.6.2 et supérieur
- standard .NET 2.0 et supérieur(y compris 3.x, .NET 5, 6, 7 & 8)
- .NET Core 2.0 et supérieur(y compris 3.x, .NET 5, 6, 7 & 8)
Mise à jour et entretien
Google Tesseract avec C&num ;
Les dernières versions de Tesseract 5 n'ont jamais été conçues pour compiler sous Windows.
L'installation gratuite de Tesseract 5 for C# nécessite de modifier et de compiler manuellement Leptonica et Tesseract pour Windows. La chaîne de compilation croisée MinGW ne parvient pas à produire des binaires interopérationnels Windows à ce jour.
En outre, les wrappers d'API C# gratuits sur GitHub peuvent avoir des années de retard ou être incompatibles.
IronOCR Tesseract pour .NET
IronOCR offre de nombreux avantages, notamment une API conviviale pour une intégration transparente dans les applications. Il prend en charge divers formats d'image tels que JPEG, PNG, TIFF et PDF, et offre des fonctions avancées telles que le prétraitement automatique des images. De plus, il est soutenu par une équipe dédiée qui offre une assistance commerciale et des mises à jour.
Tesseract 5 fonctionne dès sa sortie de l'emballage sur Windows, macOS, Linux, Azure, AWS, Lambda, Mono et Xamarin Mac avec peu ou pas de configuration. Pas de binaires natifs à gérer. Compatible avec le cadre et le noyau.
Il n'y a pas grand-chose d'autre à dire, si ce n'est que tout a été fait dans les règles de l'art.
Google OCR
Google Cloud OCR (Reconnaissance optique de caractères) est un service fourni par Google Cloud Platform(PCG) qui permet aux développeurs d'extraire du texte à partir d'images et de documents scannés à l'aide d'algorithmes d'apprentissage automatique.
Précision
Google Tesseract dans les projets .NET
La bibliothèque Tesseract a été conçue pour des documents parfaits dans lesquels une machine imprime un texte à haute résolution sur un écran et le lit ensuite. C'est pourquoi Tesseract est capable de lire des documents parfaits.
Le problème est que dans le monde réel, ce n'est pas ce que nous avons. Si Tesseract rencontre une image qui est tournée, de travers, avec un faible DPI, scannée ou avec un bruit de fond, il devient presque impossible pour Tesseract d'obtenir des données à partir de cette image. En outre, Tesseract prendra également beaucoup de temps pour traiter ce document avant de vous renvoyer des informations sur le non-sens.
Un document simple, très facile à lire à l'œil nu, ne peut pas être lu correctement par Tesseract.
Tesseract est une bibliothèque gratuite optimale pour la lecture de textes droits et parfaits de caractères standardisés.
Pour utiliser Tesseract lorsque nous utilisons des documents scannés ou photographiés dont les images ne sont pas numériquement parfaites, comme les captures d'écran, nous devons effectuer un prétraitement de l'image. Cette opération est normalement réalisée à l'aide de scripts Photoshop ou d'une utilisation avancée d'ImageMagick.
En règle générale, cette procédure doit être élaborée au cas par cas pour chaque type de document que vous essayez de traiter et peut prendre des semaines.
IronOCR for .NET Projects (en anglais)
IronOCR vous débarrasse de ce casse-tête. Les utilisateurs obtiennent souvent une précision de 99,8-100% avec une configuration minimale.
:path=/static-assets/ocr/content-code-examples/tutorials/c-sharp-tesseract-ocr-2.cs
using IronOcr;
using System;
var ocr = new IronTesseract();
using var input = new OcrInput();
var pageindices = new int[] { 1, 2 };
input.LoadImageFrames(@"img\example.tiff", pageindices);
input.DeNoise(); //fixes digital noise
input.Deskew(); //fixes rotation and perspective
// there are dozens more filters, but most users wont need them
OcrResult result = ocr.Read(input);
Console.WriteLine(result.Text);
Imports IronOcr
Imports System
Private ocr = New IronTesseract()
Private input = New OcrInput()
Private pageindices = New Integer() { 1, 2 }
input.LoadImageFrames("img\example.tiff", pageindices)
input.DeNoise() 'fixes digital noise
input.Deskew() 'fixes rotation and perspective
' there are dozens more filters, but most users wont need them
Dim result As OcrResult = ocr.Read(input)
Console.WriteLine(result.Text)
Compatibilité des images
Google Tesseract dans .NET
N'accepte que le format d'image Leptonica PIX qui est un objet C++ IntPtr
en C#. Les objets PIX ne sont pas des mémoires gérées - et le fait de ne pas les manipuler avec soin en C# entraîne des fuites de mémoire.
leptonica_ a une bonne compatibilité générale avec les images mais génère beaucoup d'avertissements et d'erreurs dans la console. Il existe des problèmes connus avec les fichiers TIFF et une prise en charge limitée de l'OCR des PDF.
IronOCR Tesseract pour .NET
Les images sont gérées en mémoire. PDF et Tiff pris en charge. Le système. Le dessin, le flux et le tableau d'octets sont inclus pour chaque format de fichier.
Large support d'images :
- Documents PDF
- Pages Pdf
- Fichiers TIFF multi-trames
- JPEG & JPEG2000
- GIF
- PNG
- BMP
- WBMP
System.Drawing.Image
System.Drawing.Bitmap
(Système.Dessin.Bitmap)System.IO.Streams
d'images- Image binaire Données(octet[])
- Et bien d'autres encore...
Exemple de code de compatibilité d'image OCR
:path=/static-assets/ocr/content-code-examples/tutorials/c-sharp-tesseract-ocr-3.cs
using IronOcr;
using System;
var ocr = new IronTesseract();
using var input = new OcrInput();
input.LoadPdf("example.pdf", Password: "password");
var pageindices = new int[] { 1, 2 };
input.LoadImageFrames("multi-frame.tiff", pageindices);
input.LoadImage("image1.png");
input.LoadImage("image2.jpeg");
//... many more
var result = ocr.Read(input);
Console.WriteLine(result.Text);
Imports IronOcr
Imports System
Private ocr = New IronTesseract()
Private input = New OcrInput()
input.LoadPdf("example.pdf", Password:= "password")
Dim pageindices = New Integer() { 1, 2 }
input.LoadImageFrames("multi-frame.tiff", pageindices)
input.LoadImage("image1.png")
input.LoadImage("image2.jpeg")
'... many more
Dim result = ocr.Read(input)
Console.WriteLine(result.Text)
Performance
Google Tesseract gratuit
Google Tesseract peut produire des résultats rapides et précis s'il est correctement réglé et si les images d'entrée ont été prétraitées à l'aide de Photoshop ou d'ImageMagick.
Vous remarquerez que la plupart des exemples de Tesseract en ligne proviennent de captures d'écran en haute résolution, sans bruit numérique, dans des polices avec lesquelles Tesseract a été conçu pour bien fonctionner.
La documentation de Tesseracts indique que les images d'entrée doivent être échantillonnées à 300DPI ou plus pour que l'OCR soit efficace.
Bibliothèque IronOCR Tesseract
La DLL Tesseract IronOCR .NET fonctionne avec précision et rapidité pour la plupart des images dès sa sortie de l'emballage. Nous avons mis en œuvre le multithreading afin d'utiliser les processeurs multicœurs que la plupart des machines utilisent aujourd'hui.
Même les images à faible résolution fonctionnent généralement avec un degré élevé de précision dans votre programme. Aucun PhotoShop n'est nécessaire.
Les développeurs atteignent souvent une précision de plus de 99 % avec peu de configuration, ce qui correspond aux API web actuelles d'apprentissage automatique sans les coûts permanents, les risques de sécurité et les problèmes de bande passante.
Les vitesses sont rapides mais peuvent être améliorées avec un peu de codage.
Exemple de réglage des performances
:path=/static-assets/ocr/content-code-examples/tutorials/c-sharp-tesseract-ocr-4.cs
using IronOcr;
using System;
var ocr = new IronTesseract();
// Configure for speed. 35% faster and only 0.2% loss of accuracy
ocr.Configuration.BlackListCharacters = "~`$#^*_}{][|\\@¢©«»°±·×‑–—‘’“”•…′″€™←↑→↓↔⇄⇒∅∼≅≈≠≤≥≪≫⌁⌘○◔◑◕●☐☑☒☕☮☯☺♡⚓✓✰";
ocr.Configuration.PageSegmentationMode = TesseractPageSegmentationMode.Auto;
ocr.Configuration.ReadBarCodes = false;
ocr.Language = OcrLanguage.EnglishFast;
using var input = new OcrInput();
var pageindices = new int[] { 1, 2 };
input.LoadImageFrames(@"img\Potter.tiff", pageindices);
var result = ocr.Read(input);
Console.WriteLine(result.Text);
Imports IronOcr
Imports System
Private ocr = New IronTesseract()
' Configure for speed. 35% faster and only 0.2% loss of accuracy
ocr.Configuration.BlackListCharacters = "~`$#^*_}{][|\@¢©«»°±·×‑–—‘’“”•…′″€™←↑→↓↔⇄⇒∅∼≅≈≠≤≥≪≫⌁⌘○◔◑◕●☐☑☒☕☮☯☺♡⚓✓✰"
ocr.Configuration.PageSegmentationMode = TesseractPageSegmentationMode.Auto
ocr.Configuration.ReadBarCodes = False
ocr.Language = OcrLanguage.EnglishFast
Dim input = New OcrInput()
Dim pageindices = New Integer() { 1, 2 }
input.LoadImageFrames("img\Potter.tiff", pageindices)
Dim result = ocr.Read(input)
Console.WriteLine(result.Text)
API
OCR Google Tesseract dans .NET
Nous avons deux choix libres :
- Travail avec les couches interop - Beaucoup de celles qui sont trouvées sur GitHub sont obsolètes, ont des tickets non résolus, des fuites de mémoire et des avertissements de la console. Peut ne pas prendre en charge .NET Core ou Standard.
Travailler avec la ligne de commande EXE - Difficile à déployer et constamment interrompu par les scanners de virus et les politiques de sécurité.
Aucune de ces solutions ne fonctionne bien avec les applications Web, Azure, Mono, Xamarin, Linux, Docker ou Mac.
IronOCR Bibliothèque OCR Tesseract pour .NET
Une bibliothèque .NET gérée et testée pour Tesseract appelée IronTesseract
.
Entièrement documenté avec support IntelliSense.
Hello World le plus simple pour Tesseract en .NET
:path=/static-assets/ocr/content-code-examples/tutorials/c-sharp-tesseract-ocr-5.cs
using IronOcr;
var text = new IronTesseract().Read("img.png").Text;
Imports IronOcr
Private text = (New IronTesseract()).Read("img.png").Text
Il est activement développé et soutenu par des ingénieurs logiciels professionnels dont le niveau d'expérience médian est supérieur à 20 ans.
Compatibilité
Google Tesseract + Interop pour .NET
Il est possible de le faire fonctionner sur la plupart des plateformes si l'on est prêt à trouver des dépendances, à construire à partir des sources ou à mettre à jour un wrapper d'interopérabilité C# gratuit. Ces ressources peuvent ne pas être entièrement compatibles avec les projets .NET Core ou .NET Standard.
Pour l'instant, nous n'avons pas rencontré de méthode logique et simple pour installer LibTesseract5 pour Windows en toute sécurité sans IronTessseract
.
IronOCR for .NET OCR Library (Bibliothèque OCR)
Unit Tested with CI, and has everything you need to run on :
- Applications de bureau,
- Applications de la console
- Processus des serveurs
- Applications Web et MVC
- JetBrains Rider
Xamarin Mac
Sur :
- Fenêtres
- L'azur
- Linux
- Docker
- Mac
BSD et FreeBSD
.NET Support pour :
- framework .NET 4.6.2 et supérieur
- .NET Core - Toutes les versions actives supérieures à 2.0
- .NET Stanrdard - Toutes les versions actives supérieures à 2.0
- Mono
- Xamarin Mac
Soutien linguistique
Google Tesseract
Les dictionnaires Tesseract sont gérés comme des fichiers et doivent être clonés à partir du site https://github.com/tesseract-ocr/tessdata. Cela représente environ 4 Go.
Certaines versions de Linux disposent d'une aide pour gérer les dictionnaires Tesseract via apt-get
.
La structure exacte des dossiers doit être maintenue, sinon Tesseract échoue.
IronOCR Tesseract
Prend en charge plus de langues que https://github.com/tesseract-ocr/tessdata et chacune d'entre elles est gérée comme un paquet NuGet via le gestionnaire de paquets NuGet ou des téléchargements faciles à installer.
Exemple de langage Unicode
:path=/static-assets/ocr/content-code-examples/tutorials/c-sharp-tesseract-ocr-6.cs
using IronOcr;
var ocr = new IronTesseract();
ocr.Language = OcrLanguage.Arabic;
using var 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.
var result = ocr.Read(input);
// Console can't print Arabic on Windows easily.
// Let's save to disk instead.
result.SaveAsTextFile("arabic.txt");
Imports IronOcr
Private ocr = New IronTesseract()
ocr.Language = OcrLanguage.Arabic
Dim input = 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 = ocr.Read(input)
' Console can't print Arabic on Windows easily.
' Let's save to disk instead.
result.SaveAsTextFile("arabic.txt")
Exemple de langues multiples
L'OCR peut également utiliser plusieurs langues en même temps. Cela peut vraiment aider à obtenir des métadonnées et des URL en anglais dans des documents Unicode.
:path=/static-assets/ocr/content-code-examples/tutorials/c-sharp-tesseract-ocr-7.cs
using IronOcr;
// For the Chinese Language Pack:
// PM> Install IronOcr.Languages.ChineseSimplified
var ocr = new IronTesseract();
ocr.Language = OcrLanguage.ChineseSimplified;
ocr.AddSecondaryLanguage(OcrLanguage.English);
// We can add any number of languages
using var input = new OcrInput();
input.LoadPdf("multi-language.pdf");
var result = ocr.Read(input);
result.SaveAsTextFile("results.txt");
Imports IronOcr
' For the Chinese Language Pack:
' PM> Install IronOcr.Languages.ChineseSimplified
Private ocr = New IronTesseract()
ocr.Language = OcrLanguage.ChineseSimplified
ocr.AddSecondaryLanguage(OcrLanguage.English)
' We can add any number of languages
Dim input = New OcrInput()
input.LoadPdf("multi-language.pdf")
Dim result = ocr.Read(input)
result.SaveAsTextFile("results.txt")
Quoi d'autre
IronOCR Tesseract présente des caractéristiques supplémentaires pour les développeurs de logiciels .NET.
- Analyse automatique des images pour configurer Tesseract en fonction des erreurs courantes
- Conversion d'images en PDF interrogeables
- PDF OCR
- Peut rendre n'importe quel PDF consultable et indexable sur les moteurs de recherche
- Sortie OCR vers HTML
- Conversion de TIFF en PDF
- Lecture de codes-barres
- Lecture du code QR
- Multithreading
- Une classe
OcrResult
avancée qui permet d'inspecter les _blocs, les paragraphes, les lignes, les mots, les caractères, les polices et les statistiques de l'OCR
Conclusion
Google Tesseract pour l'OCR en C
C'est la bibliothèque à utiliser pour les projets libres et académiques en C#.
Tesseract est une excellente ressource pour les développeurs C#, mais ce n'est pas une bibliothèque OCR complète pour .NET.
Lorsqu'il s'agit d'images scannées ou photographiées, ces images doivent être traitées de manière à être orthogonales, normalisées, à haute résolution et exemptes de bruit numérique avant que Tesseract ne puisse les traiter avec précision.
IronOCR Bibliothèque OCR Tesseract pour .NET Framework & Core
En revanche, IronOCR peut faire tout cela et bien plus encore en une seule ligne de code.
C'est vrai : IronOCR utiliseTesseract pour son moteur OCR interne.
Une version finale de Tesseract pour C# avec beaucoup d'améliorations de performance et de fonctionnalités ajoutées en standard.
C'est le bon choix pour tout projet où le temps du développeur est précieux. Quand avez-vous trouvé pour la dernière fois un ingénieur logiciel .NET disposant de plusieurs semaines de temps libre ?
Démarrez votre projet C# Tesseract
Utilisez NuGet Package Manager dans n'importe quel projet Visual Studio :
Install-Package IronOcr
Ou vous pouveztélécharger la DLL IronOCR for .NET et l'installer manuellement.
N'importe quel codeur .NET devrait pouvoir commencer à utiliser IronOCR for .NET OCR en 5 minutes en utilisant les exemples de cette page.
Consultez l'article comparatif suivant :AWS vs Google Vision(comparaison des fonctionnalités d'OCR). Pour en savoir plus sur les services qui offrent la technologie OCR.