IronOCRを使ってC#でテキストを画像としてハイライトする

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

IronOCRのHighlightTextAndSaveAsImagesメソッドは、検出されたテキスト(文字、単語、行、または段落)の周囲にバウンディングボックスを描画することによってOCR結果を視覚化し、診断画像として保存します。

OCR結果を視覚化するには、エンジンが画像内で検出した特定のテキスト要素の周囲にバウンディングボックスをレンダリングする必要があります。 このプロセスでは、個々の文字、単語、行、または段落の正確な位置に明確なハイライトを重ね、認識されたコンテンツの明確なマップを提供します。

この視覚的なフィードバックは、OCR出力精度のデバッグと検証に不可欠であり、ソフトウェアが何を識別し、どこでエラーを起こしたかを示します。 複雑な文書を扱うときや、認識に関する問題のトラブルシューティングを行うときには、視覚的なハイライトが不可欠な診断ツールとなります。

この記事では、IronOCRのHighlightTextAndSaveAsImagesメソッドによる診断機能を紹介します。 この機能は、テキストの特定の部分をハイライトし、確認のために画像として保存します。 文書処理システムの構築、品質管理対策の実施、OCR実装の検証のいずれにおいても、この機能は、OCRエンジンが検出した内容を即座に視覚的にフィードバックします。

クイックスタート: PDF 内の単語を即座にハイライトする

このスニペットはIronOCRの使い方を示しています: PDFを読み込み、文書内の各単語をハイライトし、結果を画像として保存します。 たった1行で、OCR結果の視覚的なフィードバックが得られます。

Nuget Icon今すぐ NuGet で PDF を作成してみましょう:

  1. NuGet パッケージ マネージャーを使用して IronOCR をインストールします

    PM > Install-Package IronOcr

  2. このコード スニペットをコピーして実行します。

    new IronOcr.OcrInput().LoadPdf("document.pdf").HighlightTextAndSaveAsImages(new IronOcr.IronTesseract(), "highlight_page_", IronOcr.ResultHighlightType.Word);
  3. 実際の環境でテストするためにデプロイする

    今すぐ無料トライアルでプロジェクトに IronOCR を使い始めましょう
    arrow pointer

テキストをハイライトして画像として保存するには?

IronOCRでテキストをハイライトし、画像として保存することは簡単です。 既存のPDFをLoadPdfで読み込み、HighlightTextAndSaveAsImagesメソッドを呼び出して、テキストの部分をハイライトし、画像として保存します。 この技術では、OCRの精度を検証し、文書内のテキスト認識の問題をデバッグします。

IronTesseractのOCRエンジン、出力ファイル名のプレフィックス、ハイライトするテキストの種類を指定するResultHighlightTypeの列挙型の3つのパラメータを受け取ります。 この例では、ResultHighlightType.Paragraphを使用して、テキストブロックを段落としてハイライトしています。

BRACKET-i-OPEN--この関数は、出力文字列の接頭辞を使用し、各ページの出力画像ファイル名にページ識別子(例えば、"page_0"、"page_1")を付加します。

この例では、3段落のPDFを使用しています。

入力PDFはどのように見えますか?

どのようにハイライトコードを実装しますか?

以下のコード例は、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);
$vbLabelText   $csharpLabel

出力画像は何を示していますか?

3つの段落があるウェブページ、真ん中の段落はテキスト選択機能を示す赤枠で強調表示.

上の出力画像に示すように、3つの段落はすべて薄い赤枠でハイライトされています。 この視覚的な表現により、開発者は、OCRエンジンが文書をどのように読みやすいブロックに分割しているかをすばやく識別することができます。

さまざまな ResultHighlightType オプションは何ですか?

上記の例では、ResultHighlightType.Paragraphを使ってテキストブロックをハイライトしています。 IronOCR はこの列挙型を通じて追加の強調表示オプションを提供します。 以下は、利用可能なタイプの完全なリストで、それぞれ診断の目的が異なります。

文字:OCRエンジンによって検出されたすべての文字の周囲にバウンディングボックスを描画します。特に、カスタム言語ファイルで作業するときに、文字認識や特殊なフォントのデバッグに便利です。

単語: エンジンによって識別された各単語をハイライトします。特にBarCodeおよびQR読み取りをテキスト認識と一緒に実装する場合に、単語の境界と適切な単語の識別を検証するのに最適です。

: 検出されたすべてのテキスト行をハイライトします。スキャンした文書を処理するときなど、行の識別検証が必要な複雑なレイアウトの文書に便利です。

段落:段落としてグループ化されたテキストブロック全体をハイライトします。テーブル抽出で作業するときに特に便利です。ドキュメントのレイアウトを理解し、テキスト ブロックのセグメンテーションを確認するのに最適です。

異なるハイライトタイプを比較するにはどうすればよいですか?

この包括的な例では、同じドキュメント上ですべての異なるタイプのハイライトを生成することを実演しており、結果を比較することができます:

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

複数ページのドキュメントはどのように扱えばよいですか?

複数ページのPDFや複数フレームのTIFFファイルを処理する場合、ハイライト機能は自動的に各ページを個別に処理します。 これは、PDF 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");
$vbLabelText   $csharpLabel

パフォーマンスのベストプラクティスは何ですか?

ハイライト機能を使用する場合は、以下のベストプラクティスを考慮してください:

1.ファイルサイズ: ハイライト画像は、特に高解像度のドキュメントの場合、サイズが大きくなる可能性があります。 大きなバッチを処理する場合は、出力ディレクトリの空き容量を考慮してください。 最適化のヒントについては、高速 OCR 設定ガイドを参照してください。

