Wie man Eingabebilder für die OCR-Verarbeitung in C# verwendet

Lesen aus Datenströmen in C#35; für OCR

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

IronOCR liest Bilddaten direkt aus Streams in C#, indem der Stream an OcrInput- oder OcrImageInput-Konstruktoren übergeben wird, was eine effiziente OCR-Verarbeitung ermöglicht, ohne Dateien auf der Festplatte zu speichern.

Ein Stream ist ein kontinuierlicher Fluss von binären Informationen, der gelesen oder geschrieben werden kann. In der Programmierung verarbeiten Streams effizient Daten, die zu groß für den Speicher sind, indem sie in überschaubare Teile zerlegt werden.

Die Importmethoden von IronOCR akzeptieren Bilddatenströme direkt. Übergeben Sie die Streamdaten an eine Importmethode, die alle notwendigen Schritte automatisch durchführt. Für fortgeschrittene Szenarien empfiehlt sich die OcrInput Klasse, die umfangreiche Möglichkeiten zur Vorbereitung verschiedener Eingabeformate bietet.

Schnellstart: Verwenden Sie einen Stream für OCR-Eingaben in Sekunden

Dieses Beispiel demonstriert die sofortige OCR, indem es einen System.IO.Stream in IronOCR einspeist, Dateipfade überspringt und den erkannten Text mit minimalem Code abruft.

Nuget IconLegen Sie jetzt mit NuGet los, um PDFs zu erstellen:

  1. Installieren Sie IronOCR mit dem NuGet-Paketmanager.

    PM > Install-Package IronOcr

  2. Kopieren Sie diesen Codeausschnitt und führen Sie ihn aus.

    using var input = new IronOcr.OcrInput(stream);
    var result = new IronOcr.IronTesseract().Read(input);
  3. Bereitstellen zum Testen in Ihrer Live-Umgebung

    Beginnen Sie noch heute mit der Nutzung von IronOCR in Ihrem Projekt – mit einer kostenlosen Testversion.
    arrow pointer


Wie lese ich Datenströme mit IronOCR?

Zunächst wird die Klasse IronTesseract instanziiert, um OCR durchzuführen. Verwenden Sie die Methode FromFile von AnyBitmap, um die Bilddatei zu importieren. Dieses AnyBitmap-Objekt wandelt die Bilddaten in einen Stream um. Als Nächstes verwenden Sie die Anweisung using, um das Objekt OcrImageInput zu erstellen, indem Sie den Bildstrom mit der Methode GetStream übergeben. Verwenden Sie schließlich die Read-Methode, um OCR durchzuführen.

:path=/static-assets/ocr/content-code-examples/how-to/input-streams-read-streams.cs
using IronOcr;
using IronSoftware.Drawing;

// Instantiate IronTesseract
IronTesseract ocrTesseract = new IronTesseract();

// Read image file to AnyBitmap
AnyBitmap anyBitmap = AnyBitmap.FromFile("Potter.tiff");

// Import image stream
using var imageInput = new OcrImageInput(anyBitmap.GetStream());
// Perform OCR
OcrResult ocrResult = ocrTesseract.Read(imageInput);
Imports IronOcr
Imports IronSoftware.Drawing

' Instantiate IronTesseract
Private ocrTesseract As New IronTesseract()

' Read image file to AnyBitmap
Private anyBitmap As AnyBitmap = AnyBitmap.FromFile("Potter.tiff")

' Import image stream
Private imageInput = New OcrImageInput(anyBitmap.GetStream())
' Perform OCR
Private ocrResult As OcrResult = ocrTesseract.Read(imageInput)
$vbLabelText   $csharpLabel

Stream-basierte OCR kommt Webanwendungen zugute, die Bild-Uploads empfangen, Bilder aus Datenbanken verarbeiten oder temporäre Daten verarbeiten, die nicht auf die Festplatte geschrieben werden sollen. Der Stream-Ansatz lässt sich nahtlos in System.Drawing-Objekte und andere Bibliotheken zur Bildbearbeitung integrieren.

Warum Streams für OCR verwenden?

