IRONOCRの使用

C#で文字認識を作成する方法

Kannaopat Udonpant
カンナパット・ウドンパント
2024年4月29日
共有:

イントロダクション

光学式文字認識 (OCR) の技術は、テキストを機械で読み取り可能なデジタル形式に変換することを可能にします。ドキュメントがスキャンされると(請求書やレシートのようなもの)、それはコンピュータによって画像ファイルとして保存されます。しかし、スキャンされた画像内のテキストは、通常のテキストエディタでは編集、検索、または数えることはできません。

ただし、OCRは画像を処理し、テキストを抽出し、それをコンピューターが読み取れるテキスト形式に変換できます。 これは、PDFファイルやその他のスキャン画像を含む様々なソースからのテキスト抽出を可能にします。 さらに、OCR機能は単純なテキスト抽出を超えて、主要な画像形式やPDFドキュメントを変換し、検索可能なOCRデータにすることができます。

C#では、開発者はさまざまなライブラリを通じてOCRの力を活用することができ、その中の1つがIronOCRという強力なライブラリで、Iron Softwareから提供されています。 このチュートリアルでは、OCRの基本を探求し、IronOCRを使用してC#で文字認識を効率的に行う方法を示します。

C#で文字認識を作成する方法

  1. Visual Studio で新しい C# プロジェクトを作成し、プロジェクトに名前を付けます。

  2. IronOCR .NETライブラリをインストールし、プロジェクトフォルダに含めてください。

  3. IronOCR Tesseractを利用して、画像からテキストを読み取ります。

  4. IronOCRの高度な機能を活用して、画像内のテキストを読み取ります

  5. IronOCR 読み取り操作のパフォーマンスチューニング。

IronOCRの使い始め方

IronOCR は、Iron Software によって開発された C# ライブラリで、高度な OCR 機能を提供します。 画像、PDF、およびスキャンされた文書からの正確なテキスト抽出を提供します。 コードに入る前に、プロジェクトにIronOCRがインストールされていることを確認してください。

IronOCR の主な機能は Iron Software から

改良されたTesseract OCRエンジン

IronOCRは、Tesseract OCRエンジンの精度と速度を向上させ、その能力を高めます。 これは、画像、PDF、さまざまなドキュメント形式を含むさまざまなソースからテキストを抽出するための堅牢なソリューションです。

広範な言語対応

127以上の言語に対応しているIronOCRは、多言語要件を処理するのに長けており、言語の多様性を求めるアプリケーションにとって理想的な選択です。

多用途の出力オプション

抽出されたテキストは、後続の処理パイプラインにシームレスに統合するために、プレーンテキストまたは構造化データとして便利に出力できます。 さらに、IronOCRは画像から直接検索可能なPDFの作成を可能にします。

クロスプラットフォーム適応性

C#、F#、およびVB.NETとの互換性を考慮して設計されたIronOCRは、バージョン8、7、6、Core、Standard、およびFrameworkを含むさまざまな.NET環境でシームレスに動作します。

Tesseract 5 を活用する

IronOCR は、.NET エコシステム内での最適なパフォーマンスを目指して微調整された Tesseract 5 の力を活用しています。

ゾーンベースのOCR機能

IronOCRを使用すると、ユーザーはドキュメント内の特定の領域を正確に定義し、ターゲットを絞ったOCR処理を実現できます。 この機能は、必要な箇所に処理能力を集中させることで、精度と効率を向上させます。

画像前処理ツール

ライブラリは、スキュー除去やノイズ除去などの画像前処理機能を一式提供します。 これらのツールは、不完全なソース画像を扱う際でも優れた結果を保証し、最終的に全体のOCR体験を向上させます。

次に、画像からテキストを読み取るためにIronOCRを利用するデモアプリケーションを開発します。

前提条件

  1. Visual Studio: Visual Studio またはその他のC#開発環境をインストールしていることを確認してください。

  2. NuGet パッケージ マネージャー: プロジェクト内のパッケージを管理するには、NuGet が存在することを確認してください。

