Zaznaczanie tekstu jako obrazów w języku C# za pomocą IronOCR

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

Metoda HighlightTextAndSaveAsImages w IronOCR wizualizuje wyniki OCR poprzez rysowanie ramek wokół wykrytego tekstu (znaków, słów, linii, lub akapitów) i zapisuje je jako obrazy diagnostyczne, umożliwiając programistom weryfikację dokładności OCR i debugowanie problemów z rozpoznawaniem.

Wizualizacja wyników OCR polega na renderowaniu ramek wokół określonych elementów tekstowych, które silnik wykrył na obrazie. Proces ten nakłada wyraźne oznaczenia na dokładne lokalizacje poszczególnych znaków, słów, wierszy lub akapitów, zapewniając przejrzysty obraz rozpoznanej treści.

Ta wizualna informacja zwrotna ma kluczowe znaczenie dla debugowania i sprawdzania dokładności wyników OCR, pokazując, co oprogramowanie zidentyfikowało i gdzie popełniło błędy. Podczas pracy ze złożonymi dokumentami lub rozwiązywania problemów z rozpoznawaniem wizualne podświetlanie staje się niezbędnym narzędziem diagnostycznym.

Ten artykuł demonstruje możliwości diagnostyczne IronOCR za pomocą metody HighlightTextAndSaveAsImages. Ta funkcja zaznacza określone fragmenty tekstu i zapisuje je jako obrazy w celu weryfikacji. Niezależnie od tego, czy tworzysz system przetwarzania dokumentów, wdrażasz środki kontroli jakości, czy też weryfikujesz swoje wdrożenie OCR, ta funkcja zapewnia natychmiastową wizualną informację zwrotną na temat tego, co wykrywa silnik OCR.

Szybki start: Natychmiastowe zaznaczanie słów w pliku PDF

Ten fragment kodu pokazuje, jak korzystać z IronOCR: wczytuje plik PDF i zaznacza każde słowo w dokumencie, zapisując wynik jako obrazy. Wystarczy jedna linijka, aby uzyskać wizualną informację zwrotną na temat wyników OCR.

  1. Install IronOCR with NuGet Package Manager

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

    new IronOcr.OcrInput().LoadPdf("document.pdf").HighlightTextAndSaveAsImages(new IronOcr.IronTesseract(), "highlight_page_", IronOcr.ResultHighlightType.Word);
  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 zaznaczyć tekst i zapisać go jako obraz?

Zaznaczanie tekstu i zapisywanie go jako obrazów jest proste dzięki IronOCR. Załaduj istniejący PDF z LoadPdf, a następnie wywołaj metodę HighlightTextAndSaveAsImages, aby zaznaczyć sekcje tekstu i zapisać je jako obrazy. Ta technika weryfikuje dokładność OCR i usuwa błędy związane z rozpoznawaniem tekstu w dokumentach.

Metoda przyjmuje trzy parametry: silnik OCR IronTesseract, prefiks dla nazwy pliku wyjściowego oraz enum z ResultHighlightType, który określa typ tekstu do wyróżnienia. Ten przykład używa ResultHighlightType.Paragraph do wyróżnienia bloków tekstu jako akapitów.

Zwróć uwagęTa funkcja wykorzystuje prefiks ciągu znaków wyjściowego i dołącza identyfikator strony (np. "page_0", "page_1") do nazwy pliku obrazu wyjściowego dla każdej strony.

W tym przykładzie wykorzystano plik PDF zawierający trzy akapity.

Jak wygląda plik PDF do tłumaczenia?

Jak zaimplementować kod podświetlania?

Poniższy przykładowy kod ilustruje podstawową implementację z wykorzystaniem klasy OcrInput.

:path=/static-assets/ocr/content-code-examples/how-to/highlight-texts-as-images.cs
using IronOcr;

IronTesseract ocrTesseract = new IronTesseract();