Die Arbeit mit Streams bietet mehrere Vorteile für .NET-Entwickler:

  1. Speichereffizienz: Verarbeiten Sie Daten in Stücken, anstatt ganze Dateien in den Speicher zu laden
  2. Sicherheit: Verarbeitung sensibler Dokumente ohne Erstellung temporärer Dateien auf der Festplatte
  3. Leistung: Eliminierung des E/A-Overheads bei Dateisystemoperationen
  4. Flexibilität: Arbeit mit Web-Uploads, Datenbank-BLOBs und In-Memory-Transformationen

Für die Verarbeitung mehrseitiger Dokumente oder die Verarbeitung von PDF-Streams behält IronOCR die gleiche einfache API bei und bietet eine robuste Leistung. Wenn Sie mit gescannten Dokumenten arbeiten, können Sie auch die Fähigkeiten von IronOCR nutzen, um gescannte Dokumente effizient durch Stream Processing zu lesen.

Wie kann ich einen Scanbereich für Stream OCR festlegen?

Die Klasse CropRectangle dient dazu, die Leistung bei großen Bildern zu verbessern und spezifische Messwerte aus bestimmten Regionen zu erhalten. Der OcrImageInput-Konstruktor akzeptiert ein CropRectangle-Objekt als zweiten Parameter, mit dem Sie angeben können, welcher Bereich des Bilddokuments gelesen werden soll. Das folgende Codebeispiel legt fest, dass nur die Kapitelnummer und der Titelbereich gelesen werden sollen.

:path=/static-assets/ocr/content-code-examples/how-to/input-streams-read-specific-region.cs
using IronOcr;
using IronSoftware.Drawing;
using System;

// Instantiate IronTesseract
IronTesseract ocrTesseract = new IronTesseract();

// Read image file to AnyBitmap
AnyBitmap anyBitmap = AnyBitmap.FromFile("Potter.tiff");

// Specify crop region
Rectangle scanRegion = new Rectangle(800, 200, 900, 400);

// Add image
using var imageInput = new OcrImageInput(anyBitmap.GetStream(), ContentArea: scanRegion);
// Perform OCR
OcrResult ocrResult = ocrTesseract.Read(imageInput);

// Output the result to console
Console.WriteLine(ocrResult.Text);
Imports IronOcr
Imports IronSoftware.Drawing
Imports System

' Instantiate IronTesseract
Private ocrTesseract As New IronTesseract()

' Read image file to AnyBitmap
Private anyBitmap As AnyBitmap = AnyBitmap.FromFile("Potter.tiff")

' Specify crop region
Private scanRegion As New Rectangle(800, 200, 900, 400)

' Add image
Private imageInput = New OcrImageInput(anyBitmap.GetStream(), ContentArea:= scanRegion)
' Perform OCR
Private ocrResult As OcrResult = ocrTesseract.Read(imageInput)

' Output the result to console
Console.WriteLine(ocrResult.Text)
$vbLabelText   $csharpLabel

Diese Technik ist besonders nützlich, wenn Sie einen bestimmten Bereich eines Bildes OCR oder strukturierte Dokumente übersetzen müssen, in denen Text an vorhersehbaren Stellen erscheint. Für komplexere Szenarien, die Tabellen oder strukturierte Daten beinhalten, erfahren Sie, wie man Tabellen in Dokumenten liest.

Wie sieht der Scanbereich in der Ausgabe aus?

OCR-Demo: Dokument im Photo Viewer mit extrahiertem Text 'Chapter Eight The Deathday Party' shown in debug console

Welche fortgeschrittenen Stream-Verarbeitungstechniken kann ich verwenden?

Bei der Arbeit mit Streams sollten Sie zusätzliche IronOCR-Funktionen nutzen, um die Erkennungsgenauigkeit zu verbessern. Die Bildoptimierungsfilter können vor der OCR-Verarbeitung direkt auf Streamdaten angewendet werden:

using IronOcr;
using IronSoftware.Drawing;
using System.IO;

