フッターコンテンツにスキップ
IRONOCRの使い方

C#のOCR CodeProjectチュートリアル:IronOCRで画像からテキストを抽出する

C# の光学文字認識 (OCR) を使用すると、 .NETアプリケーション内でスキャンされたドキュメント、画像ファイル、および TIFF ファイルから機械が読み取り可能なテキストを抽出できます。 IronOCRは.NETネイティブのOCRライブラリであり、 NuGetパッケージを1つインストールするだけで、数行のコードで画像からテキストを読み取ることができます。外部サービスも、ランタイム依存関係も、API呼び出しごとの料金も不要です。

IronOCRの無料トライアルを開始して、以下のコードサンプルに沿って操作してみてください。

IronOCRを.NETプロジェクトにインストールするにはどうすればよいですか?

.NET 10プロジェクトにOCR機能を追加する最も簡単な方法は、 NuGetパッケージマネージャーを使用することです。 プロジェクトディレクトリでターミナルを開き、dotnet CLIコマンドを実行するか、Visual Studio内のパッケージマネージャーコンソールを使用してください。

# .NET CLI
dotnet add package IronOcr

# Package Manager Console
Install-Package IronOcr
# .NET CLI
dotnet add package IronOcr

# Package Manager Console
Install-Package IronOcr
SHELL

インストール後、 NuGetパッケージマネージャーは必要なアセンブリをすべてダウンロードし、参照を自動的に設定します。 IronOCRは、 .NET Framework 4.6.2以降、 .NET Core 3.1以降、および.NET 5から.NET 10までを対象としているため、コンソールアプリ、 ASP.NET Coreサービス、WPFアプリケーション、Azure Functionsなど、幅広い環境で動作します。

ローカル環境でテストする場合は、ライセンスキーを登録する必要はありません。ライセンスが適用されるまで、出力には試用版の透かしが表示されます。 using ディレクティブを追加し、本番環境で使用する準備ができたら、起動時に一度だけキーを渡してください。

using IronOcr;

// Apply license key before any OCR calls (production only)
IronOcr.License.LicenseKey = "YOUR-LICENSE-KEY";
using IronOcr;

// Apply license key before any OCR calls (production only)
IronOcr.License.LicenseKey = "YOUR-LICENSE-KEY";
$vbLabelText   $csharpLabel

価格とアクティベーションの詳細については、 IronOCRのライセンスページをご覧ください。

画像ファイルからテキストを抽出するにはどうすればよいですか?

OCR のコアワークフローは、3 つのオブジェクトで構成されています。IronTesseract (エンジン)、OcrInput (入力コンテナ)、および OcrResult (出力)。 以下のサンプルコードはPNG画像を読み込み、認識したテキストをコンソールに出力します。

using IronOcr;

var ocr = new IronTesseract();

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

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

var ocr = new IronTesseract();

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

OcrResult result = ocr.Read(input);
Console.WriteLine(result.Text);
$vbLabelText   $csharpLabel

光学式文字認識出力

C# の OCR CodeProject チュートリアル: IronOCRを使用して画像からテキストを抽出する: 画像 1 - OCR 出力のスクリーンショット

IronTesseract は、Tesseract 5 エンジンを .NET に優しいデフォルト設定と自動モデル管理でラップします。 OcrInput.LoadImage は PNG、JPEG、BMP、GIF、TIFF、WebP ファイルを受け入れるため、画像をエンジンに渡す前にフォーマットを変換する必要はほとんどありません。

OcrResult.Text プロパティは、認識されたすべての文字を改行で連結したプレーンな文字列を返します。 より詳細なアクセス(単語の境界ボックス、信頼度スコア、段落ごとのテキストなど)を行うには、result.Characters コレクションを参照してください。

知っておくべき重要な特性:

  • result.Pages[0].Text -- 1ページからのテキスト
  • result.Words[n].Text および result.Words[n].Confidence -- 単語ごとの精度 (0.0 ~ 1.0)
  • result.Pages[0].Paragraphs -- 構造化抽出のための段落分割

デスクトップアプリケーションやウェブアプリケーションでUIスレッドを解放するには、ocr.ReadAsync(input) を呼び出すこともできます。

スキャンした文書やTIFFファイルはどのように処理しますか?

複数ページのTIFFファイルは、文書スキャンワークフローでよく使用されます。 IronOCRは、LoadImageFramesを使用してこれらを処理します。これにより、処理するフレーム(ページ)を正確に選択できます。これは、大規模なアーカイブのサブセットのみが必要な場合に便利です。

using IronOcr;

var ocr = new IronTesseract();