using var ocrInput = new OcrInput();
ocrInput.LoadPdf("document.pdf");
ocrInput.HighlightTextAndSaveAsImages(ocrTesseract, "highlight_page_", ResultHighlightType.Paragraph);
Imports IronOcr

Private ocrTesseract As New IronTesseract()

Private ocrInput = New OcrInput()
ocrInput.LoadPdf("document.pdf")
ocrInput.HighlightTextAndSaveAsImages(ocrTesseract, "highlight_page_", ResultHighlightType.Paragraph)
$vbLabelText   $csharpLabel

Co pokazują obrazy wyjściowe?

Strona internetowa zawierająca trzy akapity, środkowy akapit wyróżniony czerwoną ramką pokazujący możliwość zaznaczania tekstu

Jak widać na powyższym obrazku, wszystkie trzy akapity zostały zaznaczone jasnoczerwonym ramkiem. Ta wizualna reprezentacja pomaga programistom szybko zidentyfikować, w jaki sposób silnik OCR dzieli dokument na czytelne bloki.

Jakie są różne opcje ResultHighlightType?

Powyższy przykład użył ResultHighlightType.Paragraph do wyróżnienia bloków tekstu. IronOCR zapewnia dodatkowe opcje podświetlania za pośrednictwem tej enum. Poniżej znajduje się pełna lista dostępnych typów, z których każdy służy do innych celów diagnostycznych.

Znak: Rysuje ramkę wokół każdego znaku wykrytego przez silnik OCR. Przydatne do debugowania rozpoznawania znaków lub specjalistycznych czcionek, szczególnie podczas pracy z niestandardowymi plikami językowymi.

Word: Podkreśla każde kompletne słowo zidentyfikowane przez silnik. Idealne do sprawdzania granic słów i prawidłowej identyfikacji słów, zwłaszcza podczas wdrażania odczytu BarCode i QR wraz z rozpoznawaniem tekstu.

Linia: Podświetla każdą wykrytą linię tekstu. Przydatne w przypadku dokumentów o złożonym układzie, wymagających weryfikacji identyfikacji linii, np. podczas przetwarzania dokumentów zeskanowanych.

Akapit: Podkreśla całe bloki tekstu zgrupowane w akapity. Idealne do zrozumienia układu dokumentu i weryfikacji podziału na bloki tekstowe, szczególnie przydatne podczas pracy z ekstrakcją tabel.

Jak porównać różne typy podświetleń?

Ten obszerny przykład pokazuje generowanie zaznaczeń dla wszystkich różnych typów w tym samym dokumencie, co pozwala porównać wyniki:

using IronOcr;
using System;

// Initialize the OCR engine with custom configuration
IronTesseract ocrTesseract = new IronTesseract();

// Configure for better accuracy if needed
ocrTesseract.Configuration.ReadBarCodes = false; // Disable if not needed for performance
ocrTesseract.Configuration.PageSegmentationMode = TesseractPageSegmentationMode.AutoOsd;

// Load the PDF document
using var ocrInput = new OcrInput();
ocrInput.LoadPdf("document.pdf");

// Generate highlights for each type
Console.WriteLine("Generating character-level highlights...");
ocrInput.HighlightTextAndSaveAsImages(ocrTesseract, "highlight_character_", ResultHighlightType.Character);

Console.WriteLine("Generating word-level highlights...");
ocrInput.HighlightTextAndSaveAsImages(ocrTesseract, "highlight_word_", ResultHighlightType.Word);

Console.WriteLine("Generating line-level highlights...");
ocrInput.HighlightTextAndSaveAsImages(ocrTesseract, "highlight_line_", ResultHighlightType.Line);

Console.WriteLine("Generating paragraph-level highlights...");
ocrInput.HighlightTextAndSaveAsImages(ocrTesseract, "highlight_paragraph_", ResultHighlightType.Paragraph);

Console.WriteLine("All highlight images have been generated successfully!");
using IronOcr;
using System;

// Initialize the OCR engine with custom configuration
IronTesseract ocrTesseract = new IronTesseract();

