C# Tesseract OCR Beispiel

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

vonJim Baker

Tesseract ist eine hervorragende akademische OCR(optische Zeichenerkennung) bibliothek, die Entwicklern für fast alle Anwendungsfälle kostenlos zur Verfügung steht.

C# hat das Glück, eine der genauesten und schnellsten Tesseract-Bibliotheken zu haben.

IronOCR erweitert Google Tesseract um IronTesseract - eine native C# OCR-Bibliothek mit verbesserter Stabilität und höherer Genauigkeit als die freie Tesseract-Bibliothek.

Dieser Artikel vergleicht und erklärt, warum .NET-Entwickler IronOCR IronTesseract gegenüber Vanilla Tesseract bevorzugen.

Codebeispiel für .NET OCR Usage - Extrahieren von Text aus Bildern in C#

Verwenden Sie den NuGet Package Manager, um das IronOCR NuGet Package in Ihre Visual Studio Lösung zu installieren.

: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
VB   C#

Installationsoptionen

<

Verwendung der Tesseract Engine für OCR mit .NET

Bei der Verwendung der Tesseract Engine arbeiten die meisten von uns mit einer C++-Bibliothek.

Interop macht in .NET nicht viel Spaß - und die Kompatibilität mit anderen Plattformen und Azure ist schlecht. Wir müssen die Bittiness unserer Anwendung wählen, d. h. wir können sie nur auf 32- oder 64-Bit-Zielen einsetzen.

Möglicherweise müssen wir sicherstellen, dass Visual C++-Laufzeiten installiert sind und Tesseract selbst kompilieren, um die neueste Version zu erhalten. Freie C#-Wrapper für diese können Jahre hinter dem Stand der Technik zurückbleiben.

Wir müssen auch C++ DLLs und EXEs finden, herunterladen und verwalten, die wir möglicherweise nicht verstehen, und sie in Umgebungen einsetzen, in denen sie möglicherweise nicht ausgeführt werden dürfen.

Es ist einfach mit dem NuGet Package Manager zu installieren und extrahiert Text aus Bildern und PDF-Dateien mit Hilfe von Optical Character Recognition.

IronOCR Tesseract für C#

Mit IronOCR erfolgt die gesamte Tesseract-Installation über den NuGet Package Manager.

Install-Package IronOcr

Es sind keine nativen dlls oder exes zu installieren. Alles wird über eine einzige .NET-Komponentenbibliothek abgewickelt.

Die gesamte API ist in nativem .NET unter Verwendung einer einfachen C#-API mit Tesseract.

Es unterstützt diese Art von Visual Studio-Projekten, um optische Zeichenerkennung in C# hinzuzufügen:

  • .NET-Framework 4.6.2 und höher
  • .NET-Standard 2.0 und höher(einschließlich 3.x, .NET 5, 6, 7 und 8)
  • .NET Core 2.0 und höher(einschließlich 3.x, .NET 5, 6, 7 und 8)

Aktualisiert und gewartet

Google Tesseract mit C#

Die neuesten Builds von Tesseract 5 wurden nie für die Kompilierung unter Windows entwickelt.

Die kostenlose Installation von Tesseract 5 für C# erfordert die manuelle Modifikation und Kompilierung von Leptonica und Tesseract für Windows. Die MinGW-Cross-Compile-Kette ist derzeit nicht erfolgreich bei der Erstellung von Windows-Interop-Binärdateien.

Darüber hinaus können freie C#-API-Wrapper auf GitHub Jahre hinterherhinken oder inkompatibel sein.

IronOCR Tesseract for .NET

IronOCR bietet zahlreiche Vorteile, darunter eine benutzerfreundliche API für die nahtlose Integration in Anwendungen. Es unterstützt verschiedene Bildformate wie JPEG, PNG, TIFF und PDF und bietet erweiterte Funktionen wie die automatische Bildvorverarbeitung. Außerdem wird es von einem engagierten Team unterstützt, das kommerziellen Support und Updates anbietet.