// Process stream with filters
public string ProcessStreamWithFilters(Stream imageStream)
{
    IronTesseract ocrTesseract = new IronTesseract();

    // Configure for better accuracy
    ocrTesseract.Configuration.BlackListCharacters = "~`$#^*_}{][|\\";
    ocrTesseract.Configuration.PageSegmentationMode = TesseractPageSegmentationMode.AutoOsd;

    using var input = new OcrImageInput(imageStream);

    // Apply preprocessing filters
    input.Deskew();
    input.DeNoise();
    input.Sharpen();

    var result = ocrTesseract.Read(input);
    return result.Text;
}
using IronOcr;
using IronSoftware.Drawing;
using System.IO;

// Process stream with filters
public string ProcessStreamWithFilters(Stream imageStream)
{
    IronTesseract ocrTesseract = new IronTesseract();

    // Configure for better accuracy
    ocrTesseract.Configuration.BlackListCharacters = "~`$#^*_}{][|\\";
    ocrTesseract.Configuration.PageSegmentationMode = TesseractPageSegmentationMode.AutoOsd;

    using var input = new OcrImageInput(imageStream);

    // Apply preprocessing filters
    input.Deskew();
    input.DeNoise();
    input.Sharpen();

    var result = ocrTesseract.Read(input);
    return result.Text;
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Für eine verbesserte Bildverarbeitung sollten Sie den Filter-Assistenten verwenden, um automatisch die besten Vorverarbeitungsschritte für Ihre spezifischen Dokumenttypen zu bestimmen. Darüber hinaus kann die Funktion Bildausrichtung korrigieren die OCR-Genauigkeit bei gedrehten oder schiefen Bildern in Ihren Datenströmen erheblich verbessern.

Wie arbeite ich mit verschiedenen Stream-Quellen?

IronOCR verarbeitet verschiedene Stream-Quellen nahtlos. Ob es um die Verarbeitung von Uploads aus einem Webformular, das Abrufen von Bildern aus einer Datenbank oder die Konvertierung zwischen Formaten geht, die API bleibt konsistent:

// From MemoryStream
byte[] imageBytes = GetImageBytesFromDatabase();
using var memoryStream = new MemoryStream(imageBytes);
using var input = new OcrImageInput(memoryStream);

// From FileStream
using var fileStream = new FileStream("document.png", FileMode.Open);
using var input2 = new OcrImageInput(fileStream);

// From network stream
using var webClient = new WebClient();
using var networkStream = webClient.OpenRead("https://example.com/image.jpg");
using var input3 = new OcrImageInput(networkStream);
// From MemoryStream
byte[] imageBytes = GetImageBytesFromDatabase();
using var memoryStream = new MemoryStream(imageBytes);
using var input = new OcrImageInput(memoryStream);

// From FileStream
using var fileStream = new FileStream("document.png", FileMode.Open);
using var input2 = new OcrImageInput(fileStream);

// From network stream
using var webClient = new WebClient();
using var networkStream = webClient.OpenRead("https://example.com/image.jpg");
using var input3 = new OcrImageInput(networkStream);
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Um optimale Ergebnisse zu erzielen, sollten Sie die DPI-Einstellungen anpassen, wenn Sie mit niedrig aufgelösten Streams arbeiten. IronOCR führt die DPI-Erkennung automatisch durch, aber eine manuelle Konfiguration kann die Genauigkeit für bestimmte Anwendungsfälle verbessern. Wenn Sie mit mehrseitigen Dokumenten arbeiten, sollten Sie den Umgang mit mehrseitigen TIFF- und GIF-Dateien durch Stream Processing erkunden.

Wie behandle ich OCR-Ergebnisse aus Datenströmen?

Nach der Verarbeitung Ihres Datenstroms liefert IronOCR umfangreiche Ergebnisobjekte, die über eine einfache Textextraktion hinausgehen. Die OcrResult-Klasse enthält detaillierte Informationen über den erkannten Text, einschließlich Konfidenzwerte, Positionierung und Struktur:

// Process stream and analyze results
using var input = new OcrImageInput(stream);
var result = new IronTesseract().Read(input);

// Access detailed results
foreach (var page in result.Pages)
{
    Console.WriteLine($"Page {page.PageNumber} Confidence: {page.Confidence}%");

    foreach (var paragraph in page.Paragraphs)
    {
        Console.WriteLine($"Paragraph: {paragraph.Text}");
        Console.WriteLine($"Location: X={paragraph.X}, Y={paragraph.Y}");
    }
}

// Export results
string text = result.Text;
string searchablePdf = result.SaveAsSearchablePdf("output.pdf");
string hocrHtml = result.SaveAsHocrHtml("output.html");
// Process stream and analyze results
using var input = new OcrImageInput(stream);
var result = new IronTesseract().Read(input);

// Access detailed results
foreach (var page in result.Pages)
{
    Console.WriteLine($"Page {page.PageNumber} Confidence: {page.Confidence}%");

    foreach (var paragraph in page.Paragraphs)
    {
        Console.WriteLine($"Paragraph: {paragraph.Text}");
        Console.WriteLine($"Location: X={paragraph.X}, Y={paragraph.Y}");
    }
}

// Export results
string text = result.Text;
string searchablePdf = result.SaveAsSearchablePdf("output.pdf");
string hocrHtml = result.SaveAsHocrHtml("output.html");
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Das Ergebnisobjekt bietet auch Methoden für den Export in durchsuchbare PDFs oder das hOCR-HTML-Format, wodurch die Erstellung durchsuchbarer Dokumentenarchive aus Ihren Stream-Eingaben erleichtert wird. Zu Debugging-Zwecken können Sie die Highlight-Texte-Funktion verwenden, um zu visualisieren, was IronOCR in Ihren Bildern entdeckt hat.

Welche Leistungsaspekte sollte ich kennen?

Wenn Sie mehrere Datenströme verarbeiten oder OCR-Lösungen mit hohem Durchsatz implementieren, sollten Sie diese Optimierungsstrategien berücksichtigen:

  1. Wiederverwendung von IronTesseract-Instanzen: Erstellen Sie eine einzige Instanz und verwenden Sie sie für mehrere Operationen wieder
  2. Fortschrittsverfolgung einführen: Verwenden Sie bei großen Datenströmen Fortschrittsverfolgung, um den Verarbeitungsstatus zu überwachen
  3. Parallelprozess: IronOCR unterstützt die gleichzeitige Verarbeitung von mehreren Streams
  4. Optimierung der Bildqualität: Vorverarbeitung von Streams, um optimale Auflösung und Klarheit zu gewährleisten

Um eine maximale Leistung zu erzielen, sollten Sie die Optionen für die schnelle OCR-Konfiguration prüfen und die Implementierung der Multithreading-Verarbeitung für Stapelverarbeitungen in Betracht ziehen. Wenn Sie mit zeitkritischen Anwendungen arbeiten, kann das Verständnis von Zeitüberschreitungen Ihnen helfen, lang andauernde OCR-Vorgänge effektiv zu verwalten.

Wie behebe ich häufige Stream-Probleme?

Bei der Arbeit mit Strömen können Sie auf besondere Herausforderungen stoßen. Hier finden Sie Lösungen für häufige Szenarien:

  • Stream-Position: Stream-Position immer auf 0 zurücksetzen, bevor sie an IronOCR übergeben wird
  • Entsorgung: Verwenden Sie using-Anweisungen, um eine ordnungsgemäße Bereinigung der Ressourcen sicherzustellen
  • Formatunterstützung: IronOCR unterstützt verschiedene Bildformate einschließlich JPEG, PNG, TIFF und BMP über Streams
  • Speichermanagement: Für große Datenströme sollten Sie die Verarbeitung in Blöcken oder Streaming-Ansätze in Betracht ziehen

Bei komplexen Dokumenten oder wenn die Standard-OCR keine zufriedenstellenden Ergebnisse liefert, können die Computer-Vision-Funktionen helfen, den Text genauer zu lokalisieren und zu extrahieren. Wenn Sie mit minderwertigen Datenströmen arbeiten, sollten Sie außerdem den Leitfaden Fixing low quality scans zu Vorverarbeitungstechniken lesen, die die Erkennungsraten erheblich verbessern können.

Ausführlichere Informationen zur Arbeit mit Streams und anderen Eingabemethoden finden Sie in unseren umfassenden How-to-Guides und Codebeispielen.

Häufig gestellte Fragen

Wie kann ich OCR an Bilddaten durchführen, ohne sie vorher auf der Festplatte zu speichern?

Mit IronOCR können Sie Bildströme direkt verarbeiten, indem Sie sie an die Konstruktoren OcrInput oder OcrImageInput übergeben. Dies ermöglicht eine effiziente OCR-Verarbeitung ohne die Erstellung temporärer Dateien, was ideal für die Verarbeitung von Web-Uploads, Datenbank-BLOBs oder sensiblen Dokumenten ist, die nicht auf die Festplatte gelangen sollen.

Welche Arten von Datenströmen können als Input für die OCR-Verarbeitung verwendet werden?

IronOCR akzeptiert jeden System.IO.Stream, der Bilddaten enthält. Dazu gehören Speicherströme aus Web-Uploads, Ströme aus BLOB-Feldern von Datenbanken oder Ströme, die von Bildbearbeitungsbibliotheken erstellt wurden. Die Bibliothek führt alle erforderlichen Konvertierungsschritte automatisch durch, wenn Sie den Stream an OcrInput oder OcrImageInput übergeben.

Wie kann ich in C# am einfachsten OCR für einen Stream durchführen?

Die schnellste Methode ist, ein OcrInput-Objekt mit Ihrem Stream zu erstellen und die Read-Methode aufzurufen: 'using var input = new IronOcr.OcrInput(stream); var result = new IronOcr.IronTesseract().Read(input);'. Dieser minimale Code führt die OCR durch und gibt den erkannten Text sofort zurück.

Warum sollte ich für OCR Streams anstelle von Dateipfaden verwenden?

Stream-basierte OCR mit IronOCR bietet mehrere Vorteile: Speichereffizienz durch die Verarbeitung von Daten in Chunks, erhöhte Sicherheit durch die Vermeidung von temporären Dateien auf der Festplatte, verbesserte Leistung durch die Beseitigung von Datei-E/A-Overhead und größere Flexibilität bei der Arbeit mit Web-Uploads oder Datenbank-BLOBs.

Kann ich einen bestimmten Bereich eines Bildstroms angeben, der gelesen werden soll?

Ja, IronOCR ermöglicht es Ihnen, den Lesebereich zu definieren, indem Sie bei der Verarbeitung von Datenströmen einen Beschnittbereich angeben. Mit dieser Funktion können Sie sich bei der OCR auf bestimmte Teile des Bildes konzentrieren, ohne das gesamte Dokument zu verarbeiten, was sowohl die Geschwindigkeit als auch die Genauigkeit verbessert.

Wie lässt sich die Stream-Verarbeitung in andere Bildbearbeitungsbibliotheken integrieren?

Der Stream-Ansatz von IronOCR lässt sich nahtlos in System.Drawing-Objekte und andere .NET-Bibliotheken zur Bildbearbeitung integrieren. Sie können die AnyBitmap-Klasse verwenden, um Bilder mit der GetStream-Methode in Streams zu konvertieren, was die Kombination von OCR mit anderen Bildverarbeitungs-Workflows erleichtert.

Chaknith Bin
Software Ingenieur
Chaknith arbeitet an IronXL und IronBarcode. Er hat umfassende Expertise in C# und .NET und hilft, die Software zu verbessern und Kunden zu unterstützen. Seine Einblicke aus Benutzerinteraktionen tragen zu besseren Produkten, Dokumentationen und einem insgesamt besseren Erlebnis bei.
Rezensiert von
Jeff Fritz
Jeffrey T. Fritz
Principal Program Manager - .NET Community Team
Jeff ist außerdem Principal Program Manager für das .NET- und Visual Studio-Team. Er ist der ausführende Produzent der .NET Conf Virtual Conference Series und moderiert ‚Fritz and Friends‘, einen Livestream für Entwickler, der zweimal wöchentlich ausgestrahlt wird. Dort spricht er über Technik und schreibt gemeinsam mit den Zuschauern Code. Jeff schreibt Workshops, Präsentationen und plant Inhalte für die größten Microsoft-Entwicklerveranstaltungen, einschließlich Microsoft Build, Microsoft Ignite, .NET Conf und dem Microsoft MVP Summit.
Bereit anzufangen?
Nuget Downloads 5,246,844 | Version: 2025.12 gerade veröffentlicht