// Configure for better accuracy if needed
ocrTesseract.Configuration.ReadBarCodes = false; // Disable if not needed for performance
ocrTesseract.Configuration.PageSegmentationMode = TesseractPageSegmentationMode.AutoOsd;

// Load the PDF document
using var ocrInput = new OcrInput();
ocrInput.LoadPdf("document.pdf");

// Generate highlights for each type
Console.WriteLine("Generating character-level highlights...");
ocrInput.HighlightTextAndSaveAsImages(ocrTesseract, "highlight_character_", ResultHighlightType.Character);

Console.WriteLine("Generating word-level highlights...");
ocrInput.HighlightTextAndSaveAsImages(ocrTesseract, "highlight_word_", ResultHighlightType.Word);

Console.WriteLine("Generating line-level highlights...");
ocrInput.HighlightTextAndSaveAsImages(ocrTesseract, "highlight_line_", ResultHighlightType.Line);

Console.WriteLine("Generating paragraph-level highlights...");
ocrInput.HighlightTextAndSaveAsImages(ocrTesseract, "highlight_paragraph_", ResultHighlightType.Paragraph);

Console.WriteLine("All highlight images have been generated successfully!");
Imports IronOcr
Imports System

' Initialize the OCR engine with custom configuration
Dim ocrTesseract As New IronTesseract()

' Configure for better accuracy if needed
ocrTesseract.Configuration.ReadBarCodes = False ' Disable if not needed for performance
ocrTesseract.Configuration.PageSegmentationMode = TesseractPageSegmentationMode.AutoOsd

' Load the PDF document
Using ocrInput As New OcrInput()
    ocrInput.LoadPdf("document.pdf")

    ' Generate highlights for each type
    Console.WriteLine("Generating character-level highlights...")
    ocrInput.HighlightTextAndSaveAsImages(ocrTesseract, "highlight_character_", ResultHighlightType.Character)

    Console.WriteLine("Generating word-level highlights...")
    ocrInput.HighlightTextAndSaveAsImages(ocrTesseract, "highlight_word_", ResultHighlightType.Word)

    Console.WriteLine("Generating line-level highlights...")
    ocrInput.HighlightTextAndSaveAsImages(ocrTesseract, "highlight_line_", ResultHighlightType.Line)

    Console.WriteLine("Generating paragraph-level highlights...")
    ocrInput.HighlightTextAndSaveAsImages(ocrTesseract, "highlight_paragraph_", ResultHighlightType.Paragraph)
End Using

Console.WriteLine("All highlight images have been generated successfully!")
$vbLabelText   $csharpLabel

Jak postępować w przypadku dokumentów wielostronicowych?

Podczas przetwarzania wielostronicowych plików PDF lub plików TIFF zawierających wiele klatek funkcja podświetlania automatycznie obsługuje każdą stronę z osobna. Jest to szczególnie przydatne podczas wdrażania procesów ekstrakcji tekstu z plików PDF za pomocą OCR:

using IronOcr;
using System.IO;

IronTesseract ocrTesseract = new IronTesseract();

// Load a multi-page document
using var ocrInput = new OcrInput();
ocrInput.LoadPdf("multi-page-document.pdf");

// Create output directory if it doesn't exist
string outputDir = "highlighted_pages";
Directory.CreateDirectory(outputDir);

// Generate highlights for each page
// Files will be named: highlighted_pages/page_0.png, page_1.png, etc.
ocrInput.HighlightTextAndSaveAsImages(ocrTesseract, 
    Path.Combine(outputDir, "page_"), 
    ResultHighlightType.Word);

// Count generated files for verification
int pageCount = Directory.GetFiles(outputDir, "page_*.png").Length;
Console.WriteLine($"Generated {pageCount} highlighted page images");
using IronOcr;
using System.IO;

IronTesseract ocrTesseract = new IronTesseract();

// Load a multi-page document
using var ocrInput = new OcrInput();
ocrInput.LoadPdf("multi-page-document.pdf");