using var input = new OcrInput();
int[] pageIndices = { 0, 1, 2 };
input.LoadImageFrames("scanned-documents.tiff", pageIndices);

// Correct skew and remove noise before reading
input.Deskew();
input.DeNoise();

OcrResult result = ocr.Read(input);

foreach (var page in result.Pages)
{
    Console.WriteLine($"Page {page.PageNumber}:");
    Console.WriteLine(page.Text);
}
using IronOcr;

var ocr = new IronTesseract();

using var input = new OcrInput();
int[] pageIndices = { 0, 1, 2 };
input.LoadImageFrames("scanned-documents.tiff", pageIndices);

// Correct skew and remove noise before reading
input.Deskew();
input.DeNoise();

OcrResult result = ocr.Read(input);

foreach (var page in result.Pages)
{
    Console.WriteLine($"Page {page.PageNumber}:");
    Console.WriteLine(page.Text);
}
$vbLabelText   $csharpLabel

複数ページの TIFF ファイルからの OCR 出力

C# での OCR CodeProject チュートリアル: IronOCRを使用して画像からテキストを抽出する: 画像 2 - 複数ページの TIFF OCR 出力

Deskew は、フラットベッドスキャナーによって生じる傾きを補正するために画像を回転させます。 DeNoise は、Tesseract エンジンを混乱させる斑点や JPEG アーティファクトを除去します。これら 2 つの前処理フィルターを組み合わせることで、低品質のスキャン画像における認識精度が大幅に向上します。

難易度の高いソース素材向けに、追加のOcrInputフィルターが利用可能です。

  • input.Sharpen() -- ぼやけた画像の輪郭のコントラストを高めます
  • input.Binarize() -- ファックス品質の文書を白黒に変換します
  • input.Scale(200) -- 文字分離を改善するために小さな画像を拡大します
  • input.Rotate(90) -- 回転したドキュメントの向きを修正します

前処理オプションの全リストと適用時期については、 IronOCR画像フィルタガイドを参照してください。

OCRの言語サポートはどのように設定するのですか?

IronOCRはデフォルトでは英語のテキストを読み取ります。 他の言語のドキュメントを処理するには、対応する言語のNuGetパッケージをインストールし、IronTesseract インスタンスの Language プロパティを設定します。

dotnet add package IronOcr.Languages.German
dotnet add package IronOcr.Languages.French
dotnet add package IronOcr.Languages.Japanese
dotnet add package IronOcr.Languages.German
dotnet add package IronOcr.Languages.French
dotnet add package IronOcr.Languages.Japanese
SHELL

次にエンジンを設定し、バイリンガル文書の場合は、第二言語を追加します。

using IronOcr;
using IronOcr.Languages;

var ocr = new IronTesseract();
ocr.Language = OcrLanguage.German;

// For bilingual documents (e.g. Canadian forms, EU directives)
ocr.AddSecondaryLanguage(OcrLanguage.French);

using var input = new OcrInput();
input.LoadImage("german-invoice.png");

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

var ocr = new IronTesseract();
ocr.Language = OcrLanguage.German;

// For bilingual documents (e.g. Canadian forms, EU directives)
ocr.AddSecondaryLanguage(OcrLanguage.French);

using var input = new OcrInput();
input.LoadImage("german-invoice.png");

OcrResult result = ocr.Read(input);
Console.WriteLine(result.Text);
$vbLabelText   $csharpLabel

IronOCRは125以上の言語をサポートしており、各言語は軽量なNuGetパッケージとして個別に配布されています。 これにより、本番環境用のバイナリファイルのサイズを小さく保つことができます。アプリケーションが実際に必要とする言語データのみが含まれるためです。 AddSecondaryLanguage を呼び出すと、エンジンは認識時にプライマリ言語モデルとセカンダリ言語モデルをブレンドします。

OCRエラーへの対処方法と認識精度の向上方法について教えてください

実稼働環境のアプリケーションでは、OCRパイプラインにおけるエラー処理が必要です。画像品質の問題、ファイルの欠落、サポートされていないフォーマットなどが原因で例外が発生する可能性があります。 try/catchブロックで呼び出しを囲むことで、クリーンなリカバリパスが確保されます。

using IronOcr;

var ocr = new IronTesseract();
ocr.Language = OcrLanguage.English;

try
{
    using var input = new OcrInput();
    input.LoadImage("document.png");
    input.DeNoise();
    input.Deskew();

    OcrResult result = ocr.Read(input);

    if (result.Text.Length > 0)
    {
        Console.WriteLine("Recognised text:");
        Console.WriteLine(result.Text);
    }
    else
    {
        Console.WriteLine("No text was detected in the image.");
    }
}
catch (Exception ex)
{
    Console.WriteLine($"OCR error: {ex.Message}");
}
using IronOcr;

