高度な読み取りのためのOCR設定

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

IronOCRは、標準的なOCRの枠を超えた、ReadPhotoといった高度なスキャン読み取り機能を提供します。 これらのメソッドは、IronOcr.Extensions.AdvancedScan パッケージによって提供されています。 これらのメソッドによるテキスト処理を微調整するため、IronOCRはTesseractConfigurationクラスを公開しており、開発者は文字のホワイトリスト登録、ブラックリスト登録、BarCode検出、データテーブルの読み取りなどを完全に制御できます。

この記事では、詳細な解説として利用可能な TesseractConfiguration プロパティと、実際のシナリオにおける OCR の設定に関する実践的な例について解説します。

クイックスタート: OCR出力を許可文字リストに制限する

Read を呼び出す前に、TesseractConfigurationWhiteListCharacters を設定してください。 ホワイトリストに含まれていない文字は、結果から自動的に除外されます。これにより、後処理を必要とせずに不要な情報を排除します。

  1. IronOCR をNuGetパッケージマネージャでインストール

    PM > Install-Package IronOcr
  2. このコード スニペットをコピーして実行します。

    var result = new IronTesseract() { Configuration = new TesseractConfiguration { WhiteListCharacters = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789- " } }.Read(new OcrInput("image.png")); Console.WriteLine(result.Text);
  3. 実際の環境でテストするためにデプロイする

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

    arrow pointer


TesseractConfiguration プロパティ

TesseractConfiguration クラスは、OCR の動作をカスタマイズするための以下のプロパティを提供します。 これらは IronTesseract.Co/nfiguration を通じて設定されます。

プロパティ タイプ 説明
許可文字 string OCR出力では、この文字列に含まれる文字のみが認識されます。それ以外の文字はすべて除外されます。
BlackListCharacters string この文字列に含まれる文字は、OCR出力から意図的に無視され、削除されます。
ReadBarCodes bool OCR処理中に、ドキュメント内のBarCode検出を有効または無効にします。
ReadDataTables bool Tesseract を使用して、ドキュメント内の表構造の検出を有効または無効にします。
PageSegmentationMode TesseractPageSegmentationMode Tesseractが入力画像をどのようにセグメント化するかを決定します。オプションには AutoOsd, Auto, SingleBlock, SingleLine, SingleWord、などがあります。
RenderSearchablePdf bool 有効にすると、OCR出力は、非表示のテキストレイヤーを含む検索可能なPDFとして保存できます。
RenderHocr bool 有効にすると、OCR出力には、さらなる処理やエクスポートのためのhOCRデータが含まれます。
TesseractVariables Dictionary<string, object> Tesseractの低レベルな設定変数に直接アクセスし、きめ細かな制御を可能にします。

TesseractVariables 辞書はさらに一歩進んで、高レベルのプロパティだけでは不十分な場合に備え、Tesseract エンジンの基盤となる数百ものパラメータを公開しています。

以下の例は、文字のホワイトリスト設定から始まり、各プロパティグループを示しています。

ナンバープレートの文字ホワイトリストの設定

WhiteListCharactersの一般的な使用例として、OCRの出力をナンバープレートに表示可能な文字(大文字、数字、ハイフン、スペース)のみに制限することが挙げられます。 これにより、想定される文字セット以外のものをエンジンが無視するよう指示することで、不要な情報を排除し、精度を向上させます。

入力

以下の車両登録記録には、大文字、小文字、特殊記号(#|, *)、および句読点。

OCRホワイトリストのデモ用、文字種が混在する車両登録記録

BlackListCharacters は、,~@@- のような既知のノイズ記号を積極的に除外することで、ホワイトリストを補完します。-CODE-162--@@@, and*` などの既知のノイズ記号を積極的に除外することで、ホワイトリストを補完します。

:path=/static-assets/ocr/content-code-examples/how-to/ocr-configurations-for-advanced-reading.cs
using IronOcr;

// Initialize the Tesseract OCR engine
IronTesseract ocr = new IronTesseract();

ocr.Configuration = new TesseractConfiguration
{
    // Whitelist only characters that appear on license plates
    WhiteListCharacters = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789- ",

    // Blacklist common noise characters
    BlackListCharacters = "`~@#$%&*",
};

var ocrInput = new OcrInput();
// Load the input image
ocrInput.LoadImage("advanced-input.png");
// Perform OCR on the input image with ReadPhoto method
var results = ocr.ReadPhoto(ocrInput);

// Print the filtered text result to the console
Console.WriteLine(results.Text);
Imports IronOcr

' Initialize the Tesseract OCR engine
Dim ocr As New IronTesseract()

ocr.Configuration = New TesseractConfiguration With {
    ' Whitelist only characters that appear on license plates
    .WhiteListCharacters = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789- ",
    
    ' Blacklist common noise characters
    .BlackListCharacters = "`~@#$%&*"
}

Dim ocrInput As New OcrInput()
' Load the input image
ocrInput.LoadImage("advanced-input.png")
' Perform OCR on the input image with ReadPhoto method
Dim results = ocr.ReadPhoto(ocrInput)

' Print the filtered text result to the console
Console.WriteLine(results.Text)
$vbLabelText   $csharpLabel

出力

ホワイトリストに登録されたナンバープレートの文字のみを表示するOCR出力

ホワイトリストによるフィルタリングの結果は、以下のように明確に確認できます:

  • "Plate: ABC-1234""P ABC-1234"となります。 小文字の"late:"は省略し、プレート番号は正確に保持します。
  • "VIN: 1HGBH41JXMN109186""VIN 1HGBH41JXMN109186"となります。 コロンは省略されますが、大文字のVINおよび数字はそのまま残します。
  • "Owner: john.doe@email.com"は"O"となります。 メール本文の全小文字表記および句読点は削除されています。
  • "地域: CA-90210" | "Zone #5"は"R CA-90210 Z 5"となります****。 パイプ(|) and hash (#) は削除され、大文字のアルファベットと数字はそのまま残されます。
  • "Fee: $125.00 + tax*""F 12500"となります。 ドル記号、小数点、プラス記号、および小文字の"tax"はすべて削除されています。
  • "Ref: ~record_v2^final"は"R 2"となります。 チルダ (~)、アンダースコア、キャレット (^)、およびすべて小文字の文字は削除されます。

WhiteListCharacters および BlackListCharacters と同様のアプローチは、ナンバープレートだけでなく、あらゆる種類の文書に適用可能です。 次のセクションでは、1回の処理でバーコードと表構造を検出するように読み取り機能を拡張する方法について説明します。

BarCodeおよびデータテーブルの読み取り設定

IronOCRは、テキストに加え、文書内のBARCODEや構造化された表も検出できます。 これらの機能は TesseractConfiguration を通じて制御されます:

IronTesseract ocr = new IronTesseract();

ocr.Co/nfiguration = new TesseractConfiguration
{
    // Enable barcode detection within documents
    ReadBarCodes = true,

    // Enable table structure detection
    ReadDataTables = true,
};
IronTesseract ocr = new IronTesseract();

ocr.Co/nfiguration = new TesseractConfiguration
{
    // Enable barcode detection within documents
    ReadBarCodes = true,

    // Enable table structure detection
    ReadDataTables = true,
};
Dim ocr As New IronTesseract()

ocr.Configuration = New TesseractConfiguration With {
    .ReadBarCodes = True,
    .ReadDataTables = True
}
$vbLabelText   $csharpLabel
  • ReadBarCodes: true に設定すると、IronOCR はテキストに加えて、ドキュメント内の BarCode もスキャンします。 BARCODEが想定されない場合は、false に設定してBARCODE検出をスキップし、処理を高速化してください。
  • ReadDataTables: true に設定すると、Tesseract はドキュメント内の表構造を検出し、維持しようとします。 これは、請求書、レポート、その他の表形式の文書に役立ちます。

これらのオプションは、BlackListCharactersと組み合わせて使用することで、複雑なドキュメントから抽出する内容を精密に制御できます。

抽出対象の選定はフィルタリングと検出によって制御されますが、レイアウトの解釈はこれとは別の課題となります。 次のセクションでは、ドキュメントの種類に応じて適切な PageSegmentationMode を選択する方法について説明します。

ページ分割モードの制御

PageSegmentationMode は、認識前に入力画像をどのようにセグメント化すべきかを Tesseract に指示します。 特定のレイアウトに対して誤ったモードを選択すると、エンジンがテキストを読み間違えたり、完全にスキップしたりする原因となります。

モード ユースケース
AutoOsd 向きとスクリプトの検出を伴う自動レイアウト解析
Auto OSDを使用しない自動レイアウト解析(デフォルト)
SingleColumn 画像は1列のテキストであると想定します
SingleBlock 画像は単一の均一なテキストブロックであると仮定します
SingleLine 画像は1行のテキストであると仮定します
SparseText 可能な限り多くのテキストを、順序を問わず抽出します

1行のみのラベルやバナーの場合、SingleLineを使用することで、複数ブロックにわたる解析が不要となり、処理速度と精度の両方が向上します。

入力

single-line-label.png は、太字のCourierフォントで書かれた1行のみのテキスト(SHIPPING LABEL: TRK-2024-XR9-001)が記載された細長い配送ラベルです。

OCRのSingleLineセグメンテーションモード用単一行配送ラベル
IronTesseract ocr = new IronTesseract();

ocr.Co/nfiguration = new TesseractConfiguration
{
    PageSegmentationMode = TesseractPageSegmentationMode.SingleLine,
};

using OcrInput input = new OcrInput();
input.LoadImage("single-line-label.png");

OcrResult result = ocr.Read(input);
Console.WriteLine(result.Text);
IronTesseract ocr = new IronTesseract();

ocr.Co/nfiguration = new TesseractConfiguration
{
    PageSegmentationMode = TesseractPageSegmentationMode.SingleLine,
};

using OcrInput input = new OcrInput();
input.LoadImage("single-line-label.png");

OcrResult result = ocr.Read(input);
Console.WriteLine(result.Text);
Imports IronOcr

Dim ocr As New IronTesseract()

ocr.Configuration = New TesseractConfiguration With {
    .PageSegmentationMode = TesseractPageSegmentationMode.SingleLine
}

Using input As New OcrInput()
    input.LoadImage("single-line-label.png")

    Dim result As OcrResult = ocr.Read(input)
    Console.WriteLine(result.Text)
End Using
$vbLabelText   $csharpLabel

テキストの配置が不規則なスキャンページの場合、Autoよりも多くのコンテンツを復元します。

入力

receipt-scan.png は、4つの明細(コーヒー、マフィン、ジュース、グラノーラバー)、破線の区切り線、小計、税額、合計が記載された、Corner Marketのサーマルレシートです。 これは、固定ブロック分割では水平方向の異なる位置にある項目が抜け落ちてしまうようなレイアウトです。

OCR用サーマルレシート(SparseTextセグメンテーションモード)
IronTesseract ocr = new IronTesseract();

ocr.Co/nfiguration = new TesseractConfiguration
{
    PageSegmentationMode = TesseractPageSegmentationMode.SparseText,
};

using OcrInput input = new OcrInput();
input.LoadImage("receipt-scan.png");

OcrResult result = ocr.Read(input);
Console.WriteLine(result.Text);
IronTesseract ocr = new IronTesseract();

ocr.Co/nfiguration = new TesseractConfiguration
{
    PageSegmentationMode = TesseractPageSegmentationMode.SparseText,
};

using OcrInput input = new OcrInput();
input.LoadImage("receipt-scan.png");

OcrResult result = ocr.Read(input);
Console.WriteLine(result.Text);
Imports IronOcr

Dim ocr As New IronTesseract()

ocr.Configuration = New TesseractConfiguration With {
    .PageSegmentationMode = TesseractPageSegmentationMode.SparseText
}

Using input As New OcrInput()
    input.LoadImage("receipt-scan.png")

    Dim result As OcrResult = ocr.Read(input)
    Console.WriteLine(result.Text)
End Using
$vbLabelText   $csharpLabel

ドキュメントの種類に合わせてレイアウトの分割を調整した後、次のステップは、後続の処理に向けた出力形式を制御することです。

検索可能なPDFおよびhOCR出力の生成

RenderSearchablePdf および RenderHocr は、IronOCRがプレーンテキストの結果と共に生成する出力形式を制御します。

RenderSearchablePdf、元の画像の上に非表示のテキストレイヤーを埋め込み、スキャンした画像はそのまま表示されたまま、ユーザーがテキストを検索・コピーできるPDFを生成します。 これは、ドキュメントのアーカイブワークフローにおける標準的な出力形式です。

入力

scanned-document.pdf は、IronOCR Solutions Ltd. からの 1 ページのビジネスレターです(日付:2024年3月15日、参照番号:DOC-2024-OCR-0315)。 結果は searchable-output.pdf として保存されます。

IronTesseract ocr = new IronTesseract();

ocr.Co/nfiguration = new TesseractConfiguration
{
    RenderSearchablePdf = true,
};

using OcrInput input = new OcrInput();
input.LoadPdf("scanned-document.pdf");

OcrResult result = ocr.Read(input);
result.SaveAsSearchablePdf("searchable-output.pdf");
IronTesseract ocr = new IronTesseract();

ocr.Co/nfiguration = new TesseractConfiguration
{
    RenderSearchablePdf = true,
};

using OcrInput input = new OcrInput();
input.LoadPdf("scanned-document.pdf");

OcrResult result = ocr.Read(input);
result.SaveAsSearchablePdf("searchable-output.pdf");
Imports IronTesseract

Dim ocr As New IronTesseract()

ocr.Configuration = New TesseractConfiguration With {
    .RenderSearchablePdf = True
}

Using input As New OcrInput()
    input.LoadPdf("scanned-document.pdf")

    Dim result As OcrResult = ocr.Read(input)
    result.SaveAsSearchablePdf("searchable-output.pdf")
End Using
$vbLabelText   $csharpLabel

出力

出力は、入力と見た目は全く同じですが、隠しテキストレイヤーを含むPDFとなります。 searchable-output.pdf を開き、Ctrl+F を使用して、埋め込まれたテキストが検索およびコピー可能であることを確認してください。

RenderHocr 、hOCRドキュメントを生成します。これは、テキストコンテンツと、各単語のバウンディングボックスの座標をエンコードしたHTMLファイルです。 これは、レダクションエンジンやドキュメントレイアウト分析など、下流のツールでWORDの位置情報の正確さが求められる場合に役立ちます。

入力

document-page.png は、"2024年第1四半期 四半期概要"という見出しが付いたドキュメントページであり、収益、営業費用、成長要因に関する財務データが2段落にわたって記載されています。 結果は output.html として保存されます。

hOCRのバウンディングボックス出力に対するドキュメントページの入力
IronTesseract ocr = new IronTesseract();

ocr.Co/nfiguration = new TesseractConfiguration
{
    RenderHocr = true,
};

using OcrInput input = new OcrInput();
input.LoadImage("document-page.png");

OcrResult result = ocr.Read(input);
result.SaveAsHocrFile("output.html");
IronTesseract ocr = new IronTesseract();

ocr.Co/nfiguration = new TesseractConfiguration
{
    RenderHocr = true,
};

using OcrInput input = new OcrInput();
input.LoadImage("document-page.png");

OcrResult result = ocr.Read(input);
result.SaveAsHocrFile("output.html");
Imports IronTesseract

Dim ocr As New IronTesseract()

ocr.Configuration = New TesseractConfiguration With {
    .RenderHocr = True
}

Using input As New OcrInput()
    input.LoadImage("document-page.png")

    Dim result As OcrResult = ocr.Read(input)
    result.SaveAsHocrFile("output.html")
End Using
$vbLabelText   $csharpLabel

出力

output.html は、認識された各 WORD をそのバウンディングボックスの座標とともにエンコードします。 ブラウザでファイルを開いて hOCR 構造を確認するか、レイアウト分析や編集のために下流のツールに渡してください。

1回の読み取り呼び出しで3つの出力形式(プレーンテキスト、検索可能なPDF、hOCR)すべてが必要な場合は、両方のフラグを同時に有効にできます。

これらの出力フラグは、非ラテン文字を含む、読み取り対象の言語とは独立して機能します。次のセクションでは、日本語テキストに文字フィルタリングを適用する方法について説明します。

国際文書向けのUnicode文字フィルタリング

中国語、日本語、または韓国語の国際向けドキュメントでは、WhiteListCharacters および BlackListCharacters プロパティは Unicode 文字に対応しています。 これにより、日本語の場合はひらがなとカタカナのみに限定するなど、出力文字セットを特定の文字セットに制限することができます。

ご注意 作業を進める前に、対応する言語パック(例:IronOcr.Languages.Japanese)がインストールされていることを確認してください。

入力

この文書には、タイトル(テスト)、平仮名とカタカナが混在し有声化記号(プ、で)を含む日本語の文、ブラックリストに登録された記号(★、 ■)と漢字(価格)を含む価格行、および別のブラックリスト対象記号(§)、さらに漢字(購入)、追加の有声化記号(プ、デ)、基本カタカナ(メモ、ール)を含むメモ行で構成されています。 ホワイトリストには、基本ひらがな、基本カタカナ、数字、および一般的な日本語の句読点のみが許可されます; 3つのノイズ記号は明示的に使用禁止です。

OCRの詳細設定 日本語入力

ひらがなとカタカナのUnicode文字範囲はBlackListCharactersにリストされています。

警告 コンソールでは、Unicode 文字の表示に対応していない可能性があります。 (このような文字を扱う場合、出力を.txtファイルにリダイレクトすることは、結果を確認するための確実な方法です。)}]

:path=/static-assets/ocr/content-code-examples/how-to/ocr-configurations-for-advanced-reading-jp.cs
using IronOcr;
using System.IO;

IronTesseract ocr = new IronTesseract();

ocr.Configuration = new TesseractConfiguration
{
    // Whitelist only Hiragana, Katakana, numbers, and common Japanese punctuation
    WhiteListCharacters = "あいうえおかきくけこさしすせそたちつてとなにぬねのはひふへほまみむめもやゆよらりるれろわをん" +
                            "アイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホマミムメモヤユヨラリルレロワヲン" +
                            "0123456789、。?!()¥ー",

    // Blacklist common noise/symbols you want to ignore
    BlackListCharacters = "★■§",
};

var ocrInput = new OcrInput();

// Load Japanese input image
ocrInput.LoadImage("jp.png");

// Perform OCR on the input image with ReadPhoto method
var results = ocr.ReadPhoto(ocrInput);

// Write the text result directly to a file named "output.txt"
File.WriteAllText("output.txt", results.Text);

// You can add this line to confirm the file was saved:
Console.WriteLine("OCR results saved to output.txt");
Imports IronOcr
Imports System.IO

Dim ocr As New IronTesseract()

ocr.Configuration = New TesseractConfiguration With {
    .WhiteListCharacters = "あいうえおかきくけこさしすせそたちつてとなにぬねのはひふへほまみむめもやゆよらりるれろわをん" &
                           "アイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホマミムメモヤユヨラリルレロワヲン" &
                           "0123456789、。?!()¥ー",
    .BlackListCharacters = "★■§"
}

Dim ocrInput As New OcrInput()

' Load Japanese input image
ocrInput.LoadImage("jp.png")

' Perform OCR on the input image with ReadPhoto method
Dim results = ocr.ReadPhoto(ocrInput)

' Write the text result directly to a file named "output.txt"
File.WriteAllText("output.txt", results.Text)

' You can add this line to confirm the file was saved:
Console.WriteLine("OCR results saved to output.txt")
$vbLabelText   $csharpLabel

出力

OCRの詳細設定(日本語出力)

フィルタリング済みの完全な出力結果は、テキストファイル jp-output.txt として入手可能です。

ホワイトリストには基本のひらがなおよびカタカナ文字のみが含まれるため、プ (pu) やデ (de) などの有声化記号が付いた派生形は除外されます。 また、"価格"や"購入"などの漢字は、許可された文字セットに含まれていないため除外されます。 、および § などのブラックリストに登録された記号は、ホワイトリストの有無にかかわらず、自動的に削除されます。

次にどこへ進めばよいですか?

高度な読み取りシナリオ向けに IronOCR を設定する方法を理解したところで、以下もご覧ください:

本番環境での使用にあたっては、透かしを削除し、全機能を利用するためにライセンスを取得することを忘れないでください。

よくある質問

IronOCRにおけるTesseractConfigurationとは何ですか?

IronOCRのTesseractConfigurationを使用すると、ユーザーはOCR設定をカスタマイズでき、文字のホワイトリスト、BarCode読み取り、多言語サポートなどの高度な読み取り機能を利用できます。

IronOCRで文字のホワイトリストを設定するにはどうすればよいですか?

IronOCRでは、TesseractConfigurationを使用して文字のホワイトリストを設定できます。これにより、OCRエンジンが認識すべき文字を指定することができ、ナンバープレートの読み取りなどのタスクに役立ちます。

IronOCRはBARCODEやデータ表を読み取ることができますか?

はい、IronOCRは、TesseractConfigurationプロパティの特定の設定を調整することで、BarCodeやデータテーブルを読み取るように構成でき、正確なOCRデータ抽出が可能です。

IronOCRは、中国語、日本語、韓国語などの国際言語に対応していますか?

IronOCRは、多言語対応のTesseractConfigurationオプションを通じて、中国語、日本語、韓国語を含む国際言語をサポートしています。

IronOCRで高度なOCR設定を使用するメリットは何ですか?

IronOCRの高度なOCR設定を活用することで、より正確かつ効率的なテキスト認識が可能となり、言語固有のテキスト認識や構造化データの抽出といった特殊なタスクに対応できます。

特定のOCRタスクに合わせてIronOCRを最適化することは可能ですか?

はい、IronOCRは、文字のホワイトリスト設定やBARCODE・表の認識機能の有効化といった設定を行うことで、特定のOCRタスク向けに最適化でき、対象となるアプリケーションでのパフォーマンスを向上させることができます。

IronOCRで多言語サポートを有効にするにはどうすればよいですか?

IronOCRで多言語対応を有効にするには、TesseractConfigurationの言語設定を調整することで、OCRエンジンが複数の言語のテキストを認識できるようにします。

文字のホワイトリストとは何ですか?また、IronOCRではどのように使用されますか?

IronOCRの文字ホワイトリストは、OCRエンジンが認識するように設定された特定の文字のリストであり、数字や特定のテキストパターンの読み取りなど、特定のタスクに最適です。

IronOCRは構造化データ形式の読み取りに使用できますか?

はい、IronOCRはBARCODEや表などの構造化データ形式を読み取り、処理するように設定可能です。これにより、様々なデータ抽出ニーズに対応する多機能なOCR機能を提供します。

IronOCRでは、高度なテキスト認識のためにどのような設定が利用できますか?

IronOCRは、文字のホワイトリスト、多言語対応、BarCode認識などの設定機能を提供し、特定の要件に合わせた高度なテキスト認識機能を強化します。

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

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

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

準備はできましたか?
Nuget ダウンロード 5,896,332 | バージョン: 2026.5 just released
Still Scrolling Icon

まだスクロールしていますか?

すぐに証拠が欲しいですか? PM > Install-Package IronOcr
サンプルを実行 あなたの画像が検索可能なテキストになるのをご覧ください。