Jak używać obrazów wejściowych do przetwarzania OCR w języku C#

Jak odczytywać dane ze strumieni w języku C# na potrzeby OCR

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

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.

  1. Install IronOCR with NuGet Package Manager

    PM > Install-Package IronOcr
  2. Skopiuj i uruchom ten fragment kodu.

    using var input = new IronOcr.OcrInput(stream);
    var result = new IronOcr.IronTesseract().Read(input);
  3. Wdrożenie do testowania w środowisku produkcyjnym

    Rozpocznij używanie IronOCR w swoim projekcie już dziś z darmową wersją próbną

    arrow pointer


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)
$vbLabelText   $csharpLabel

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:

  1. Efektywność pamięci: Przetwarzaj dane w fragmentach zamiast ładować całe pliki do pamięci
  2. Bezpieczeństwo: Przetwarzaj poufne dokumenty bez tworzenia plików tymczasowych na dysku
  3. Wydajność: Wyeliminuj obciążenie operacji wejścia/wyjścia związane z operacjami systemu plików
  4. 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)
$vbLabelText   $csharpLabel

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?

Demo OCR: dokument w przeglądarce zdjęć z wyodrębnionym tekstem

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
$vbLabelText   $csharpLabel

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
$vbLabelText   $csharpLabel

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
$vbLabelText   $csharpLabel

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:

  1. Ponowne użycie instancji IronTesseract: Utwórz jedną instancję i używaj jej ponownie w wielu operacjach
  2. 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
  3. Przetwarzanie równoległe: IronOCR wspiera równoczesne przetwarzanie dla wielu strumieni
  4. 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 0 przed przekazaniem do IronOCR
  • 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.

Curtis Chau
Autor tekstów technicznych

Curtis Chau posiada tytuł licencjata z informatyki (Uniwersytet Carleton) i specjalizuje się w front-endowym rozwoju, z ekspertką w Node.js, TypeScript, JavaScript i React. Pasjonuje się tworzeniem intuicyjnych i estetycznie przyjemnych interfejsów użytkownika, Curtis cieszy się pracą z nowoczesnymi frameworkami i tworzeniem dobrze zorganizowanych, atrakcyjnych wizualnie podrę...

Czytaj więcej
Sprawdzone przez
Jeff Fritz
Jeffrey T. Fritz
Główny Menedżer Programu - Zespół .NET Community
Jeff jest również Głównym Menedżerem Programu dla zespołów .NET i Visual Studio. Jest producentem wykonawczym wirtualnej serii konferencji .NET Conf i prowadzi 'Fritz and Friends', transmisję na żywo dla deweloperów emitowaną dwa razy w tygodniu, gdzie rozmawia o technologii i pisze kod razem z widzami. Jeff pisze warsztaty, prezentacje i planuje treści dla największych wydarzeń Microsoft dla deweloperów, w tym Microsoft Build, Microsoft Ignite, .NET Conf i Microsoft MVP Summit.
Gotowy, aby rozpocząć?
Nuget Pliki do pobrania 5,571,678 | Wersja: 2026.4 just released
Still Scrolling Icon

Wciąż przewijasz?

Czy chcesz szybko dowodu? PM > Install-Package IronOcr
uruchom próbkę obserwuj, jak twój obraz staje się tekstem z możliwością wyszukiwania.