2.パフォーマンス:ハイライトの生成は、処理のオーバーヘッドを追加します。 ハイライトがたまにしか必要とされない本番システムでは、メインのワークフローの一部ではなく、別の診断プロセスとして実装してください。 バッチ処理には、マルチスレッドOCRの使用を検討してください。

3.エラー処理:ファイル操作の際には、常に適切なエラー処理を実装してください:

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

ハイライトはOCR結果とどのように統合されますか?

ハイライト機能はIronOCRの結果オブジェクトとシームレスに連携し、視覚的なハイライトと抽出されたテキストデータの関連付けを可能にします。 これは、OCRの進捗状況を追跡する必要がある場合や、認識されたテキストの特定の部分を検証する必要がある場合に特に便利です。 OcrResultクラスは、検出された各要素に関する詳細な情報を提供し、このメソッドによって生成された視覚的なハイライトに直接対応します。

問題が発生した場合はどうすればよいですか?

ハイライト機能で問題が発生した場合は、一般的なトラブルシューティング ガイドを参照してください。 特定のハイライトに関する問題

  • 空白の出力画像: 入力ドキュメントに読み取り可能なテキストが含まれており、OCRエンジンがドキュメントタイプ用に適切に設定されていることを確認してください。 認識を向上させるために、画像最適化フィルタを適用したり、画像の向きを修正したりする必要があるかもしれません。
  • Missing highlights: ドキュメントの種類によっては、特定の前処理が必要な場合があります。 画像フィルタを適用したり、画像の向きを修正したりして、認識を向上させてみてください。
  • パフォーマンスの問題:大きな文書の場合、処理速度を向上させるためにマルチスレッドの実装を検討してください。 さらに、質の低い入力で作業する場合は、低品質スキャンの修正に関するガイドを確認してください。

本番デバッグにはどのように使用できますか?

ハイライト機能は、優れた生産デバッグツールとして機能します。 abort tokens for long-running operations や timeouts と統合すれば、堅牢な診断システムを構築できます。 アプリケーションにデバッグモードを実装することを検討してください:

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

次はどこに行くべきですか?

ハイライト機能の使い方は理解できたと思います:

本番環境で使用する場合は、ライセンスを取得することを忘れないでください。

よくある質問

C#アプリケーションでOCR結果を視覚化するにはどうすればよいですか?

IronOCRはHighlightTextAndSaveAsImagesメソッドを提供し、検出されたテキスト要素(文字、単語、行、段落)の周囲にバウンディングボックスを描くことでOCR結果を視覚化し、診断画像として保存します。この機能は、開発者が OCR の精度を検証し、認識の問題をデバッグするのに役立ちます。

PDF文書内の単語をハイライトする最も簡単な方法は何ですか?

IronOCRを使えば、たった1行のコードでPDFの単語をハイライトすることができます: new IronOcr.OcrInput().LoadPdf("document.pdf").HighlightTextAndSaveAsImages(new IronOcr.IronTesseract(), "highlight_page_", IronOcr.ResultHighlightType.Word).これはPDFをロードし、ハイライトされた単語を持つ画像を作成します。

HighlightTextAndSaveAsImagesメソッドにはどのようなパラメータが必要ですか?

IronOCRのHighlightTextAndSaveAsImagesメソッドは3つのパラメーターを必要とします:IronTesseract OCRエンジンのインスタンス、出力ファイル名のプレフィックス文字列、そしてハイライトするテキスト要素(文字、単語、行、段落)を指定するResultHighlightType enum値です。

テキストハイライトを使用する場合、出力画像にはどのような名前が付けられますか。

IronOCRは指定された接頭辞とページ識別子を組み合わせて出力画像に自動的に名前を付けます。たとえば、接頭辞に "highlight_page_"を使用すると、このメソッドは文書の各ページに対して "highlight_page_0"、"highlight_page_1 "などという名前のファイルを生成します。

OCR開発でビジュアルハイライトが重要なのはなぜですか?

IronOCRのビジュアルハイライトは、OCRエンジンがどのようなテキストを検出し、どこで潜在的なエラーが発生したかを正確に表示することで、重要な診断フィードバックを提供します。このビジュアルマップは、開発者が認識問題をデバッグし、OCRの精度を検証し、複雑な文書の問題をトラブルシューティングするのに役立ちます。

単語以外のさまざまなテキスト要素をハイライトできますか?

はい、IronOCRのResultHighlightType列挙型は、個々の文字、単語、行、段落全体を含む様々なテキスト要素をハイライトすることができます。HighlightTextAndSaveAsImagesメソッドを呼び出す際に希望のタイプを指定するだけで、さまざまなレベルのテキスト検出を視覚化できます。

カーティス・チャウ
テクニカルライター

Curtis Chauは、カールトン大学でコンピュータサイエンスの学士号を取得し、Node.js、TypeScript、JavaScript、およびReactに精通したフロントエンド開発を専門としています。直感的で美しいユーザーインターフェースを作成することに情熱を持ち、Curtisは現代のフレームワークを用いた開発や、構造の良い視覚的に魅力的なマニュアルの作成を楽しんでいます。

開発以外にも、CurtisはIoT(Internet of Things)への強い関心を持ち、ハードウェアとソフトウェアの統合方法を模索しています。余暇には、ゲームをしたりDiscordボットを作成したりして、技術に対する愛情と創造性を組み合わせています。

準備はできましたか?
Nuget ダウンロード 5,299,091 | バージョン: 2025.12 リリース