HOWTO · Csharp
So implementieren Sie OCR in einem C#-Projekt
Erfahren Sie, wie Sie Tesseract oder IronOCR zu einem C#-Projekt hinzufügen und Text in einem Bild erkennen.
Auf dieser Seite
Um Text in einem Bild aus einer C#-Anwendung zu erkennen, installieren Sie eine OCR-Bibliothek, stellen ein Bild und die benötigten Sprachdaten bereit und lesen dann den erkannten Text aus dem Ergebnis. Diese Anleitung beschreibt zwei getrennte Optionen: die quelloffene Tesseract-Engine und die kommerzielle IronOCR-Bibliothek. Ihre Pakete, Einrichtung und APIs unterscheiden sich.
Was OCR in einer C#-Anwendung tut
Optische Zeichenerkennung (OCR) wandelt Text, der in einem Bild dargestellt ist, in maschinenlesbaren Text um. Eine C#-Anwendung kann das Ergebnis verwenden, um gescannte Seiten zu indizieren, Formulare zur Dateneingabe vorzubefüllen oder Bildinhalte durchsuchbar zu machen. Die Erkennungsqualität hängt vom Quellbild und der Sprachkonfiguration ab; keine Bibliothek kann garantieren, dass jedes Zeichen korrekt erkannt wird.
Tesseract und IronOCR installieren
Wählen Sie eine Bibliothek für ein Projekt und befolgen Sie dann die Paket- und Bereitstellungsanforderungen dieser Bibliothek. Öffnen Sie in Visual Studio den NuGet-Paketmanager des Projekts und installieren Sie das Paket Tesseract für den eigenständigen Tesseract-Weg oder IronOcr für IronOCR. Prüfen Sie Paketidentität und Version anhand des Tesseract-NuGet-Eintrags oder des IronOcr-NuGet-Eintrags, bevor Sie sie hinzufügen; Paket-APIs und native Abhängigkeiten können je nach Version und Zielplattform variieren.
Tesseract benötigt außerdem trainierte Sprachdaten. Beschaffen Sie die .traineddata-Datei für jede Sprache, die Sie erkennen möchten, und legen Sie die Dateien gemeinsam in einem tessdata-Verzeichnis ab, das Ihre Anwendung lesen kann. Nehmen Sie dieses Verzeichnis in die Bereitstellung auf und verwenden Sie seinen tatsächlichen Pfad beim Erstellen der Engine. Die Tesseract-Projektdokumentation beschreibt den .NET-Wrapper und seine Einrichtung. IronOCR ist eine separate Bibliothek: Übergeben Sie ihre Typen nicht an das eigenständige Tesseract-Paket und gehen Sie nicht davon aus, dass beide Pakete dieselben Einrichtungsschritte teilen. Prüfen Sie vor der Bereitstellung die offizielle C#-OCR-Dokumentation und die API-Referenz der gewählten IronOCR-Version auf Paket-Anweisungen, Lizenzbedingungen und unterstützte Plattformen.
Text mit Tesseract aus einem Bild erkennen
Das eigenständige Tesseract-Paket benötigt sowohl das Bild als auch das Verzeichnis mit den trainierten Daten. Dieses vollständige Programm zeigt den vorgesehenen Ablauf für ein englisches Bild unter images/receipt.png, mit eng.traineddata in tessdata. Die Paketversion und die plattformspezifischen nativen Abhängigkeiten wurden nicht zur Überprüfung bereitgestellt; behandeln Sie diesen Code daher als ungeprüftes Beispiel und bestätigen Sie seine APIs und Abhängigkeiten vor dem Kompilieren anhand der Tesseract-Projektdokumentation für Ihre Zielplattform.
using System;
using Tesseract;
internal static class Program
{
private static void Main()
{
const string imagePath = "images/receipt.png";
const string tessdataPath = "tessdata";
using (var engine = new TesseractEngine(tessdataPath, "eng", EngineMode.Default))
using (var image = Pix.LoadFromFile(imagePath))
using (var page = engine.Process(image))
{
Console.WriteLine(page.GetText());
}
}
}
Wenn das Bild beispielsweise sichtbar die Zeile Invoice 1042 enthält, gibt das Programm erkannten Text wie Invoice 1042 aus (gefolgt von einem Zeilenumbruch). Dies ist repräsentativer Text, kein beobachtetes Ergebnis; die tatsächliche Ausgabe hängt vom Bild und den Erkennungseinstellungen ab. Belassen Sie das tessdata-Verzeichnis bei der bereitgestellten Anwendung und ändern Sie imagePath und den Sprachcode passend zu Ihrer Eingabe.
Text mit IronOCR aus einem Bild erkennen
IronOCR verwendet seinen eigenen IronOcr-Namespace und seine eigene API. Das folgende vollständige Programm verwendet IronTesseract, OcrInput.AddImage und Read, um dasselbe Bild zu erkennen und das Ergebnis auszugeben. Die Paketversion wurde nicht zur Überprüfung bereitgestellt; dies ist daher ein ungeprüftes Beispiel: Prüfen Sie die genauen Signaturen und Abhängigkeiten in der IronOCR-API-Referenz und den Anweisungen zum IronOcr-Paket, bevor Sie es kompilieren.
using System;
using IronOcr;
internal static class Program
{
private static void Main()
{
const string imagePath = "images/receipt.png";
using (var ocr = new IronTesseract())
using (var input = new OcrInput())
{
input.AddImage(imagePath);
var result = ocr.Read(input);
Console.WriteLine(result.Text);
}
}
}
Wenn das Bild Invoice 1042 enthält, ist der repräsentativ ausgegebene Text Invoice 1042, gefolgt von einem Zeilenumbruch; dies ist illustrativ, kein beobachteter Lauf. Installieren und referenzieren Sie IronOcr für diese Typen: IronTesseract gehört zu IronOCR und ist nicht die eigenständige Tesseract-Engine. Der von result.Text zurückgegebene Text ist Erkennungsergebnis; prüfen oder validieren Sie ihn, bevor Sie ihn als vertrauenswürdige Anwendungsdaten verwenden.
OCR-Genauigkeit verbessern und Fehler behandeln
Beginnen Sie mit einem scharfen, gut beleuchteten Bild, dessen Text ausreichend Kontrast hat und nicht abgeschnitten ist. Wenn die Ergebnisse schlecht sind, versuchen Sie ein größeres Quellbild, richten Sie schiefe Seiten gerade oder verarbeiten Sie eine Kopie vor, indem Sie sie in Graustufen umwandeln, den Kontrast anpassen oder Rauschen reduzieren. Vorverarbeitung kann manchen Eingaben helfen und anderen schaden; vergleichen Sie die Ergebnisse daher mit repräsentativen Bildern aus Ihrer Anwendung.
Konfigurieren Sie die richtige Sprache: Das eigenständige Tesseract braucht die passenden installierten trainierten Daten und einen geeigneten Sprachcode, während die Spracheinrichtung von IronOCR von der gewählten Version abhängt. Konfigurieren Sie bei mehreren Sprachen die vorgesehenen Sprachdaten, statt anzunehmen, die Standardeinstellung sei ausreichend.
Prüfen Sie vor der Verarbeitung, dass Eingabedateien existieren und lesbar sind, und behandeln Sie Bibliotheks- oder Dateifehler an der Anwendungsgrenze. Protokollieren Sie nützlichen Kontext, ohne sensible Bildinhalte offenzulegen. OCR kann teilweisen oder falschen Text zurückgeben, ohne anzuzeigen, dass das Ergebnis für nachgelagerte Entscheidungen geeignet ist; validieren Sie wichtige Felder und sehen Sie einen Prüfpfad vor, wenn die Erkennung unsicher ist. Keines der beiden Bibliotheksbeispiele wurde in den bereitgestellten Laufzeitnachweisen ausgeführt.