Jak odczytywać dane ze strumieni w języku C# na potrzeby OCR
IronOCR odczytuje dane obrazu bezpośrednio ze strumieni w języku C#, przekazując strumień do konstruktorów OcrInput lub OcrImageInput, umożliwiając wydajne 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 przypadku zaawansowanych scenariuszy warto zapoznać się z klasą OcrInput, która zapewnia szerokie możliwości przygotowywania różnych formatów danych wejściowych.
Szybki start: Wykorzystaj strumień do wprowadzania danych OCR w kilka sekund
Ten przykład pokazuje natychmiastowe rozpoznawanie OCR poprzez wprowadzenie System.IO.Stream do IronOCR, pomijając ścieżki plików i pobierając rozpoznany tekst przy użyciu minimalnej 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 należy utworzyć instancję klasy IronTesseract w celu wykonania OCR. Użyj metody FromFile klasy AnyBitmap, aby zaimportować plik obrazu. Ten obiekt AnyBitmap konwertuje dane obrazu na strumień. Następnie użyj instrukcji using, aby utworzyć obiekt OcrImageInput, przekazując strumień obrazu za pomocą metody GetStream. Na koniec użyj metody Read do wykonania 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 płynnie integruje się z obiektami System.Drawing i innymi bibliotekami do obróbki obrazów.
Dłączego warto używać Streams do OCR?
Praca ze strumieniami zapewnia programistom .NET kilka korzyści:
- Efektywność pamięci: Przetwarzaj dane w kawałkach zamiast załadować całe pliki do pamięści
- Bezpieczeństwo: Przetwarzaj poufne dokumenty bez tworzenia tymczasowych plików na dysku
- Wydajność: Eliminuj narzuty I/O z operacji systemu plików
- Elastyczność: Pracuj z przesyłkami internetowymi, BLOB-ami bazy danych i transformacjami 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ść w przypadku dużych obrazów i uzyskać konkretne odczyty z określonych obszarów, należy użyć klasy CropRectangle. Konstruktor OcrImageInput przyjmuje obiekt CropRectangle jako drugi parametr, co pozwala określić, który obszar dokumentu graficznego ma zostać 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, w tym wyniki pewności, pozycjonowanie 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 wykorzystanie instancji
IronTesseract: Utwórz pojedynczą instancję i wykorzystaj ją wielokrotnie w różnych operacjach - Zastosuj śledzenie postępu: Dla dużych strumieni używaj śledzenia postępu w celu monitorowania stanu przetwarzania
- Przetwarzanie równoległe:
IronOCRobsługuje przetwarzanie równoległe dla wielu strumieni - Optymalizuj jakość obrazu: Wstępnie przetwarzaj strumienie, aby zapewnić optymalną rozdzielczość i czystość
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 resetuj pozycję strumienia do
0przed przekazaniem doIronOCR - Usuwanie: Użyj instrukcji
using, aby zapewnić prawidłowe czyszczenie zasobów - Wsparcie formatu: IronOCR obsługuje różne formaty obrazów, w tym JPEG, PNG, TIFF i BMP poprzez strumienie
- Zarządzanie pamięcią: Dla dużych strumieni rozważ przetwarzanie kawałkami 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.
Czy IronOCR można zintegrować z istniejącymi aplikacjami?
IronOCR jest zaprojektowany do łatwej integracji z istniejącymi aplikacjami używając C#, co pozwala programistom dodać funkcjonalność OCR do swojego oprogramowania z minimalnym wysiłkiem.
Jakie są korzyści z używania IronOCR do zarządzania dokumentami?
Używanie IronOCR do zarządzania dokumentami upraszcza przepływ pracy przez konwertowanie zeskanowanych dokumentów na przeszukiwalny i edytowalny tekst, redukując konieczność ręcznego wprowadzania danych i poprawiając dostępność dokumentów.
Jak IronOCR może poprawić dokładność danych?
IronOCR poprawia dokładność danych dzięki swoim zaawansowanym algorytmom rozpoznawania i funkcjom korekcji obrazów, zapewniając, że proces ekstrakcji tekstu jest zarówno niezawodny, jak i precyzyjny.
Czy dostępna jest bezpłatna wersja próbna IronOCR?
Tak, Iron Software oferuje bezpłatną wersję próbną IronOCR, umożliwiając użytkownikom przetestowanie jego funkcji i możliwości przed podjęciem decyzji o zakupie.

