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
インストール後、 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";
Imports IronOcr
' Apply license key before any OCR calls (production only)
IronOcr.License.LicenseKey = "YOUR-LICENSE-KEY"
価格とアクティベーションの詳細については、 IronOCRのライセンスページをご覧ください。
画像ファイルからテキストを抽出するにはどうすればよいですか?
コアとなるOCRワークフローには、次の3つのオブジェクトが含まれます:CODE-50393--@@(エンジン)、@--CODE-50394--@(入力コンテナ)、および@--CODE-50395--@(出力)です。 以下のサンプルコードは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);
Imports IronOcr
Dim ocr As New IronTesseract()
Using input As New OcrInput()
input.LoadImage("sample-document.png")
Dim result As OcrResult = ocr.Read(input)
Console.WriteLine(result.Text)
End Using
光学式文字認識出力
OCR in C# CodeProject Tutorial:IronOCRで画像からテキストを抽出する: 画像1 - OCR出力のスクリーンショット。
Tesseract 5エンジンの.NETフレンドリーなデフォルトと自動モデル管理機能をラップ。 PNG、JPEG、BMP、GIF、TIFF、WebPファイルに対応しているため、画像をエンジンに渡す前にフォーマットを変換する必要はほとんどありません。
CODE-50398--@@プロパティは、認識されたすべての文字を改行でつないだプレーンな文字列を返します。 単語バウンディングボックス、信頼度スコア、段落ごとのテキストなど、より豊富なアクセスについては、@@--CODE-50399--@、@@--CODE-50400--@、@@--CODE-50401--@、@@@--CODE-50402--@コレクションをご覧ください。
知っておくべき重要な特性:
- CODE-50403--@@ -- 1ページのテキスト
- CODE-50404--@@および
result.Words[n].Confidence-- 単語ごとの精度 (0.0 -- 1.0) - 構造化抽出のための段落分割
また、ocr.ReadAsync(input)を呼び出して、デスクトップまたはWebアプリケーションでUIスレッドを解放しておくこともできます。
スキャンした文書や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);
}
Imports IronOcr
Dim ocr As New IronTesseract()
Using input As New OcrInput()
Dim pageIndices As Integer() = {0, 1, 2}
input.LoadImageFrames("scanned-documents.tiff", pageIndices)
' Correct skew and remove noise before reading
input.Deskew()
input.DeNoise()
Dim result As OcrResult = ocr.Read(input)
For Each page In result.Pages
Console.WriteLine($"Page {page.PageNumber}:")
Console.WriteLine(page.Text)
Next
End Using
複数ページの TIFF ファイルからの OCR 出力
OCR in C# CodeProject Tutorial:IronOCRで画像からテキストを抽出する: 画像2 - 複数ページのTIFF OCR出力.
CODE-50409--フラットベッドスキャナによって生じる傾きを補正するために、画像を回転させます。 CODE-50410は、Tesseractエンジンを混乱させる斑点やJPEGアーチファクトを除去します。これら2つの前処理フィルターを併用することで、低品質スキャンにおける認識精度が大幅に向上します。
難しい原文には、追加のOcrInputフィルタが利用可能です:
- CODE-50412--ぼやけた画像のエッジコントラストを向上させます。
- CODE-50413---ファックス品質のドキュメントをモノクロに変換します。
- --CODE-50414--@@ -- 小さな画像をアップスケールして、よりよい文字分離を実現します。
- CODE-50415----回転したドキュメントの向きを修正します。
前処理オプションの全リストと適用時期については、 IronOCR画像フィルタガイドを参照してください。
OCRの言語サポートはどのように設定するのですか?
IronOCRはデフォルトでは英語のテキストを読み取ります。 他の言語のドキュメントを処理するには、一致する言語のNuGetパッケージをインストールし、LanguageプロパティをIronTesseractインスタンスに設定します。
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
次にエンジンを設定し、バイリンガル文書の場合は、第二言語を追加します。
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);
Imports IronOcr
Imports IronOcr.Languages
Dim ocr As New IronTesseract()
ocr.Language = OcrLanguage.German
' For bilingual documents (e.g. Canadian forms, EU directives)
ocr.AddSecondaryLanguage(OcrLanguage.French)
Using input As New OcrInput()
input.LoadImage("german-invoice.png")
Dim result As OcrResult = ocr.Read(input)
Console.WriteLine(result.Text)
End Using
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}");
}
Imports IronOcr
Dim ocr As New IronTesseract()
ocr.Language = OcrLanguage.English
Try
Using input As New OcrInput()
input.LoadImage("document.png")
input.DeNoise()
input.Deskew()
Dim result As OcrResult = ocr.Read(input)
If result.Text.Length > 0 Then
Console.WriteLine("Recognised text:")
Console.WriteLine(result.Text)
Else
Console.WriteLine("No text was detected in the image.")
End If
End Using
Catch ex As Exception
Console.WriteLine($"OCR error: {ex.Message}")
End Try
精度が期待値よりも低い場合に役立つ追加設定をいくつかご紹介します。
- CODE-50419--@@ -- Tesseractで、1カラム、複数カラム、1ワードのレイアウトを自動的に選択できる。
- --CODE-50420--@@ -- テキストのみのドキュメントを処理しており、より高速なスループットが必要な場合、BarCode検出を無効にします。
- CODE-50421 -- -- 利用可能な最速のエンジンを使用することを保証します。
フィールドが予測可能な位置に表示される構造化フォームの場合は、領域ベースの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);
Imports IronOcr
Imports IronSoftware.Drawing
Dim ocr As New IronTesseract()
Using input As New OcrInput()
Dim region As New CropRectangle(x:=50, y:=200, width:=600, height:=100)
input.LoadImage("form.png", region)
Dim result As OcrResult = ocr.Read(input)
Console.WriteLine(result.Text)
End Using
認識対象を切り抜き領域に限定することで、大きな画像の場合、処理時間を最大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}");
Imports IronOcr
Dim ocr As New IronTesseract()
Using input As New OcrInput()
input.Title = "Quarterly Report Q1 2026"
input.LoadImage("page1.png")
input.LoadImage("page2.png")
input.LoadImage("page3.png")
Dim result As OcrResult = ocr.Read(input)
result.SaveAsSearchablePdf("searchable-output.pdf")
Console.WriteLine("Searchable PDF created.")
Console.WriteLine($"Pages processed: {result.Pages.Count}")
End Using
検索可能なPDFドキュメントを出力する。
OCR in C# CodeProject Tutorial:IronOCRで画像からテキストを抽出:画像3 - 入力画像から検索可能なPDFを作成
CODE-50422--@@は、認識された各単語が元の画像の正確なピクセル座標に配置されたPDF/A互換ファイルを作成します。 Adobe Acrobat、macOS版プレビュー、およびFoxit Readerはすべて、これらのファイルが生成された直後に全文検索をサポートしています。
ウェブベースのドキュメントビューアや下流のNLPパイプラインについては、代わりにresult.SaveAsHocrFile("output.hocr")を使用してください。 hOCRフォーマットは、テキストとともに単語ごとの境界ボックスをエンコードするオープンなXML標準であり、クライアント側での検索時のハイライト表示や単語レベルのアクセシビリティ注釈を可能にします。
その他の出力形式は、OcrResultから入手可能です:
- --CODE-50425--@@ -- hOCR XML(位置データ付き
- CODE-50426--@@ -- プログラム処理用のLINQクエリ可能なXDocument
- ストリーミングパイプラインのための1ページあたりのプレーンテキスト
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}");
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
サポートされているバーコード形式には、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 コンピュータービジョンなどのクラウドサービスを検討します。 以下の表は、主な相違点をまとめたものです。
| 基準 | 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ドキュメントホーム-- 完全なAPIリファレンスと機能ガイド -画像フィルターチュートリアル-- すべての前処理フィルターの詳細ガイド -バーコード読み取りガイド- QRコードとテキスト付きリニアバーコード -領域OCRの使い方- フォームやIDの切り抜き認識 -言語リファレンス-- サポートされている125以上の言語の完全なリスト
- APIリファレンス-- すべてのクラス、メソッド、およびプロパティ
ライセンスに関するご質問や、 IronOCRを本番環境に導入する方法については、 IronOCRのライセンスページをご覧ください。 無料トライアルライセンスを利用すると、評価期間中は出力物にウォーターマークが表示されなくなります。また、Iron Softwareのサポートチームは、どのプランをご利用の場合でも技術的なご質問にお答えします。
よくある質問
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 の生成、フォーム フィールドの読み取り、出荷ラベルの処理、医療記録のデジタル化、アクセシビリティ ツールで使用されます。



