Jak odczytywać dane ze strumieni w języku C# na potrzeby OCR
IronOCR odczytuje dane obrazu bezpośrednio ze strumieni w C# przez przekazanie strumienia do konstruktorów OcrInput lub OcrImageInput, umożliwiając efektywne przetwarzanie OCR bez zapisywania plików na dysku.
Strumień to ciągły przepływ informacji binarnych, które można odczytywać lub zapisywać. W programowaniu strumienie efektywnie przetwarzają dane zbyt duże, by zmieściły się w pamięci, obsługując je w łatwych do zarządzania fragmentach.
Metody importu IronOCR akceptują bezpośrednio strumienie danych obrazu. Przekaż dane strumieniowe do metody importu, która automatycznie zajmie się wszystkimi niezbędnymi krokami. W bardziej zaawansowanych scenariuszach zbadanie klasy OcrInput oferuje szerokie opcje przygotowania różnych formatów wejściowych.
Szybki start: Wykorzystaj strumień do wprowadzania danych OCR w kilka sekund
Ten przykład demonstruje natychmiastowe OCR przez przekazanie System.IO.Stream do IronOCR, pomijając ścieżki plików i uzyskując rozpoznany tekst z minimalną ilością kodu.
-
Install IronOCR with NuGet Package Manager
PM > Install-Package IronOcr -
Skopiuj i uruchom ten fragment kodu.
using var input = new IronOcr.OcrInput(stream); var result = new IronOcr.IronTesseract().Read(input); -
Wdrożenie do testowania w środowisku produkcyjnym
Rozpocznij używanie IronOCR w swoim projekcie już dziś z darmową wersją próbną
Minimalny proces (5 kroków)
- Pobierz bibliotekę C# do odczytu ze strumieni
- Pobierz i przygotuj dane strumienia obrazów
- Przekaż strumień obrazu do konstruktora
OcrImageInput,aby zaimportować obraz - Użyj metody
Readdo wykonania OCR - Określ obszar czytania, wskazując region przycięcia
Jak odczytywać strumienie za pomocą IronOCR?
Najpierw zainicjuj klasę IronTesseract do wykonania OCR. Użyj metody FromFile z AnyBitmap do importu pliku obrazu. Obiekt AnyBitmap konwertuje dane obrazu na strumień. Następnie użyj instrukcji using, aby utworzyć obiekt OcrImageInput przez przekazanie strumienia obrazu za pomocą metody GetStream. Na koniec użyj metody Read, aby wykonać OCR.
: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)
OCR oparty na strumieniach jest przydatny w aplikacjach internetowych, które odbierają przesłane obrazy, przetwarzają obrazy z baz danych lub obsługują dane tymczasowe, które nie powinny być zapisywane na dysku. Podejście strumieniowe integruje się płynnie z obiektami System.Drawing oraz innymi bibliotekami do manipulacji obrazami.
Dlaczego warto używać Streams do OCR?
Praca ze strumieniami zapewnia programistom .NET kilka korzyści:
- Efektywność pamięci: Przetwarzaj dane w fragmentach zamiast ładować całe pliki do pamięci
- Bezpieczeństwo: Przetwarzaj poufne dokumenty bez tworzenia plików tymczasowych na dysku
- Wydajność: Wyeliminuj obciążenie operacji wejścia/wyjścia związane z operacjami systemu plików
- Elastyczność: obsługa plików przesyłanych przez Internet, obiektów BLOB w bazach danych oraz transformacji w pamięci
W przypadku przetwarzania dokumentów wielostronicowych lub obsługi strumieni PDF, IronOCR zachowuje ten sam prosty interfejs API, zapewniając jednocześnie wysoką wydajność. Podczas pracy ze skanowanymi dokumentami można również wykorzystać możliwości IronOCR do wydajnego odczytywania skanowanych dokumentów poprzez przetwarzanie strumieniowe.
Jak mogę określić obszar skanowania dla funkcji Stream OCR?
Aby poprawić wydajność na dużych obrazach i uzyskać określone odczyty z niektórych obszarów, wykorzystaj klasę CropRectangle. Konstruktor OcrImageInput przyjmuje obiekt CropRectangle jako drugi parametr, pozwalając określić, który region dokumentu obrazu ma być odczytany. Poniższy przykład kodu określa, że należy odczytać tylko numer rozdziału i obszar tytułu.
: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)
Technika ta jest szczególnie przydatna, gdy trzeba wykonać OCR określonego obszaru obrazu lub gdy mamy do czynienia z dokumentami ustrukturyzowanymi, w których tekst pojawia się w przewidywalnych miejscach. W przypadku bardziej złożonych scenariuszy obejmujących tabele lub dane strukturalne zapoznaj się z informacjami na temat odczytywania tabel w dokumentach.
Jak wygląda obszar skanowania w pliku wyjściowym?
Jakie zaawansowane techniki przetwarzania strumieniowego mogę wykorzystać?
Podczas pracy ze strumieniami wykorzystaj dodatkowe funkcje IronOCR, aby zwiększyć dokładność rozpoznawania. Filtry optymalizacji obrazów można zastosować bezpośrednio do danych strumieniowych przed przetwarzaniem OCR:
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;
}
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
Aby usprawnić przetwarzanie obrazów, warto rozważyć użycie Kreatora filtrów, który automatycznie określi najlepsze etapy przetwarzania wstępnego dla konkretnych typów dokumentów. Ponadto w przypadku obrazów obróconych lub przekrzywionych w strumieniach danych funkcja korygowania orientacji obrazu może znacznie poprawić dokładność OCR.
Jak pracować z różnymi źródłami strumieni?
IronOCR płynnie obsługuje różne źródła strumieniowe. Niezależnie od tego, czy chodzi o przetwarzanie danych przesłanych z formularza internetowego, pobieranie obrazów z bazy danych, czy konwersję między formatami, API pozostaje spójne:
// 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
Aby uzyskać optymalne wyniki, rozważ dostosowanie ustawień DPI podczas pracy ze strumieniami o niskiej rozdzielczości. IronOCR automatycznie obsługuje wykrywanie DPI, ale ręczna konfiguracja może poprawić dokładność w konkretnych przypadkach użycia. W przypadku dokumentów wielostronicowych warto zapoznać się z obsługą wielostronicowych plików TIFF i GIF poprzez przetwarzanie strumieniowe.
Jak radzić sobie z wynikami OCR ze strumieni?
Po przetworzeniu strumienia danych IronOCR dostarcza bogate obiekty wynikowe, które wykraczają poza proste wyodrębnianie tekstu. Klasa OcrResult zawiera szczegółowe informacje o rozpoznanym tekście, łącznie z poziomami pewności, pozycjonowaniem i 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");
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
Obiekt wynikowy udostępnia również metody eksportu do plików PDF z możliwością wyszukiwania lub formatu hOCR HTML, co ułatwia tworzenie archiwów dokumentów z możliwością wyszukiwania na podstawie danych wejściowych ze strumienia. W celu debugowania można użyć funkcji podświetlania tekstu, aby wizualizować to, co IronOCR wykrył na obrazach.
O jakich kwestiach związanych z wydajnością powinienem wiedzieć?
Podczas przetwarzania wielu strumieni lub wdrażania rozwiązań OCR o wysokiej przepustowości należy wziąć pod uwagę następujące strategie optymalizacji:
- Ponowne użycie instancji
IronTesseract: Utwórz jedną instancję i używaj jej ponownie w wielu operacjach - Wdrożenie śledzenia postępów: W przypadku dużych strumieni danych należy używać funkcji śledzenia postępów do monitorowania statusu przetwarzania
- Przetwarzanie równoległe:
IronOCRwspiera równoczesne przetwarzanie dla wielu strumieni - Optymalizacja jakości obrazu: przetwarzanie strumieni w celu zapewnienia optymalnej rozdzielczości i klarowności
Aby uzyskać maksymalną wydajność, zapoznaj się z opcjami szybkiej konfiguracji OCR i rozważ wdrożenie przetwarzania wielowątkowego dla operacji wsadowych. W przypadku pracy z aplikacjami, w których czas ma kluczowe znaczenie, zrozumienie mechanizmu limitów czasu może pomóc w skutecznym zarządzaniu długotrwałymi operacjami OCR.
Jak rozwiązywać typowe problemy związane ze strumieniami?
Podczas pracy ze strumieniami możesz napotkać konkretne wyzwania. Oto rozwiązania typowych scenariuszy:
- Pozycja strumienia: Zawsze zresetuj pozycję strumienia do
0przed przekazaniem doIronOCR - Zwalnianie zasobów: Użyj instrukcji
using, aby zapewnić właściwe zwolnienie zasobów - Obsługa formatów: IronOCR obsługuje różne formaty obrazów, w tym JPEG, PNG, TIFF i BMP poprzez strumienie
- Zarządzanie pamięcią: W przypadku dużych strumieni warto rozważyć przetwarzanie w partiach lub podejścia strumieniowe
W przypadku złożonych dokumentów lub gdy standardowe OCR nie zapewnia zadowalających wyników, funkcje wizji komputerowej mogą pomóc w dokładniejszym zlokalizowaniu i wyodrębnieniu tekstu. Ponadto, w przypadku pracy z plikami o niskiej jakości, zapoznaj się z przewodnikiem dotyczącym poprawiania skanów o niskiej jakości, aby poznać techniki przetwarzania wstępnego, które mogą znacznie poprawić wskaźniki rozpoznawalności.
Aby uzyskać bardziej szczegółowe informacje na temat pracy ze strumieniami i innymi metodami wprowadzania danych, zapoznaj się z naszymi obszernymi przewodnikami i przykładami kodu.
Często Zadawane Pytania
Jak mogę wykonać OCR na danych obrazu bez zapisywania ich najpierw na dysku?
IronOCR pozwala przetwarzać strumienie obrazów bezpośrednio, przekazując je do konstruktorów OcrInput lub OcrImageInput. Umożliwia to wydajne przetwarzanie OCR bez tworzenia tymczasowych plików, co jest idealne przy obsłudze przesyłania danych do sieci, BLOB-ów z bazy danych lub dokumentów wrażliwych, które nie powinny być zapisywane na dysku.
Jakie typy strumieni mogą być używane jako wejście do przetwarzania OCR?
IronOCR akceptuje dowolny System.IO.Stream zawierający dane obrazu. Obejmuje to strumienie pamięci z przesyłania danych do sieci, strumienie z pól BLOB-ów z bazy danych lub strumienie utworzone z bibliotek do manipulacji obrazem. Biblioteka automatycznie obsługuje wszystkie niezbędne kroki konwersji, gdy przekażesz strumień do OcrInput lub OcrImageInput.
Jaki jest najprostszy sposób wykonania OCR na strumieniu w C#?
Najszybszą metodą jest stworzenie obiektu OcrInput ze strumieniem i wywołanie metody Read: „using var input = new IronOcr.OcrInput(stream); var result = new IronOcr.IronTesseract().Read(input);”. Minimalny kod wykonuje OCR i natychmiast zwraca rozpoznany tekst.
Dlaczego powinienem używać strumieni zamiast ścieżek do plików dla OCR?
OCR oparte na strumieniach z IronOCR oferuje kilka zalet: efektywność pamięci, przetwarzając dane w kawałkach, zwiększone bezpieczeństwo, unikając tymczasowych plików na dysku, poprawioną wydajność przez wyeliminowanie nadmiaru operacji I/O plików oraz większą elastyczność przy pracy z przesyłaniem danych do sieci lub BLOB-ami z bazy danych.
Czy mogę określić konkretny obszar strumienia obrazu do odczytu?
Tak, IronOCR pozwala zdefiniować obszar odczytu, określając region kadrowania podczas przetwarzania strumieni. Ta funkcja umożliwia skoncentrowanie OCR na określonych częściach obrazu bez przetwarzania całego dokumentu, co poprawia zarówno szybkość, jak i dokładność.
Jak przetwarzanie strumieni integruje się z innymi bibliotekami do manipulacji obrazem?
Podejście strumieniowe IronOCR integruje się bezproblemowo z obiektami System.Drawing i innymi bibliotekami do manipulacji obrazem w .NET. Możesz używać klasy AnyBitmap do konwersji obrazów na strumienie za pomocą metody GetStream, co ułatwia łączenie OCR z innymi przepływami przetwarzania obrazem.

