HOWTO · Csharp
C# プロジェクトに OCR を実装する方法
Tesseract または IronOCR を C# プロジェクトに追加し、画像内のテキストを認識する方法を学びます。
このページの内容
C# アプリケーションから画像内のテキストを認識するには、OCR ライブラリをインストールし、画像と必要な言語データを提供して、結果から認識されたテキストを読み取ります。このガイドでは、オープンソースの Tesseract エンジンと商用の IronOCR ライブラリという 2 つの別々の選択肢を説明します。両者はパッケージ、セットアップ、API が異なります。
C# アプリケーションで OCR が行うこと
光学式文字認識(OCR)は、画像で表現されたテキストを機械可読なテキストに変換します。C# アプリケーションはその結果を使って、スキャンしたページにインデックスを付けたり、データ入力フォームに事前入力したり、画像コンテンツを検索可能にしたりできます。認識品質は元の画像と言語設定に依存します。すべての文字が正しく識別されることを保証できるライブラリはありません。
Tesseract と IronOCR をインストールする
プロジェクトに 1 つのライブラリを選び、そのライブラリのパッケージとデプロイの要件に従ってください。Visual Studio でプロジェクトの NuGet パッケージ マネージャーを開き、スタンドアロンの Tesseract ルートには Tesseract という名前のパッケージを、IronOCR には IronOcr をインストールします。追加する前に、Tesseract の NuGet 一覧またはIronOcr の NuGet 一覧でパッケージの同一性とバージョンを確認してください。パッケージの API とネイティブ依存関係は、バージョンやターゲット プラットフォームによって異なる場合があります。
Tesseract には、学習済みの言語データも必要です。認識したい言語ごとに .traineddata ファイルを取得し、アプリケーションが読める tessdata ディレクトリにファイルをまとめて配置してください。このディレクトリをデプロイに含め、エンジンを作成するときはその実際のパスを使ってください。Tesseract プロジェクトのドキュメントでは、.NET ラッパーとそのセットアップについて説明しています。IronOCR は別のライブラリです。その型をスタンドアロンの Tesseract パッケージに渡したり、2 つのパッケージがセットアップ手順を共有すると想定したりしないでください。デプロイ前に、選択した IronOCR バージョンの公式 C# OCR ドキュメントとAPI リファレンスで、パッケージの手順、ライセンス条件、サポート対象プラットフォームを確認してください。
Tesseract で画像からテキストを認識する
スタンドアロンの Tesseract パッケージには、画像と学習データ ディレクトリの両方が必要です。この完全なプログラムは、tessdata に eng.traineddata がある状態で、images/receipt.png にある英語の画像に対する想定フローを示しています。パッケージのバージョンとプラットフォーム固有のネイティブ依存関係は検証用に提供されていないため、このコードは未検証の例として扱い、コンパイル前にターゲット向けのTesseract プロジェクトのドキュメントで API と依存関係を確認してください。
using System;
using Tesseract;
internal static class Program
{
private static void Main()
{
const string imagePath = "images/receipt.png";
const string tessdataPath = "tessdata";
using (var engine = new TesseractEngine(tessdataPath, "eng", EngineMode.Default))
using (var image = Pix.LoadFromFile(imagePath))
using (var page = engine.Process(image))
{
Console.WriteLine(page.GetText());
}
}
}
たとえば、画像に Invoice 1042 という行が目に見えて含まれている場合、プログラムは Invoice 1042 のような認識テキストを出力します(その後に改行が続きます)。これは代表的なテキストであり、観測された結果ではありません。実際の出力は画像と認識設定に依存します。tessdata ディレクトリはデプロイされたアプリケーションと一緒に保持し、imagePath と言語コードを入力に合わせて変更してください。
IronOCR で画像からテキストを認識する
IronOCR は独自の IronOcr 名前空間と API を使います。次の完全なプログラムは、IronTesseract、OcrInput.AddImage、Read を使って同じ画像を認識し、結果を出力します。パッケージのバージョンは検証用に提供されていないため、これは未検証の例です。コンパイル前に、IronOCR API リファレンスとIronOcr パッケージの手順で正確なシグネチャと依存関係を確認してください。
using System;
using IronOcr;
internal static class Program
{
private static void Main()
{
const string imagePath = "images/receipt.png";
using (var ocr = new IronTesseract())
using (var input = new OcrInput())
{
input.AddImage(imagePath);
var result = ocr.Read(input);
Console.WriteLine(result.Text);
}
}
}
画像に Invoice 1042 が含まれている場合、代表的に出力されるテキストは Invoice 1042 の後に改行が続いたものです。これは説明用であり、観測された実行ではありません。これらの型には IronOcr をインストールして参照してください。IronTesseract は IronOCR に属し、スタンドアロンの Tesseract エンジンではありません。result.Text が返すテキストは認識出力です。信頼できるアプリケーションデータとして使う前に、検査または検証してください。
OCR の精度を改善し、エラーを処理する
テキストに十分なコントラストがあり、切り取られていない、鮮明で明るい画像から始めてください。結果が悪い場合は、より大きな元の画像を試す、傾いたページをまっすぐにする、グレースケールへの変換、コントラストの調整、ノイズの低減によってコピーを前処理する、といった方法を試してください。前処理は入力によっては効果があり、別の入力には害になることもあるため、アプリケーションの代表的な画像を使って結果を比較してください。
正しい言語を設定してください。スタンドアロンの Tesseract には、対応する学習データのインストールと適切な言語コードが必要です。一方、IronOCR の言語設定は選択したバージョンに依存します。複数の言語については、既定値で十分だと想定せず、意図した言語データを設定してください。
処理前に入力ファイルが存在し、読み取り可能であることを確認し、ライブラリやファイルのエラーはアプリケーションの境界で処理してください。機密性の高い画像内容を公開することなく、有用なコンテキストを記録してください。OCR は、結果が後続の判断に適しているかどうかを示すことなく、部分的または誤ったテキストを返すことがあります。重要なフィールドを検証し、認識が不確かな場合の確認経路を用意してください。どちらのライブラリの例も、提供された実行時エビデンスでは実行されていません。