ステップ1: Visual Studioで新しいC#プロジェクトを作成する

まず、以下のようにVisual Studioを使用して新しいコンソールアプリケーションを作成しましょう。

C#で文字認識を作成する方法:図1 - Visual Studioで新しいC#プロジェクトを作成

以下にプロジェクト名と場所を入力してください。

C#で文字認識を作成する方法: 図2 - プロジェクト名と保存場所を指定する

プロジェクトに必要な.NETバージョンを選択してください。

C#で文字認識を作成する方法: 図3 - プロジェクトに適した.NETバージョンを選択する

新しいプロジェクトを作成するには、「Create」ボタンをクリックしてください。

ステップ2: IronOCRライブラリをインストールし、プロジェクトに統合します。

IronOCR は、以下に示すように NuGet パッケージ マネージャーコンソールで見つけることができます。 パッケージをインストールするために、提供されたコマンドを使用してください。

C#での文字認識の作成方法: 図4 - IronOCR NuGetパッケージマネージャーのダウンロードページ

Visual StudioのNuGetパッケージマネージャーを使用して、IronOCRを検索し、プロジェクトフォルダーにインストールしてください。

C#で文字認識を作成する方法: 図5 - NuGetパッケージマネージャーを使用して閲覧タブからIronOCRを検索

インストールが完了すると、アプリケーションは画像からテキストを読み取るためにIronOCRを使用する準備が整います。

ステップ 3: 画像からテキストを読み取るために IronOCR Tesseract を利用します。

IronOCRは、Tesseract 5 OCR機能を提供する唯一の.NETライブラリとして際立っています。 現時点で、あらゆるプログラミング言語において最も高度なTesseract 5ライブラリとしての地位を保持しています。 IronOCRは、Tesseract 5をフレームワーク、スタンダード、コア、Xamarin、Monoなどのさまざまな.NET環境にシームレスに統合し、エコシステム全体で包括的なサポートを保証します。

以下の画像ファイルを入力として考慮してください。 それでは、この画像ファイルのテキストを読む方法を見てみましょう。

C#で文字認識を作成する方法: 図6 - 入力例

using IronOcr;
public class Program
{
    public static void Main(String [] args)
    {
        var ocrTesseract = new IronTesseract(); 
    using var ocrInput = new OcrInput();
    ocrInput.LoadImage(@"sample1.png");
    var ocrResult = ocrTesseract.Read(ocrInput);
    Console.WriteLine(ocrResult.Text);
    }
}
using IronOcr;
public class Program
{
    public static void Main(String [] args)
    {
        var ocrTesseract = new IronTesseract(); 
    using var ocrInput = new OcrInput();
    ocrInput.LoadImage(@"sample1.png");
    var ocrResult = ocrTesseract.Read(ocrInput);
    Console.WriteLine(ocrResult.Text);
    }
}
Imports IronOcr
Public Class Program
	Public Shared Sub Main(ByVal args() As String)
		Dim ocrTesseract = New IronTesseract()
	Dim ocrInput As New OcrInput()
	ocrInput.LoadImage("sample1.png")
	Dim ocrResult = ocrTesseract.Read(ocrInput)
	Console.WriteLine(ocrResult.Text)
	End Sub
End Class
$vbLabelText   $csharpLabel

コードの説明

  1. 必要な構成でIronTesseractを作成することから始めます。

  2. 次に、サンプル画像をOcrInputオブジェクトに読み込みます。

  3. 最後に、画像のテキストを読み取り、それをコンソールに出力します。

出力

C#で文字認識を作成する方法: 図7 - IronOCRを使用して抽出されたテキスト

ステップ4: 画像内のテキストを読み取るためにIronOCRの高度な機能を利用する

IronTesseract.Configurationオブジェクトは、高度なユーザーにC#/.NET内でTesseract APIへのアクセスを提供し、細かい調整や最適化のための詳細な設定を可能にします。 以下は可能な高度な構成の一部です