// Create output directory if it doesn't exist
string outputDir = "highlighted_pages";
Directory.CreateDirectory(outputDir);

// Generate highlights for each page
// Files will be named: highlighted_pages/page_0.png, page_1.png, etc.
ocrInput.HighlightTextAndSaveAsImages(ocrTesseract, 
    Path.Combine(outputDir, "page_"), 
    ResultHighlightType.Word);

// Count generated files for verification
int pageCount = Directory.GetFiles(outputDir, "page_*.png").Length;
Console.WriteLine($"Generated {pageCount} highlighted page images");
Imports IronOcr
Imports System.IO

Dim ocrTesseract As New IronTesseract()

' Load a multi-page document
Using ocrInput As New OcrInput()
    ocrInput.LoadPdf("multi-page-document.pdf")

    ' Create output directory if it doesn't exist
    Dim outputDir As String = "highlighted_pages"
    Directory.CreateDirectory(outputDir)

    ' Generate highlights for each page
    ' Files will be named: highlighted_pages/page_0.png, page_1.png, etc.
    ocrInput.HighlightTextAndSaveAsImages(ocrTesseract, 
                                          Path.Combine(outputDir, "page_"), 
                                          ResultHighlightType.Word)

    ' Count generated files for verification
    Dim pageCount As Integer = Directory.GetFiles(outputDir, "page_*.png").Length
    Console.WriteLine($"Generated {pageCount} highlighted page images")
End Using
$vbLabelText   $csharpLabel

Jakie są najlepsze praktyki dotyczące wydajności?

Korzystając z funkcji wyróżniania, należy wziąć pod uwagę następujące najlepsze praktyki:

  1. Rozmiar pliku: Podświetlone obrazy mogą być duże, zwłaszcza w przypadku dokumentów o wysokiej rozdzielczości. Podczas przetwarzania dużych partii należy wziąć pod uwagę dostępną przestrzeń w katalogu wyjściowym. Wskazówki dotyczące optymalizacji znajdziesz w naszym przewodniku po szybkiej konfiguracji OCR.

  2. Wydajność: Generowanie podświetleń powoduje dodatkowe obciążenie procesora. W przypadku systemów produkcyjnych, w których podświetlanie jest potrzebne tylko sporadycznie, należy wdrożyć je jako oddzielny proces diagnostyczny, a nie jako część głównego przepływu pracy. Rozważ użycie wielowątkowego OCR do przetwarzania wsadowego.

  3. Obsługa błędów: Podczas pracy z operacjami na plikach zawsze należy wdrażać odpowiednią obsługę błędów:
try
{
    using var ocrInput = new OcrInput();
    ocrInput.LoadPdf("document.pdf");

    // Apply image filters if needed for better recognition
    ocrInput.Deskew(); // Correct slight rotations
    ocrInput.DeNoise(); // Remove background noise

    ocrInput.HighlightTextAndSaveAsImages(ocrTesseract, "highlight_", ResultHighlightType.Word);
}
catch (Exception ex)
{
    Console.WriteLine($"Error during highlighting: {ex.Message}");
    // Log error details for debugging
}
try
{
    using var ocrInput = new OcrInput();
    ocrInput.LoadPdf("document.pdf");

    // Apply image filters if needed for better recognition
    ocrInput.Deskew(); // Correct slight rotations
    ocrInput.DeNoise(); // Remove background noise

    ocrInput.HighlightTextAndSaveAsImages(ocrTesseract, "highlight_", ResultHighlightType.Word);
}
catch (Exception ex)
{
    Console.WriteLine($"Error during highlighting: {ex.Message}");
    // Log error details for debugging
}
Imports System

Try
    Using ocrInput As New OcrInput()
        ocrInput.LoadPdf("document.pdf")

        ' Apply image filters if needed for better recognition
        ocrInput.Deskew() ' Correct slight rotations
        ocrInput.DeNoise() ' Remove background noise

        ocrInput.HighlightTextAndSaveAsImages(ocrTesseract, "highlight_", ResultHighlightType.Word)
    End Using