var ocr = new IronTesseract();
ocr.Language = OcrLanguage.English;

try
{
    using var input = new OcrInput();
    input.LoadImage("document.png");
    input.DeNoise();
    input.Deskew();

    OcrResult result = ocr.Read(input);

    if (result.Text.Length > 0)
    {
        Console.WriteLine("Recognised text:");
        Console.WriteLine(result.Text);
    }
    else
    {
        Console.WriteLine("No text was detected in the image.");
    }
}
catch (Exception ex)
{
    Console.WriteLine($"OCR error: {ex.Message}");
}
$vbLabelText   $csharpLabel

精度が期待値よりも低い場合に役立つ追加設定をいくつかご紹介します。

  • ocr.Configuration.PageSegmentationMode = TesseractPageSegmentationMode.Auto -- Tesseract が単一列、複数列、単語のレイアウトを自動的に選択できるようにします
  • ocr.Configuration.ReadBarCodes = false -- テキストのみのドキュメントを処理し、より高速なスループットが必要な場合は、バーコード検出を無効にします
  • ocr.Configuration.TesseractVersion = TesseractVersion.Tesseract5 -- 最速のエンジンを使用することを保証します

フィールドが予測可能な位置に表示される構造化フォームの場合は、領域ベースのOCRを使用して、重要な領域のみを読み取ります。

using IronOcr;
using IronSoftware.Drawing;

var ocr = new IronTesseract();

using var input = new OcrInput();
var region = new CropRectangle(x: 50, y: 200, width: 600, height: 100);
input.LoadImage("form.png", region);

OcrResult result = ocr.Read(input);
Console.WriteLine(result.Text);
using IronOcr;
using IronSoftware.Drawing;

var ocr = new IronTesseract();

using var input = new OcrInput();
var region = new CropRectangle(x: 50, y: 200, width: 600, height: 100);
input.LoadImage("form.png", region);

OcrResult result = ocr.Read(input);
Console.WriteLine(result.Text);
$vbLabelText   $csharpLabel

認識対象を切り抜き領域に限定することで、大きな画像の場合、処理時間を最大90%短縮できます。 この技術は、請求書番号の抽出、フォームフィールドの読み取り、および身分証明書のスキャンに最適です。 詳細については、地域OCR操作ガイドをご覧ください。

認識されたテキストから検索可能なPDFを作成するにはどうすればよいですか?

スキャンした画像アーカイブを検索可能なPDFファイルに変換することは、OCRの最も価値の高い活用事例の一つです。 生成されたファイルは、元の視覚的な外観を保持しつつ、PDFビューア、検索エンジン、スクリーンリーダーがインデックス化できる目に見えないテキストレイヤーを埋め込んでいます。

using IronOcr;

var ocr = new IronTesseract();

using var input = new OcrInput();
input.Title = "Quarterly Report Q1 2026";
input.LoadImage("page1.png");
input.LoadImage("page2.png");
input.LoadImage("page3.png");

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

Console.WriteLine("Searchable PDF created.");
Console.WriteLine($"Pages processed: {result.Pages.Count}");
using IronOcr;

var ocr = new IronTesseract();

using var input = new OcrInput();
input.Title = "Quarterly Report Q1 2026";
input.LoadImage("page1.png");
input.LoadImage("page2.png");
input.LoadImage("page3.png");

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

Console.WriteLine("Searchable PDF created.");
Console.WriteLine($"Pages processed: {result.Pages.Count}");
$vbLabelText   $csharpLabel

検索可能なPDFドキュメントを出力する

C# の OCR CodeProject チュートリアル: IronOCRを使用して画像からテキストを抽出する: 画像 3 - 入力画像から作成された検索可能な PDF

SaveAsSearchablePdf は、認識された各単語が元の画像の正確なピクセル座標に配置された、PDF/A 互換のファイルを書き込みます。 Adobe Acrobat、macOS版プレビュー、およびFoxit Readerはすべて、これらのファイルが生成された直後に全文検索をサポートしています。

ウェブベースのドキュメントビューアや下流のNLPパイプラインの場合は、代わりにresult.SaveAsHocrFile("output.hocr")を使用してください。 hOCRフォーマットは、テキストとともに単語ごとの境界ボックスをエンコードするオープンなXML標準であり、クライアント側での検索時のハイライト表示や単語レベルのアクセシビリティ注釈を可能にします。