言語選択

OCRの言語は、Languageプロパティを使用して指定できます。 例えば、言語を英語に設定するには、次を使用します:

IronTesseract ocr = new IronTesseract();
ocr.Language = OcrLanguage.English;
IronTesseract ocr = new IronTesseract();
ocr.Language = OcrLanguage.English;
Dim ocr As New IronTesseract()
ocr.Language = OcrLanguage.English
$vbLabelText   $csharpLabel

ページセグメンテーションモード

PageSegmentationModeは、Tesseractが入力画像をどのようにセグメント化するかを決定します。 オプションには、AutoOsd、SingleBlock、SingleLineなどが含まれます。 例えば:

ocr.Configuration.PageSegmentationMode = TesseractPageSegmentationMode.AutoOsd;
ocr.Configuration.PageSegmentationMode = TesseractPageSegmentationMode.AutoOsd;
ocr.Configuration.PageSegmentationMode = TesseractPageSegmentationMode.AutoOsd
$vbLabelText   $csharpLabel

カスタムTesseract変数

特定の変数を設定することで、Tesseractを微調整することができます。 たとえば、並列化を無効にするには:

ocr.Configuration.TesseractVariables ["tessedit_parallelize"] = false;
ocr.Configuration.TesseractVariables ["tessedit_parallelize"] = false;
ocr.Configuration.TesseractVariables ("tessedit_parallelize") = False
$vbLabelText   $csharpLabel

文字のホワイトリストとブラックリスト化

WhiteListCharactersとBlackListCharactersを使用して、Tesseractが認識する文字を制御します。 例えば:

ocr.Configuration.WhiteListCharacters = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
ocr.Configuration.BlackListCharacters = "`ë
^";
ocr.Configuration.WhiteListCharacters = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
ocr.Configuration.BlackListCharacters = "`ë
^";
ocr.Configuration.WhiteListCharacters = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
ocr.Configuration.BlackListCharacters = "`ë ^"
$vbLabelText   $csharpLabel

追加の構成変数

ご自身のニーズに合わせて動作をカスタマイズするために、他のTesseract設定変数を探索してください。 例えば:

ocr.Configuration.TesseractVariables ["classify_num_cp_levels"] = 3;
ocr.Configuration.TesseractVariables ["textord_debug_tabfind"] = 0;
// ... (more variables)
ocr.Configuration.TesseractVariables ["classify_num_cp_levels"] = 3;
ocr.Configuration.TesseractVariables ["textord_debug_tabfind"] = 0;
// ... (more variables)
ocr.Configuration.TesseractVariables ("classify_num_cp_levels") = 3
ocr.Configuration.TesseractVariables ("textord_debug_tabfind") = 0
' ... (more variables)
$vbLabelText   $csharpLabel

同じ画像を高度な設定を使ってデコードしてみましょう。