Tesseract 5 ist unter Windows, macOS, Linux, Azure, AWS, Lambda, Mono und Xamarin Mac mit wenig oder gar keiner Konfiguration sofort einsatzbereit. Keine nativen Binärdateien zu verwalten. Rahmen und Kern kompatibel.

Es gibt kaum etwas anderes zu sagen, als dass es richtig gemacht wurde.

Google OCR

Google Cloud OCR (Optische Zeichenerkennung) ist ein von Google Cloud Platform angebotener Dienst(GCP) die es Entwicklern ermöglicht, mithilfe von Algorithmen des maschinellen Lernens Text aus Bildern und gescannten Dokumenten zu extrahieren.

Genauigkeit

Google Tesseract in .NET-Projekten

Tesseract als Bibliothek wurde für perfekte Dokumente entwickelt, bei denen eine Maschine einen hochauflösenden Text auf einem Bildschirm ausdruckt und dann liest. Aus diesem Grund kann Tesseract perfekte Dokumente lesen.

Das Problem ist, dass dies in der realen Welt nicht der Fall ist. Wenn Tesseract auf ein Bild stößt, das gedreht oder schief ist, einen niedrigen DPI-Wert hat, gescannt wurde oder Hintergrundrauschen aufweist, wird es für Tesseract fast unmöglich, Daten aus diesem Bild zu erhalten. Außerdem benötigt Tesseract sehr viel Zeit, um das Dokument zu verarbeiten, bevor es Ihnen unsinnige Informationen zurückgibt.

Ein einfaches Dokument, das mit dem Auge sehr leicht zu lesen ist, kann von Tesseract nicht gut gelesen werden.

Tesseract ist eine kostenlose Bibliothek, die sich optimal für das Lesen von geraden und perfekten Texten mit standardisierten Schriften eignet.

Um Tesseract zu verwenden, wenn wir gescannte oder fotografierte Dokumente verwenden, bei denen die Bilder nicht digital perfekt sind, wie z. B. Screenshots, müssen wir eine Bildvorverarbeitung durchführen. Dies geschieht in der Regel mit Photoshop-Batch-Skripten oder der erweiterten Verwendung von ImageMagick.

In der Regel muss dies von Fall zu Fall für jede Art von Dokument entwickelt werden und kann Wochen in Anspruch nehmen.

IronOCR Tesseract in .NET-Projekten

IronOCR nimmt diese Kopfschmerzen weg. Die Benutzer erreichen oft eine Genauigkeit von 99,8-100 % bei minimaler Konfiguration.

: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)
VB   C#

Bildkompatibilität

Google Tesseract in .NET

Akzeptiert nur das Leptonica PIX Bildformat, das in C# ein IntPtr C++ Objekt ist. PIX-Objekte sind kein verwalteter Speicher - und wenn man sie in C# nicht sorgfältig behandelt, führt das zu Speicherlecks.

Leptonica hat eine gute allgemeine Bildkompatibilität, gibt aber viele Konsolenwarnungen und Fehler aus. Es gibt bekannte Probleme mit TIFF-Dateien und begrenzte Unterstützung für PDF OCR.

IronOCR Tesseract for .NET

Bilder werden im Speicher verwaltet. PDF und Tiff werden unterstützt. System. Drawing, Stream und Byte Array sind für jedes Dateiformat enthalten.

Breite Bildunterstützung:

  • PDF-Dokumente
  • Pdf-Seiten
  • MultiFrame TIFF-Dateien
  • JPEG UND JPEG2000
  • GIF
  • PNG
  • BMP
  • WBMP
  • system.Drawing.Image
  • system.Drawing.Bitmap
  • system.IO.Streams" von Bildern
  • Binäres Bild Daten(byte[])
  • Und viele mehr...

OCR Image Compatibility Code Beispiel

: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)
VB   C#

Leistung

Kostenloses Google Tesseract

Google Tesseract kann schnelle und genaue Ergebnisse liefern, wenn es richtig eingestellt ist und die Eingabebilder mit Photoshop oder ImageMagick vorverarbeitet wurden.