Catch ex As Exception
    Console.WriteLine($"Error during highlighting: {ex.Message}")
    ' Log error details for debugging
End Try
$vbLabelText   $csharpLabel

W jaki sposób podświetlanie integruje się z wynikami OCR?

Funkcja podświetlania działa płynnie z obiektami wynikowymi IronOCR, umożliwiając korelację wizualnych podświetleń z wyodrębnionymi danymi tekstowymi. Jest to szczególnie przydatne, gdy trzeba track OCR progress lub zweryfikować konkretne sekcje rozpoznanego tekstu. Klasa OcrResult dostarcza szczegółowych informacji o każdym wykrytym elemencie, co bezpośrednio odpowiada wizualnym wyróżnieniom generowanym przez tę metodę.

Co zrobić, jeśli napotkam problemy?

W przypadku problemów z funkcją podświetlania zapoznaj się z ogólnym przewodnikiem rozwiązywania problemów, aby znaleźć typowe rozwiązania. W przypadku konkretnych problemów związanych z wyróżnieniem:

  • Puste obrazy wyjściowe: Upewnij się, że dokument wejściowy zawiera czytelny tekst oraz że silnik OCR jest prawidłowo skonfigurowany dla danego typu dokumentu. Możesz potrzebować zastosować filtry optymalizacji obrazów lub fixing image orientation, aby poprawić rozpoznawanie.
  • Brakujące informacje: Niektóre typy dokumentów mogą wymagać specjalnego przetwarzania wstępnego. Spróbuj zastosować filtry do obrazów lub fixing image orientation, aby poprawić rozpoznawanie.
  • Problemy z wydajnością: Dla dużych dokumentów rozważ wdrożenie multithreading, aby poprawić szybkość przetwarzania. Dodatkowo, jeśli pracujesz z materiałami wejściowymi o niskiej jakości, zapoznaj się z naszym przewodnikiem dotyczącym poprawiania skanów o niskiej jakości.

Jak mogę to wykorzystać do debugowania w środowisku produkcyjnym?

Funkcja podświetlania stanowi doskonałe narzędzie do debugowania w środowisku produkcyjnym. Po zintegrowaniu z tokenami przerwania dla długotrwałych operacji i limitów czasu można stworzyć solidny system diagnostyczny. Rozważ wdrożenie trybu debugowania w swojej aplikacji:

public class OcrDebugger
{
    private readonly IronTesseract _tesseract;
    private readonly bool _debugMode;

    public OcrDebugger(bool enableDebugMode = false)
    {
        _tesseract = new IronTesseract();
        _debugMode = enableDebugMode;
    }

    public OcrResult ProcessDocument(string filePath)
    {
        using var input = new OcrInput();
        input.LoadPdf(filePath);

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

        // Generate debug highlights if in debug mode
        if (_debugMode)
        {
            string debugPath = $"debug_{Path.GetFileNameWithoutExtension(filePath)}_";
            input.HighlightTextAndSaveAsImages(_tesseract, debugPath, ResultHighlightType.Word);
        }

        // Perform actual OCR
        return _tesseract.Read(input);
    }
}
public class OcrDebugger
{
    private readonly IronTesseract _tesseract;
    private readonly bool _debugMode;

    public OcrDebugger(bool enableDebugMode = false)
    {
        _tesseract = new IronTesseract();
        _debugMode = enableDebugMode;
    }

    public OcrResult ProcessDocument(string filePath)
    {
        using var input = new OcrInput();
        input.LoadPdf(filePath);

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

        // Generate debug highlights if in debug mode
        if (_debugMode)
        {
            string debugPath = $"debug_{Path.GetFileNameWithoutExtension(filePath)}_";
            input.HighlightTextAndSaveAsImages(_tesseract, debugPath, ResultHighlightType.Word);
        }

        // Perform actual OCR
        return _tesseract.Read(input);
    }
}
Imports System.IO