using IronOcr;
public class Program
{
    public static void Main()
    {
        Console.WriteLine("Decoding using advanced features");
        var ocrTesseract = new IronTesseract() // create instance
        {
            Language = OcrLanguage.EnglishBest, // configure best english language
            Configuration = new TesseractConfiguration()
            {
                ReadBarCodes = false, // read bar codes false
                BlackListCharacters = "`ë
^", // black listed characters
                WhiteListCharacters = null, // no white list, allow all
                PageSegmentationMode = TesseractPageSegmentationMode.AutoOsd,
                TesseractVariables = null, // no custom variable used
            },
            MultiThreaded = false,
        };
        using var ocrInput = new OcrInput(); // create a disposible ocr input object
        ocrInput.AddImage(@"sample1.png"); // load the sample image 
        var ocrResult = ocrTesseract.Read(ocrInput); // read the text from the image
        Console.WriteLine(ocrResult.Text);// output the image
    }
}
using IronOcr;
public class Program
{
    public static void Main()
    {
        Console.WriteLine("Decoding using advanced features");
        var ocrTesseract = new IronTesseract() // create instance
        {
            Language = OcrLanguage.EnglishBest, // configure best english language
            Configuration = new TesseractConfiguration()
            {
                ReadBarCodes = false, // read bar codes false
                BlackListCharacters = "`ë
^", // black listed characters
                WhiteListCharacters = null, // no white list, allow all
                PageSegmentationMode = TesseractPageSegmentationMode.AutoOsd,
                TesseractVariables = null, // no custom variable used
            },
            MultiThreaded = false,
        };
        using var ocrInput = new OcrInput(); // create a disposible ocr input object
        ocrInput.AddImage(@"sample1.png"); // load the sample image 
        var ocrResult = ocrTesseract.Read(ocrInput); // read the text from the image
        Console.WriteLine(ocrResult.Text);// output the image
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

コードの説明

  1. IronOCR設定: IronTesseract(主要なIronOCRクラス)のインスタンスが作成され、変数ocrTesseractに割り当てられます。

    構成設定はocrTesseractに適用されます:

    1. 言語: OCRの言語を指定します(この場合、英語)。

    2. 設定: さらなるカスタマイズを可能にする TesseractConfiguration オブジェクトです:

    3. ReadBarCodes: バーコードの読み取りを無効にします。

    4. BlackListCharacters:ブラックリストに登録する文字(認識しない文字)を指定します。

    5. WhiteListCharacters: ホワイトリストが指定されていないため、すべての文字が許可されます。

    6. PageSegmentationMode: ページ分割モードを「AutoOsd」に設定します。

    7. Tesseract変数: カスタム変数は使用されませんでした。
    1. マルチスレッド: マルチスレッドを無効化します。
  1. OCR入力と画像の読み込み: usingブロックは、OcrInput型の使い捨てocrInputオブジェクトを作成します。 画像ファイル「sample1.png」がocrInputに追加されました。

  2. テキスト抽出: ReadメソッドはocrTesseractで呼び出され、ocrInputが渡されます。

  3. 結果はocrResult変数に保存されます。

  4. 出力: 抽出されたテキストは、Console.WriteLine(ocrResult.Text) を使用してコンソールに表示されます。

出力

C#で文字認識を作成する方法: 図8 - IronOCRを使用して抽出されたテキスト

ステップ5: IronOCR読み取り操作のパフォーマンスチューニング。

IronOCR を使用する際には、OCR を実行する前に画像を前処理するためのさまざまな画像フィルターにアクセスできます。 これらのフィルターは画像品質を最適化し、視認性を向上させ、ノイズやアーティファクトを低減します。 それらはOCR操作のパフォーマンスを向上させるのに役立ちます。

  1. 回転:

    回転フィルターは、指定された度数に従って画像を時計回りに回転することができます。反時計回りに回転するには、負の数値を使用してください。

  2. 傾き補正:

    Deskewフィルターは画像の傾きを修正し、テキストが直立し直角になるようにします。 これは、Tesseractが適切に方向づけられたスキャンで最も良く機能するため、特にOCRにとって有用です。

  3. スケール:

    スケールフィルターは、OCR入力ページを比例してスケールします。

  4. 二値化

    バイナライズフィルターは、すべてのピクセルを黒または白に変換し、中間色を排除します。 それは、テキストと背景の間のコントラストが非常に低い場合にOCRのパフォーマンスを向上させることができます。

  5. ToGrayScale:

    ToGrayScaleフィルターは、すべてのピクセルをグレースケールの色合いに変換します。 OCRの精度を大幅に向上させる可能性は低いですが、速度が向上するかもしれません。

  6. 反転:

    Invertフィルタは色を反転させます—白は黒に、黒は白になります。

  7. ReplaceColor

    置換色フィルターは、特定のしきい値を考慮して、画像内の特定の色を他の色に置き換えます。

  8. コントラスト

    コントラストフィルターは自動的にコントラストを向上させます。これにより、低コントラストのスキャンにおけるOCRの速度と精度が向上することが多いです。

  9. 膨張収縮

    これらの高度なモルフォロジーフィルターは、画像内のオブジェクトの境界を操作します。

    1. ダイレートはオブジェクトの境界にピクセルを追加します。
    1. エロードはオブジェクトの境界からピクセルを除去します。

    2. シャープ:

    シャープフィルターはぼやけたOCRドキュメントを鮮明にし、アルファチャネルを白に平坦化します。

    1. DeNoise

    DeNoiseフィルターはデジタルノイズを除去します。ノイズが予想される場合に使用してください。

    1. DeepCleanBackgroundNoise:

    極端なドキュメントの背景ノイズが既知の場合のみ、この重い背景ノイズ除去フィルターを使用する必要があります。 クリーンなドキュメントのOCR精度を低下させる可能性があり、CPU負荷が高いです。

    1. EnhanceResolution:

    解像度を高めるフィルターは、低品質の画像の解像度を向上させます。 自動解像度処理のため、頻繁に必要とされるわけではありません。

    以下は、C#でIronOCRを使用してフィルターを適用する方法の例です:

var ocr = new IronTesseract();
var input = new OcrInput();
input.LoadImage("sample.png");
input.Deskew();
var result = ocr.Read(input);
Console.WriteLine(result.Text);
var ocr = new IronTesseract();
var input = new OcrInput();
input.LoadImage("sample.png");
input.Deskew();
var result = ocr.Read(input);
Console.WriteLine(result.Text);
Dim ocr = New IronTesseract()
Dim input = New OcrInput()
input.LoadImage("sample.png")
input.Deskew()
Dim result = ocr.Read(input)
Console.WriteLine(result.Text)
$vbLabelText   $csharpLabel

一般的なOCRアプリケーション

  1. ドキュメントのデジタル化: OCRは、請求書、領収書、フォーム、契約書などのスキャンされた紙の文書をデジタル形式に変換するために広く使用されています。 このデジタル化プロセスは、文書の保管、検索、および管理を合理化し、紙の煩雑さを軽減し、効率を向上させます。

  2. データ抽出: OCRにより、スキャンされた文書、画像、PDFからテキストやデータを抽出することができます。 この抽出されたデータは、自動データ入力、コンテンツ分析、インデックス作成、データベースやビジネスシステムへの統合に使用することができます。

  3. 画像内のテキスト認識: OCR技術は、印刷された文書や画像からテキストを抽出して、インデックス作成や検索に使用することができます。 この機能は、拡張現実、画像ベースの検索エンジン、および翻訳サービスを含むさまざまなアプリケーションで利用されています。

  4. 自動ナンバープレート認識(ALPR): ALPRシステムはOCRを利用して、交通監視、駐車管理、料金徴収、および法執行アプリケーションで設置されたカメラが撮影した画像やビデオストリームからナンバープレート番号を読み取ります。

  5. アクセシビリティソリューション: OCRは、視覚障害者がアクセシブルなコンテンツを利用できるようにする上で重要な役割を果たしています。 画像や文書からテキストを音声や点字に変換することで、OCRは障害を持つ人々が情報にアクセスできるように支援します。

  6. 本人確認: 身分証明書のスキャンや処理など、本人確認プロセスにおいてOCR技術が使用されます。これにはパスポート、運転免許証、IDなどが含まれます。 それは書類の真正性を確認し、身分証明のために関連情報を抽出するのに役立ちます。

  7. 銀行および金融:OCRは、銀行および金融において、小切手の読み取り、請求書の処理、既存のPDF文書の変換、財務諸表からのデータ抽出、文書ベースのワークフローの自動化などのタスクに使用され、金融業務の精度と効率を向上させます。

  8. 自動翻訳: OCR技術は、翻訳ツールや語学学習アプリに統合されており、印刷されたテキストをある言語から別の言語に変換します。 ユーザーはデバイスを使用してテキストをキャプチャし、OCRを使用してリアルタイムで希望する言語に翻訳することができます。

  9. アーカイブおよび歴史文書の保存: OCR は、アーカイブ資料や歴史文書のデジタル化に使用され、貴重な文化遺産を保存しつつ、将来のアクセス、研究、分析のためにデジタル形式で保存されます。

ライセンス要件

IronOCR。 キーをメールIDに送付するために、以下の詳細を提供してください

C#で文字認識を作成する方法: 図9 - IronPDF 試用ライセンスページ

キーを購入または無料トライアルで取得した後、以下の手順に従ってキーを使用してください。

ライセンスキーの設定: コードを使用してIronOCRのライセンスキーを設定します。 次の行をアプリケーションのスタートアップに追加してください(IronOCRを使用する前に):

IronOcr.License.LicenseKey = "IRONOCR-MYLICENSE-KEY-1EF01";
IronOcr.License.LicenseKey = "IRONOCR-MYLICENSE-KEY-1EF01";
IronOcr.License.LicenseKey = "IRONOCR-MYLICENSE-KEY-1EF01"
$vbLabelText   $csharpLabel

グローバルアプリケーションキー(Web.Config または App.Config): アプリケーション全体にキーを適用するには、構成ファイル(Web.Config または App.Config)を使用します。 以下のキーをappSettingsに追加してください:

<configuration>
    <!-- Other settings -->
    <appSettings>
        <add key="IronOcr.LicenseKey" value="IRONOCR-MYLICENSE-KEY-1EF01"/>
    </appSettings>
</configuration>
XML

.NET Core appsettings.jsonの使用: .NET Coreアプリケーションの場合、プロジェクトのルートディレクトリにappsettings.jsonファイルを作成します。 "IronOcr.LicenseKey"キーをライセンス値に置き換えてください。

{
    "IronOcr.LicenseKey": "IRONOCR-MYLICENSE-KEY-1EF01"
}
{
    "IronOcr.LicenseKey": "IRONOCR-MYLICENSE-KEY-1EF01"
}
If True Then
	"IronOcr.LicenseKey": "IRONOCR-MYLICENSE-KEY-1EF01"
End If
$vbLabelText   $csharpLabel

ライセンスキーのテスト: キーが正しくインストールされているかどうかをテストして確認します。

bool result = IronOcr.License.IsValidLicense("IRONOCR-MYLICENSE-KEY-1EF01");
bool result = IronOcr.License.IsValidLicense("IRONOCR-MYLICENSE-KEY-1EF01");
Dim result As Boolean = IronOcr.License.IsValidLicense("IRONOCR-MYLICENSE-KEY-1EF01")
$vbLabelText   $csharpLabel

結論

結論として、IronOCRは、$749から始まります。 OCRの力を活用し、IronOCRでC#プロジェクトに無限の可能性を解き放ちましょう。

Kannaopat Udonpant
カンナパット・ウドンパント
ソフトウェアエンジニア
ソフトウェアエンジニアになる前に、カンナパットは日本の北海道大学から環境資源学の博士号を取得しました。学位を取得する過程で、カンナパットはバイオプロダクション工学部に所属する車両ロボティクス研究所のメンバーにもなりました。2022年には、C#のスキルを活かしてIron Softwareのエンジニアリングチームに参加し、IronPDFに注力しています。カンナパットは、IronPDFで使用されているコードの大部分を作成した開発者から直接学べることに価値を見いだしています。同僚との学び合いに加えて、Iron Softwareで働くことの社会的側面も楽しんでいます。コードやドキュメントを書いていない時には、カンナパットは通常、PS5でゲームをしたり、『The Last of Us』を再視聴したりしています。
< 以前
C#で車両登録のOCRを実行する方法
次へ >
C#でOCRを使用して身分証明書を読み取る方法