Wie man in C# aus Streams für OCR liest
IronOCR liest Bilddaten direkt aus Streams in C#, indem der Stream an die Konstruktoren OcrInput oder OcrImageInput übergeben wird, was eine effiziente OCR-Verarbeitung ermöglicht, ohne dass Dateien auf der Festplatte gespeichert werden müssen.
Ein Stream ist ein kontinuierlicher Fluss binärer Informationen, der gelesen oder geschrieben werden kann. In der Programmierung verarbeiten Streams Daten, die für den Arbeitsspeicher zu groß sind, effizient, indem sie diese in überschaubare Blöcke aufteilen.
Die Importmethoden von IronOCR akzeptieren Bilddatenströme direkt. Übergeben Sie die Stream-Daten an eine Importmethode, die alle erforderlichen Schritte automatisch ausführt. Für fortgeschrittene Szenarien sollten Sie die OcrInput-Klasse erkunden, die umfangreiche Optionen zur Aufbereitung verschiedener Eingabeformate bietet.
Schnellstart: Verwenden Sie einen Stream für die OCR-Eingabe in Sekundenschnelle
Dieses Beispiel demonstriert sofortiges OCR, indem ein System.IO.Stream in IronOCR eingegeben wird, Dateipfade übersprungen werden und der erkannte Text mit minimalem Code abgerufen wird.
-
Installieren Sie IronOCR mit NuGet Package Manager
PM > Install-Package IronOcr -
Kopieren Sie diesen Codeausschnitt und führen Sie ihn aus.
using var input = new IronOcr.OcrInput(stream); var result = new IronOcr.IronTesseract().Read(input); -
Bereitstellen zum Testen in Ihrer Live-Umgebung
Beginnen Sie noch heute, IronOCR in Ihrem Projekt zu verwenden, mit einer kostenlosen Testversion
Minimaler Arbeitsablauf (5 Schritte)
- Laden Sie eine C#-Bibliothek zum Lesen aus Streams herunter
- Bildstromdaten abrufen und aufbereiten
- Übergeben Sie den Bildstrom an den OcrImageInput-Konstruktor, um das Bild zu importieren
- Verwenden Sie die
ReadMethode, um OCR durchzuführen - Definieren Sie den Lesebereich, indem Sie den Ausschnittbereich festlegen
Wie lese ich Streams mit IronOCR?
Instanziieren Sie zunächst die Klasse IronTesseract, um die 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. Verwenden Sie anschließend die Anweisung using, um das Objekt OcrImageInput zu erstellen, indem Sie den Bildstrom mit der Methode GetStream übergeben. Verwenden Sie schließlich die Methode Read, 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)
Stream-basierte OCR bietet Vorteile für Webanwendungen, die Bild-Uploads empfangen, Bilder aus Datenbanken verarbeiten oder temporäre Daten handhaben, die nicht auf die Festplatte geschrieben werden sollten. Der Stream-Ansatz lässt sich nahtlos in System.Drawing-Objekte und andere Bildbearbeitungsbibliotheken integrieren.
Warum Streams für OCR verwenden?
Die Arbeit mit Streams bietet .NET-Entwicklern mehrere Vorteile:
- Speichereffizienz: Daten in Blöcken verarbeiten, anstatt ganze Dateien in den Arbeitsspeicher zu laden
- Sicherheit: Verarbeiten Sie sensible Dokumente, ohne temporäre Dateien auf der Festplatte zu erstellen
- Leistung: Beseitigung des I/O-Overheads bei Dateisystemoperationen
- Flexibilität: Arbeiten Sie mit Web-Uploads, Datenbank-BLOBs und In-Memory-Transformationen
Für die Verarbeitung mehrseitiger Dokumente oder die Bearbeitung von PDF-Streams bietet IronOCR dieselbe einfache API bei gleichzeitig robuster Leistung. Bei der Arbeit mit gescannten Dokumenten können Sie auch die Funktionen von IronOCR nutzen, um gescannte Dokumente durch Stream-Verarbeitung effizient zu lesen.
Wie kann ich einen Scanbereich für Stream-OCR festlegen?
Um die Leistung bei großen Bildern zu verbessern und bestimmte Werte aus bestimmten Bereichen zu ermitteln, verwenden Sie die Klasse CropRectangle. Der OcrImageInput-Konstruktor akzeptiert ein CropRectangle-Objekt als zweiten Parameter, sodass Sie angeben können, welcher Bereich des Bilddokuments gelesen werden soll. Das folgende Code-Beispiel 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)
Diese Technik ist besonders nützlich, wenn Sie einen bestimmten Bereich eines Bildes per OCR erfassen müssen oder wenn Sie mit strukturierten Dokumenten arbeiten, in denen Text an vorhersehbaren Stellen erscheint. Für komplexere Szenarien mit Tabellen oder strukturierten Daten erfahren Sie hier, wie Sie Tabellen in Dokumenten lesen können.
Wie sieht der Scanbereich in der Ausgabe aus?
Welche fortgeschrittenen Stream-Verarbeitungstechniken kann ich verwenden?
Nutzen Sie bei der Arbeit mit Streams zusätzliche IronOCR-Funktionen, um die Erkennungsgenauigkeit zu verbessern. Die Bildoptimierungsfilter können direkt auf die Stream-Daten vor der OCR-Verarbeitung 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.Co/nfiguration.BlackListCharacters = "~`$#^*_}{][|\\";
ocrTesseract.Co/nfiguration.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.Co/nfiguration.BlackListCharacters = "~`$#^*_}{][|\\";
ocrTesseract.Co/nfiguration.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;
}
Imports IronOcr
Imports IronSoftware.Drawing
Imports System.IO
' Process stream with filters
Public Function ProcessStreamWithFilters(imageStream As Stream) As String
Dim ocrTesseract As New IronTesseract()
' Configure for better accuracy
ocrTesseract.Configuration.BlackListCharacters = "~`$#^*_}{][|\"
ocrTesseract.Configuration.PageSegmentationMode = TesseractPageSegmentationMode.AutoOsd
Using input As New OcrImageInput(imageStream)
' Apply preprocessing filters
input.Deskew()
input.DeNoise()
input.Sharpen()
Dim result = ocrTesseract.Read(input)
Return result.Text
End Using
End Function
Für eine verbesserte Bildverarbeitung sollten Sie den Filter-Assistenten nutzen, um automatisch die besten Vorverarbeitungsschritte für Ihre spezifischen Dokumenttypen zu ermitteln. Bei gedrehten oder schrägen Bildern in Ihren Datenströmen kann die Funktion zur Korrektur der Bildausrichtung zudem die OCR-Genauigkeit erheblich verbessern.
Wie arbeite ich mit verschiedenen Stream-Quellen?
IronOCR verarbeitet nahtlos verschiedene Stream-Quellen. 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);
Imports System.IO
Imports System.Net
' From MemoryStream
Dim imageBytes As Byte() = GetImageBytesFromDatabase()
Using memoryStream As New MemoryStream(imageBytes)
Using input As New OcrImageInput(memoryStream)
' Process input
End Using
End Using
' From FileStream
Using fileStream As New FileStream("document.png", FileMode.Open)
Using input2 As New OcrImageInput(fileStream)
' Process input2
End Using
End Using
' From network stream
Using webClient As New WebClient()
Using networkStream As Stream = webClient.OpenRead("https://example.com/image.jpg")
Using input3 As New OcrImageInput(networkStream)
' Process input3
End Using
End Using
End Using
Für optimale Ergebnisse sollten Sie bei der Arbeit mit Streams mit niedriger Auflösung eine Anpassung der DPI-Einstellungen in Betracht ziehen. IronOCR übernimmt die DPI-Erkennung automatisch, doch eine manuelle Konfiguration kann die Genauigkeit für bestimmte Anwendungsfälle verbessern. Bei der Arbeit mit mehrseitigen Dokumenten sollten Sie die Verarbeitung mehrseitiger TIFF- und GIF-Dateien mittels Stream-Verarbeitung in Betracht ziehen.
Wie gehe ich mit OCR-Ergebnissen aus Streams um?
Nach der Verarbeitung Ihres Datenstroms liefert IronOCR umfangreiche Ergebnisobjekte, die über die einfache Textextraktion hinausgehen. Die Klasse OcrResult enthält detaillierte Informationen über den erkannten Text, einschließlich Konfidenzwerten, 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.Co/nfidence}%");
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.Co/nfidence}%");
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");
Imports IronOcr
' Process stream and analyze results
Using input As New OcrImageInput(stream)
Dim result = New IronTesseract().Read(input)
' Access detailed results
For Each page In result.Pages
Console.WriteLine($"Page {page.PageNumber} Confidence: {page.Confidence}%")
For Each paragraph In page.Paragraphs
Console.WriteLine($"Paragraph: {paragraph.Text}")
Console.WriteLine($"Location: X={paragraph.X}, Y={paragraph.Y}")
Next
Next
' Export results
Dim text As String = result.Text
Dim searchablePdf As String = result.SaveAsSearchablePdf("output.pdf")
Dim hocrHtml As String = result.SaveAsHocrHtml("output.html")
End Using
Das Ergebnisobjekt bietet zudem Methoden zum Exportieren in durchsuchbare PDF-Dateien oder das hOCR-HTML-Format, wodurch sich aus Ihren Stream-Eingaben auf einfache Weise durchsuchbare Dokumentenarchive erstellen lassen. Zu Debugging-Zwecken können Sie die Funktion zum Hervorheben von Texten nutzen, um zu visualisieren, was IronOCR in Ihren Bildern erkannt hat.
Welche Leistungsaspekte sollte ich beachten?
Berücksichtigen Sie bei der Verarbeitung mehrerer Datenströme oder der Implementierung von OCR-Lösungen mit hohem Durchsatz die folgenden Optimierungsstrategien:
- Wiederverwendung von
IronTesseract-Instanzen: Erstellen Sie eine einzige Instanz und verwenden Sie diese für mehrere Operationen wieder - Fortschrittsverfolgung implementieren: Verwenden Sie bei großen Datenströmen die Fortschrittsverfolgung, um den Verarbeitungsstatus zu überwachen
- Parallele Verarbeitung:
IronOCRunterstützt die gleichzeitige Verarbeitung mehrerer Streams - Bildqualität optimieren: Streams vorverarbeiten, um optimale Auflösung und Klarheit zu gewährleisten
Um eine maximale Leistung zu erzielen, sollten Sie die Konfigurationsoptionen für schnelles OCR prüfen und die Implementierung einer Multithread-Verarbeitung für Batch-Vorgänge in Betracht ziehen. Bei der Arbeit mit zeitkritischen Anwendungen kann das Verständnis von Timeouts Ihnen helfen, lang andauernde OCR-Vorgänge effektiv zu verwalten.
Wie behebe ich häufige Probleme mit Streams?
Bei der Arbeit mit Streams können bestimmte Herausforderungen auftreten. Hier sind Lösungen für häufige Szenarien:
- Stream-Position: Setzen Sie die Stream-Position immer auf
0zurück, bevor Sie anIronOCRübergeben. - Entsorgung: Verwenden Sie
using-Anweisungen, um eine ordnungsgemäße Bereinigung der Ressourcen sicherzustellen - Unterstützte Formate: IronOCR unterstützt verschiedene Bildformate, darunter JPEG, PNG, TIFF und BMP über Streams
- Speicherverwaltung: Bei großen Datenströmen sollten Sie eine verteilte Verarbeitung oder Streaming-Ansätze in Betracht ziehen
Bei komplexen Dokumenten oder wenn herkömmliche OCR-Verfahren keine zufriedenstellenden Ergebnisse liefern, können die Computer-Vision-Funktionen dabei helfen, Text genauer zu lokalisieren und zu extrahieren. Wenn Sie mit Scans von geringer Qualität arbeiten, lesen Sie außerdem den Leitfaden zur Korrektur von Scans mit geringer Qualität, um Vorverarbeitungstechniken zu finden, die die Erkennungsraten deutlich verbessern können.
Weitere Informationen zur Arbeit mit Streams und anderen Eingabemethoden finden Sie in unseren umfassenden Anleitungen und Code-Beispielen.
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.
Kann IronOCR in bestehende Anwendungen integriert werden?
IronOCR ist darauf ausgelegt, leicht in bestehende Anwendungen mithilfe von C# integriert zu werden, sodass Entwickler OCR-Funktionalität mit minimalem Aufwand zu ihrer Software hinzufügen können.
Was sind die Vorteile der Nutzung von IronOCR für das Dokumentenmanagement?
Die Verwendung von IronOCR für das Dokumentenmanagement rationalisiert den Arbeitsablauf, indem gescannte Dokumente in durchsuchbare und bearbeitbare Texte umgewandelt werden, wodurch der Bedarf an manueller Dateneingabe reduziert und die Zugänglichkeit von Dokumenten verbessert wird.
Wie kann IronOCR die Datenqualität verbessern?
IronOCR verbessert die Datenqualität durch seine fortschrittlichen Erkennungsalgorithmen und Bildkorrekturfunktionen, die sicherstellen, dass der Textextraktionsprozess sowohl zuverlässig als auch genau ist.
Gibt es eine kostenlose Testversion von IronOCR?
Ja, Iron Software bietet eine kostenlose Testversion von IronOCR an, die es den Benutzern ermöglicht, die Funktionen und Fähigkeiten zu testen, bevor sie eine Kaufentscheidung treffen.