Sie werden feststellen, dass die meisten Tesseract-Beispiele im Internet von hochauflösenden Screenshots ohne digitales Rauschen stammen, und zwar in Schriftarten, für die Tesseract entwickelt wurde und die gut funktionieren.

In der Dokumentation von Tesseract heißt es, dass Eingabebilder mit einer Auflösung von 300DPI oder höher abgetastet werden sollten, damit die OCR wirksam ist.

IronOCR Tesseract-Bibliothek

Die IronOCR for .NET Tesseract DLL arbeitet bei den meisten Bildern sofort präzise und schnell. Wir haben Multithreading implementiert, um die Multicore-Prozessoren zu nutzen, die die meisten Rechner heute verwenden.

Selbst Bilder mit geringer Auflösung lassen sich in der Regel mit hoher Genauigkeit in Ihrem Programm bearbeiten. Kein PhotoShop erforderlich.

Entwickler erreichen oft eine Genauigkeit von mehr als 99 % bei geringer Konfiguration - was den aktuellen Web-APIs für maschinelles Lernen entspricht, ohne die laufenden Kosten, Sicherheitsrisiken und Bandbreitenprobleme.

Die Geschwindigkeiten sind schnell, können aber mit ein wenig Kodierung verbessert werden.

Beispiel für Leistungsoptimierung

: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)
VB   C#

API

Google Tesseract OCR in .NET

Wir haben 2 freie Wahlmöglichkeiten:

  • Arbeit mit Interop-Schichten - Viele, die auf GitHub zu finden sind, sind veraltet, haben ungelöste Tickets, Memory Leaks und Konsolenwarnungen. Unterstützt möglicherweise nicht .NET Core oder Standard.
  • Arbeiten mit der Befehlszeile EXE - Schwer zu verteilen und ständig von Virenscannern und Sicherheitsrichtlinien unterbrochen.

    Keines der oben genannten kann gut in Webanwendungen, Azure, Mono, Xamarin, Linux, Docker oder Mac funktionieren.

IronOCR Tesseract OCR-Bibliothek für .NET

Eine verwaltete und getestete .NET Bibliothek für Tesseract namens IronTesseract.

Vollständig dokumentiert mit IntelliSense-Unterstützung.

Einfachste Hallo-Welt für Tesseract in .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
VB   C#

Es wird aktiv entwickelt und von professionellen Software-Ingenieuren mit einer durchschnittlichen Erfahrung von über 20 Jahren unterstützt.

Kompatibilität

Google Tesseract + Interop für .NET

Dies kann auf den meisten Plattformen funktionieren, wenn Sie bereit sind, Abhängigkeiten zu finden, vom Quellcode zu bauen oder einen freien C#-Interop-Wrapper zu aktualisieren. Diese Ressourcen sind möglicherweise nicht vollständig mit .NET Core- oder .NET-Standard-Projekten kompatibel.

Zur Zeit haben wir keine logische und einfache Möglichkeit gefunden, LibTesseract5 für Windows sicher ohne IronTessseract zu installieren.

IronOCR Tesseract .NET OCR-Bibliothek

Unit-Tested mit CI, und hat alles, was Sie brauchen, um auf laufen:

  • Desktop-Anwendungen,
  • Konsolen-Apps
  • Server Prozesse
  • Webanwendungen & MVC
  • JetBrains-Reiter
  • Xamarin Mac

    Ein:

  • Windows
  • Azurblau
  • Linux
  • Docker
  • Mac
  • BSD und FreeBSD

    .NET Unterstützung für:

  • .NET-Framework 4.6.2 und höher
  • .NET Core - Alle aktiven Versionen über 2.0
  • .NET Stanrdard - Alle aktiven Versionen über 2.0
  • Mono
  • Xamarin Mac

Sprachliche Unterstützung

Google Tesseract

Tesseract-Wörterbücher werden als Dateien verwaltet und müssen von https://github.com/tesseract-ocr/tessdata geklont werden. Das sind etwa 4 GB.