OcrResult から利用可能な追加の出力形式:

  • result.SaveAsHocrFile("output.hocr") -- 位置データを含むhOCR XML
  • result.ToXDocument() -- プログラム処理用のLINQクエリ可能なXDocument
  • result.Pages[0].Text -- ストリーミングパイプラインのページあたりのプレーンテキスト

IronPDFと既に連携しているアプリケーションでは、OcrResult を PDF 生成ワークフローに直接パイプすることで、OCR 抽出と PDF 編集を単一の.NETプロセスに組み合わせることができます。

テキストと並んで表示されるバーコードはどのように読み取るのですか?

IronOCRは、印刷されたテキストと同じ画像に埋め込まれたバーコードやQRコードを読み取ることができるため、別途バーコードライブラリを実行する必要がなくなります。 1つの設定プロパティで機能を有効にします。

using IronOcr;

var ocr = new IronTesseract();
ocr.Configuration.ReadBarCodes = true;

using var input = new OcrInput();
input.LoadImage("shipping-label.png");

OcrResult result = ocr.Read(input);

Console.WriteLine("Text:");
Console.WriteLine(result.Text);

Console.WriteLine("Barcodes:");
foreach (var barcode in result.Barcodes)
{
    Console.WriteLine($"  {barcode.Format}: {barcode.Value}");
}
using IronOcr;

var ocr = new IronTesseract();
ocr.Configuration.ReadBarCodes = true;

using var input = new OcrInput();
input.LoadImage("shipping-label.png");

OcrResult result = ocr.Read(input);

Console.WriteLine("Text:");
Console.WriteLine(result.Text);

Console.WriteLine("Barcodes:");
foreach (var barcode in result.Barcodes)
{
    Console.WriteLine($"  {barcode.Format}: {barcode.Value}");
}
$vbLabelText   $csharpLabel

サポートされているバーコード形式には、Code 128、Code 39、EAN-13、EAN-8、UPC-A、UPC-E、PDF417、データマトリックス、およびQRコードが含まれます。 詳細はIronOCRのバーコード読み取りガイドをご覧ください。

この機能は、配送ラベル、患者用リストバンド、製品タグなどに人間が読めるテキストと機械が読めるバーコードの両方が記載されている物流、医療、小売業などの分野で特に役立ちます。

IronOCRと他の.NET OCRオプションを比較するにはどうすればよいでしょうか?

.NET向けのOCRライブラリを評価する開発者は、通常、 IronOCR、Tesseract .NET、およびGoogle Cloud VisionやAzure コンピュータービジョンなどのクラウドサービスを検討します。 以下の表は、主な相違点をまとめたものです。

.NET OCRオプションを主要な開発者基準に基づいて比較
基準 IronOCR Tesseract.NET Azure コンピュータービジョン
デプロイメント オンプレミスまたはクラウド、外部への通話なし オンプレミス クラウド専用、インターネット接続が必要
インストール 単一のNuGetパッケージ 複数のパッケージ + ネイティブバイナリ SDK + Azureサブスクリプション
言語パック NuGetパッケージ経由で125以上 tessdataの手動ダウンロード Azure によって管理されています
検索可能なPDF出力 組み込みのメソッド呼び出しが1つあります 含まれていません 含まれていません
画像の前処理 12種類以上の内蔵フィルター 手動の前処理が必要 自動(サーバー側)
価格設定モデル 一度限りの永久ライセンス オープンソース(Apache 2.0) 呼び出しごとの課金

Googleがオープンソースプロジェクトとして維持管理しているTesseractは、 IronOCRとTesseract .NETの両方を内部的に支えている。 IronOCRは、.NETの慣用的なパッケージング、自動モデル管理、およびTesseractの生のバインディングにはない本番環境出力機能(検索可能なPDF、hOCRエクスポート)を追加します。 Azure コンピュータービジョンは最先端のクラウド精度を提供しますが、ネットワーク遅延と呼び出しごとのコストが発生するため、大量の処理やオフラインのワークフローには適していません。

データプライバシー規制により、医療記録、法的文書、財務諸表などの文書を外部サービスに送信することが禁止されているシナリオでは、 IronOCRのようなオンプレミス型のライブラリが適切な選択肢となります。

次のステップは何ですか?

これで、 NuGetによるインストール、基本的な画像からテキストへの抽出、複数ページの TIFF 処理、言語設定、エラー処理、領域ベースの読み取り、バーコード検出、検索可能な PDF 生成など、あらゆる.NET 10 アプリケーションに OCR を追加するための構成要素が揃いました。

さらに詳しく知りたい場合は、以下のIronOCRリソースをご覧ください。