Public Class OcrDebugger
    Private ReadOnly _tesseract As IronTesseract
    Private ReadOnly _debugMode As Boolean

    Public Sub New(Optional enableDebugMode As Boolean = False)
        _tesseract = New IronTesseract()
        _debugMode = enableDebugMode
    End Sub

    Public Function ProcessDocument(filePath As String) As OcrResult
        Using input As New OcrInput()
            input.LoadPdf(filePath)

            ' Apply preprocessing
            input.Deskew()
            input.DeNoise()

            ' Generate debug highlights if in debug mode
            If _debugMode Then
                Dim debugPath As String = $"debug_{Path.GetFileNameWithoutExtension(filePath)}_"
                input.HighlightTextAndSaveAsImages(_tesseract, debugPath, ResultHighlightType.Word)
            End If

            ' Perform actual OCR
            Return _tesseract.Read(input)
        End Using
    End Function
End Class
$vbLabelText   $csharpLabel

Co dalej?

Teraz, gdy już wiesz, jak korzystać z funkcji podświetlania, zapoznaj się z:

Dla zastosowania w produkcji, pamiętaj, aby uzyskać licencję, aby usunąć znaki wodne i mieć pełen dostęp do funkcjonalności.

Często Zadawane Pytania

Jak moge wizualizowac wyniki OCR w mojej aplikacji C#?

IronOCR dostarcza metode HighlightTextAndSaveAsImages, ktora wizualizuje wyniki OCR poprzez rysowanie ramek wokol wykrytych elementow tekstowych (znakow, slow, linii lub akapitow) i zapisuje je jako obrazy diagnostyczne. Ta funkcja pomaga deweloperom w walidacji dokladnosci OCR i debugowaniu problemow z rozpoznawaniem.

Jaki jest najprostszy sposob na podswietlenie slow w dokumencie PDF?

Z IronOCR mozesz podswietlac slowa w PDF za pomoca jednej linii kodu: new IronOcr.OcrInput().LoadPdf("document.pdf").HighlightTextAndSaveAsImages(new IronOcr.IronTesseract(), "highlight_page_", IronOcr.ResultHighlightType.Word). To laduje PDF i tworzy obrazy z podswietlonymi slowami.

Jakie parametry wymaga metoda HighlightTextAndSaveAsImages?

Metoda HighlightTextAndSaveAsImages w IronOCR wymaga trzech parametrów: instancji silnika OCR IronTesseract, ciagu prefiksu dla nazwy pliku wyjsciowego oraz wartosci enum ResultHighlightType, ktora okresla jakie elementy tekstowe podswietlic (Character, Word, Line, lub Paragraph).

Jak sa nazwane obrazy wyjsciowe podczas uzywania podswietlania tekstu?

IronOCR automatycznie nazywa obrazy wyjsciowe, laczac podany przez ciebie prefiks z identyfikatorem strony. Na przyklad, jesli uzywasz "highlight_page_" jako prefiksu, metoda generuje pliki nazwane "highlight_page_0", "highlight_page_1", itd., dla kazdej strony twojego dokumentu.

Dlaczego wizualne podswietlenie jest wazne dla rozwoju OCR?

Wizualne podswietlenie w IronOCR dostarcza kluczowych informacji diagnostycznych, pokazujac dokladnie jaki tekst wykryl silnik OCR i gdzie wystepuja potencjalne bledy. Ta wizualna mapa pomaga deweloperom debugowac problemy z rozpoznawaniem, walidowac dokladnosc OCR i rozwiązywać problemy w złożonych dokumentach.

Czy moge podswietlic inne rodzaje elementow tekstowych poza slowami?

Tak, enum ResultHighlightType w IronOCR pozwala ci podswietlic rozne elementy tekstowe, wlaczajac poszczegolne Znaki, Slowa, Linie lub cale Akapity. Wystarczy okreslic pozadany typ podczas wywolania metody HighlightTextAndSaveAsImages, aby zwizualizowac rozne poziomy wykrywania tekstu.

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
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.