Einige Linux-Distributionen bieten eine Hilfe zur Verwaltung von Tesseract-Wörterbüchern über apt-get.

Exakte Ordnerstrukturen müssen beibehalten werden, sonst versagt Tesseract.

IronOCR Tesserakt

Unterstützt mehr Sprachen als https://github.com/tesseract-ocr/tessdata und wird jeweils als NuGet-Paket über den NuGet Package Manager oder leicht installierbare Downloads verwaltet.

Beispiel für eine Unicode-Sprache

: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")
VB   C#

Beispiel für mehrere Sprachen

Es ist auch möglich, dass OCR mehrere Sprachen gleichzeitig verwendet. Dies kann sehr hilfreich sein, um englischsprachige Metadaten und URLs in Unicode-Dokumenten zu erhalten.

: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")
VB   C#

Was sonst noch

IronOCR Tesseract bietet zusätzliche Funktionen für .NET-Softwareentwickler.

  • Automatische Bildanalyse zur Konfiguration von Tesseract für häufige Fehler
  • Konvertierung von Bildern in durchsuchbare PDF-Dateien
  • PDF-OCR
  • Kann jede PDF-Datei durchsuchbar und für Suchmaschinen indizierbar machen
  • OCR zu HTML-Ausgabe
  • Umwandlung von TIFF in PDF
  • Barcode-Lesen
  • QR-Code lesen
  • Multithreading
  • Eine erweiterte "OCRResult"-Klasse, die die Überprüfung von Blöcken, Absätzen, Zeilen, Wörtern, Zeichen, Schriftarten und OCR-Statistiken ermöglicht

Schlussfolgerung

Google Tesseract für C# OCR

Dies ist die richtige Bibliothek für freie und akademische Projekte in C#.

Tesseract ist eine hervorragende Ressource für C++-Entwickler, aber es ist keine vollständige OCR-Bibliothek für .NET.

Beim Umgang mit gescannten oder fotografierten Bildern müssen diese so bearbeitet werden, dass sie orthogonal, standardisiert, hochauflösend und frei von digitalem Rauschen sind, bevor Tesseract mit ihnen arbeiten kann.

IronOCR Tesseract OCR-Bibliothek für .NET-Framework & Core

Im Gegensatz dazu kann IronOCR dies und mehr in einer einzigen Codezeile erledigen.

Es ist wahr: IronOCR verwendetTesserakt für seine interne OCR-Engine.
Ein abschließend getuntes Tesseract-Build für C# mit vielen Leistungsverbesserungen und standardmäßig hinzugefügten Funktionen.

Es ist die richtige Wahl für jedes Projekt, bei dem die Zeit der Entwickler wertvoll ist. Wann haben Sie das letzte Mal einen .NET-Software-Ingenieur gefunden, der wochenlang Zeit für sich hatte?

Beginnen Sie mit Ihrem C# Tesseract-Projekt

Verwenden Sie NuGet Package Manager in jedem Visual Studio-Projekt:

Install-Package IronOcr

Oder Sie könnendie IronOCR Tesseract for .NET DLL herunterladen und installieren Sie es manuell.

Jeder .NET-Programmierer sollte in der Lage sein, innerhalb von 5 Minuten mit IronOCR Tesseract OCR zu arbeiten, indem er die Beispiele auf dieser Seite verwendet.

Sehen Sie sich den folgenden Vergleichsartikel an:AWS vs. Google Vision (Vergleich der OCR-Funktionen). Hier erfahren Sie mehr über Dienste, die OCR-Technologie anbieten.

.NET-Entwickler bei Iron mit einer Leidenschaft für OCR und die Verarbeitung natürlicher Sprache

Jim Baker

IronOCR Produktentwickler

Jim war seit der Veröffentlichung von IronOCR im Jahr 2016 an vorderster Front an der Produktentwicklung beteiligt. Jim arbeitete an der Unterstützung von Tesseract 5 für .NET Core & Standard bis 2019-2020