ライセンスに関するご質問や、 IronOCRを本番環境に導入する方法については、 IronOCRのライセンスページをご覧ください。 無料トライアルライセンスでは、評価期間中は出力にウォーターマークが表示されません。また、 Iron Softwareのサポートチームは、どのプランでも技術的な質問に対応いたします。

今IronOCRを始めましょう。
green arrow pointer

よくある質問

OCRとは何か、C#開発者にどのようなメリットがあるのか?

OCR(光学文字認識)は、スキャンした紙、PDF、画像などの文書を編集・検索可能なデータに変換します。C#開発者にとって、OCRはアプリケーションが画像やスキャンした文書からテキストを抽出できるようにすることで文書処理を簡素化し、データのアクセシビリティとユーザビリティを向上させます。

C# プロジェクトで OCR を実装するにはどうすればよいですか?

C#プロジェクトでOCRを実装するには、 IronOCR NuGetパッケージをインストールし、IronTesseractインスタンスを作成し、OcrInputに画像を読み込み、Readメソッドを呼び出します。返されるOcrResultには、抽出されたテキストと単語ごとの位置データが含まれます。

IronOCRで対応している画像フォーマットは何ですか?

IronOCRはPNG、JPEG、BMP、GIF、TIFF、WebPの画像形式をサポートしています。これにより、処理前にファイルを変換することなく、ほとんどの一般的な画像形式を扱うことができます。

IronOCRは複数ページのTIFFファイルを扱えますか?

はい、 IronOCRは複数ページのTIFFファイルを処理できます。特定のフレームを処理するには、ページインデックスの配列を指定したLoadImageFrames関数を使用し、ページごとのテキストにアクセスするにはresult.Pages関数を反復処理してください。

IronOCRを使って画像の特定の領域からテキストを抽出することは可能ですか?

はい、LoadImageにCropRectangleを渡すことで、OCR処理を特定の領域に限定できます。これにより処理時間が大幅に短縮され、フォーム、請求書、身分証明書などから特定のフィールドを抽出する際に便利です。

IronOCRはテキスト抽出のために異なる言語をサポートしていますか?

IronOCRは125以上の言語をサポートしており、それぞれが個別のNuGetパッケージとして提供されています。バイリンガルドキュメントの場合は、IronTesseractのLanguageプロパティを設定し、AddSecondaryLanguageを呼び出してください。

生の Tesseract .NETと比較したIronOCRの利点は何ですか?

IronOCR は、Tesseract エンジン上に、.NET 慣用的なパッケージング、自動言語モデル管理、組み込みの画像前処理フィルター、検索可能な PDF 出力、hOCR エクスポートを追加します。これらはすべて、手動によるネイティブ バイナリ管理なしで単一のNuGetパッケージからアクセスできます。

IronOCRはどのようにテキスト認識の精度を向上させるのですか?

IronOCR は、Tesseract エンジンが画像を処理する前に一般的なスキャン欠陥を修正する前処理フィルター (Deskew、DeNoise、Sharpen、Binarize、Scale、Rotate) を提供し、低品質のソース マテリアルでの認識精度を向上させます。

IronOCR はバーコードと QR コードを読み取ることができますか?

はい。ocr.Configuration.ReadBarCodes = true を設定すると、同じ画像内のテキストと並んでバーコードとQRコードも検出されます。結果は、フォーマットの種類とデコードされた値とともに OcrResult.Barcodes で確認できます。

C# アプリケーションでのIronOCRの一般的な使用例は何ですか?

IronOCRは、ドキュメント管理システム、請求書および領収書のデータ抽出、スキャンされたアーカイブからの検索可能な PDF の生成、フォーム フィールドの読み取り、出荷ラベルの処理、医療記録のデジタル化、アクセシビリティ ツールで使用されます。

Kannaopat Udonpant
ソフトウェアエンジニア
ソフトウェアエンジニアになる前に、Kannapatは北海道大学で環境資源の博士号を修了しました。博士号を追求する間に、彼はバイオプロダクションエンジニアリング学科の一部である車両ロボティクスラボラトリーのメンバーになりました。2022年には、C#のスキルを活用してIron Softwareのエンジニアリングチームに参加し、IronPDFに注力しています。Kannapatは、IronPDFの多くのコードを執筆している開発者から直接学んでいるため、この仕事を大切にしています。同僚から学びながら、Iron Softwareでの働く社会的側面も楽しんでいます。コードやドキュメントを書いていない時は、KannapatはPS5でゲームをしたり、『The Last of Us』を再視聴したりしていることが多いです。

アイアンサポートチーム

私たちは週5日、24時間オンラインで対応しています。
チャット
メール
電話してね