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

IronOCRを使って C# GitHubプロジェクトに OCR を実装する方法

GitHubでOCRソリューションを検索すると、断片的なドキュメント、複雑なTesseractの設定、何年も更新されていないプロジェクトなどが見つかることが多い。 画像やPDFから信頼性の高いテキスト抽出を必要とするC#開発者にとって、リポジトリのエコシステムを探し回ることは、コーディングに費やすべき時間を何時間も浪費することになる。 多くのオープンソースの光学文字認識プロジェクトでは、バイナリファイルの管理、tessdataファイルのダウンロード、プラットフォーム固有のトラブルシューティングを手動で行う必要がある。

このチュートリアルでは、Tesseractの生のラッパーにありがちな設定の手間を省くマネージドライブラリであるIronOCRを使用して、C#プロジェクトでOCR機能を実装する方法を説明します。 文書処理パイプラインの構築であれ、既存のアプリケーションへのテキスト認識機能の追加であれ、このガイドはあらゆるOCR C# GitHubプロジェクトですぐに使える動作コード例を提供します。

IronOCRを使い始めるにはどうすればよいですか?

IronOCRは、NuGet経由で配布されるマネージド.NETライブラリを提供し、どのGitHubリポジトリにも簡単に統合できます。 バイナリやtessdataの設定を手動で管理する必要があるオープンソースのTesseract OCRラッパーとは異なり、 IronOCRはこれらの依存関係を内部的に処理し、Windows、Linux、macOSでそのまま動作します。

ライブラリは、GitHub上に公式のサンプルリポジトリを保持しており、開発者がクローンして参照することができます。 これらの例は、 画像からテキストへの変換、多言語対応、PDF処理など、実際の運用における実装例を示しています。 貢献者は、クローン作成後すぐに、追加の設定なしで機能をテストできます。

Visual Studioで始めるには、NuGetパッケージ・マネージャからIronOCRをインストールしてください:

Install-Package IronOcr
Install-Package IronOcr
SHELL

OCR C# GitHub: IronOCRを使用したテキスト認識の実装 : 画像 1 - インストール

インストールが完了すれば、この単一パッケージにはOCR操作に必要なすべてが揃っています。 このライブラリは、 .NET Framework 4.6.2以降、 .NET Core、および.NET 5から10までをサポートしており、あらゆる種類のプロジェクトで最大限の互換性を実現しています。

C#で画像フォーマットからテキストを抽出するにはどうすればよいですか?

次の例は、IronOCR の IronTesseract クラスを使用した基本的なテキスト抽出を示しています。 このOCRエンジンは、PNG、JPG、JPEG、BMP、GIF、TIFFなど、さまざまな画像フォーマットを読み取ります:

using IronOcr;

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

// Load and process an image
using var input = new OcrInput("document-scan.png");

// Perform OCR and retrieve results
var result = ocr.Read(input);

// Output the extracted text to console
Console.WriteLine($"Extracted Text:\n{result.Text}");
Console.WriteLine($"Confidence: {result.Confidence}%");
using IronOcr;

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

// Load and process an image
using var input = new OcrInput("document-scan.png");

// Perform OCR and retrieve results
var result = ocr.Read(input);

// Output the extracted text to console
Console.WriteLine($"Extracted Text:\n{result.Text}");
Console.WriteLine($"Confidence: {result.Confidence}%");
$vbLabelText   $csharpLabel

IronTesseract クラスは、最適化された Tesseract 5 実装に基づいて構築された、主要な OCR エンジンとして機能します。 インスタンスを作成した後、OcrInput オブジェクトは、ディスク、URL、またはバイト配列からターゲットイメージを読み込みます。 Read メソッドは入力を処理し、抽出されたプレーンテキストと認識精度を示す信頼度パーセンテージを含むOcrResultを返します。 信頼度の値が高い(90%以上)ほど、ソース文書がきれいで、書式が整っていることを意味します。

OcrResult オブジェクトは、認識されたコンテンツへの構造化されたアクセスを提供します。 開発者は、プレーンテキストだけでなく、個々の単語、行、段落、文字、およびそれらの位置と信頼度スコアにアクセスすることができます。 各 Word には境界矩形の座標が含まれているため、文書注釈やフォームフィールド抽出など、正確なテキスト位置データが必要なアプリケーションにとって価値があります。

入力

OCR C# GitHub: IronOCRを使用したテキスト認識の実装 : 画像 2 - サンプル入力

出力

OCR C# GitHub: IronOCRを使用したテキスト認識の実装 : 画像 3 - コンソール出力

IronOCRは、ストリームやバイト配列から画像を読み込む機能もサポートしており、ファイルアップロードを受け付けるWebアプリケーションにおいて特に役立ちます。 これは、OCR処理をディスクに一時ファイルを書き込むことなく完全にメモリ内で実行できることを意味し、高スループット環境における入出力のオーバーヘッドを削減します。

OCR C# GitHub: IronOCRを使用したテキスト認識の実装 : 画像 4 - 機能

画像の前処理は光学式文字認識の精度をどのように向上させますか?

スキャンされた文書は、歪んでいたり、ノイズが多かったり、最適な解像度ではないことがよくあります。 IronOCRには、OCRエンジンが画像を処理する前にこれらの問題を修正する組み込みの前処理フィルターが含まれています。

using IronOcr;

var ocr = new IronTesseract();
using var input = new OcrInput("skewed-receipt.jpg");

// Apply preprocessing filters to enhance scan quality
input.Deskew();                    // Straighten rotated images
input.DeNoise();                   // Remove digital artifacts
input.EnhanceResolution(225);      // Optimize DPI for OCR

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

var ocr = new IronTesseract();
using var input = new OcrInput("skewed-receipt.jpg");

// Apply preprocessing filters to enhance scan quality
input.Deskew();                    // Straighten rotated images
input.DeNoise();                   // Remove digital artifacts
input.EnhanceResolution(225);      // Optimize DPI for OCR

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

Deskew メソッドは、最大 15 度までの画像回転を自動的に検出して補正し、スキャナー上でページがわずかに中心からずれて配置されているという一般的なケースに対応します。 DeNoise フィルターは、写真に撮られた文書や古いスキャン画像によく見られる斑点やアーティファクトを除去します。 EnhanceResolution は、低 DPI の画像を 200~300 DPI の範囲にアップスケールします。これは、光学文字認識の精度に最適です。

これらのフィルターは連結して使用でき、一時ファイルを必要とせずに完全にメモリ上で実行できます。 多くの場合、複数の前処理ステップを適用することで、インクの退色、背景ノイズ、カメラの歪みなど、品質に深刻な問題がある文書のテキスト認識結果を大幅に改善できます。 この改善効果は、150 DPI未満でスキャンされた文書や、照明条件が均一でない状況で撮影された写真で最も顕著に現れます。

関心領域クロッピングは、パフォーマンス向上にどのように役立つのでしょうか?

画像の一部にのみ関連するテキストが含まれている文書の場合、切り抜き領域を定義することで、処理時間と背景ノイズによる誤検出の可能性の両方を削減できます。

using IronOcr;
using IronSoftware.Drawing;

var ocr = new IronTesseract();
using var input = new OcrInput("invoice.png");

// Define crop region (x, y, width, height in pixels)
var cropArea = new CropRectangle(50, 100, 600, 300);
input.AddRegion(cropArea);

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

var ocr = new IronTesseract();
using var input = new OcrInput("invoice.png");

// Define crop region (x, y, width, height in pixels)
var cropArea = new CropRectangle(50, 100, 600, 300);
input.AddRegion(cropArea);

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

特定の領域をターゲットにすることは、請求書やフォームなどの構造化された文書を処理する際に特に有効です。これらの文書では、テキストフィールドの位置が既知だからです。 この手法を用いることで、画像全体を対象とした解析と比較して、OCR処理時間を40~70%短縮できる。短縮できるかどうかは、画像中の無関係な部分の割合によって異なる。

テキストと一緒に BarCode や QR コードを抽出できますか?

IronOCRは、同一文書内のテキスト認識とバーコードスキャンを同時に行うことができます。 この二重機能は、請求書、配送ラベル、在庫書類の処理に役立ちます。

using IronOcr;

var ocr = new IronTesseract();
ocr.Configuration.ReadBarCodes = true;  // Enable barcode detection

using var input = new OcrInput("shipping-label.png");
var result = ocr.Read(input);

// Access extracted text
Console.WriteLine($"Text: {result.Text}");

// Access any barcodes found in the image
foreach (var barcode in result.Barcodes)
{
    Console.WriteLine($"Barcode ({barcode.Format}): {barcode.Value}");
}
using IronOcr;

var ocr = new IronTesseract();
ocr.Configuration.ReadBarCodes = true;  // Enable barcode detection

using var input = new OcrInput("shipping-label.png");
var result = ocr.Read(input);

// Access extracted text
Console.WriteLine($"Text: {result.Text}");

// Access any barcodes found in the image
foreach (var barcode in result.Barcodes)
{
    Console.WriteLine($"Barcode ({barcode.Format}): {barcode.Value}");
}
$vbLabelText   $csharpLabel

ReadBarCodestrue に設定すると、処理時間に大きな影響を与えることなくバーコード検出が有効になります。結果の Barcodes コレクションには、検出された各バーコードの値とフォーマットタイプが含まれます。 対応フォーマットには、QRコード、Code 128、EAN-13、UPC、Data Matrix、およびPDF417が含まれます。このデュアル機能により、人間が読めるテキストと機械が読めるコードの両方を含む文書を処理する際に、個別のバーコードスキャンライブラリを用意する必要がなくなります。

入力

OCR C# GitHub: IronOCRを使用したテキスト認識の実装 : 画像 5 - サンプル バーコード画像

出力

OCR C# GitHub: IronOCRを使用したテキスト認識の実装 : 画像 6 - コンソール バーコード テキスト出力

倉庫管理や物流アプリケーションにおいては、テキストとバーコードの抽出を一度の処理で行うことにより、API呼び出し回数を削減し、アプリケーションアーキテクチャを簡素化できます。 単一の Read 操作により、印刷されたテキスト、手書き文字、または機械で読み取り可能なコードなど、ドキュメントから認識可能なすべてのデータが返されます。 OcrResult.Barcodes プロパティは型付きコレクションを公開するため、下流のコードはフォーマット固有の解析ロジックなしで結果を反復処理できます。

スキャンした画像から検索可能なPDFを生成するには?

スキャンした文書を検索可能なPDFに変換することで、文書管理システム内でテキストの選択、コピー、全文検索が可能になります。 さまざまな画像フォーマットを入力として使用します:

using IronOcr;

var ocr = new IronTesseract();
using var input = new OcrInput("scanned-contract.tiff");
var result = ocr.Read(input);

// Export as searchable PDF with invisible text layer
result.SaveAsSearchablePdf("contract-searchable.pdf");
using IronOcr;

var ocr = new IronTesseract();
using var input = new OcrInput("scanned-contract.tiff");
var result = ocr.Read(input);

// Export as searchable PDF with invisible text layer
result.SaveAsSearchablePdf("contract-searchable.pdf");
$vbLabelText   $csharpLabel

SaveAsSearchablePdf メソッドは、認識されたコンテンツに一致する目に見えないテキスト レイヤーを埋め込むことで、元のドキュメントの外観を維持しながらテキスト操作を可能にします。 これにより、アーカイブシステムやEnterprise文書管理システムに適した文書が生成されます。 IronOCRは、下流システムとの連携のために、結果をHTMLまたはJSON形式でエクスポートすることもサポートしています。

複数ページの文書の場合、 IronOCRは各ページを個別に処理し、出力を1つのファイルにまとめます。複数のフレームを含むTIFFファイルは自動的に処理されるため、スキャンした文書アーカイブの一括変換が容易になります。 生成されたPDFファイルは、元のスキャン画像の視覚的なレイアウトを保持しつつ、埋め込まれたテキストレイヤーによって、あらゆるPDFビューアや文書管理プラットフォームで各ページを完全に検索可能にします。

IronOCRを多言語アプリケーションでどのように活用しますか?

IronOCRは、英語、スペイン語、フランス語、ドイツ語、中国語、日本語、アラビア語など、 125以上の言語に対応しています。 言語パックはNuGetを通じて個別のパッケージとしてインストールされるため、コアライブラリは軽量に保たれます。

using IronOcr;

// Install-Package IronOcr.Languages.French
var ocr = new IronTesseract();
ocr.Language = OcrLanguage.French;

using var input = new OcrInput("french-document.png");
var result = ocr.Read(input);
Console.WriteLine(result.Text);
using IronOcr;

// Install-Package IronOcr.Languages.French
var ocr = new IronTesseract();
ocr.Language = OcrLanguage.French;

using var input = new OcrInput("french-document.png");
var result = ocr.Read(input);
Console.WriteLine(result.Text);
$vbLabelText   $csharpLabel

IronOCRは、同一ページに複数の言語が含まれる文書の場合、複数の言語モデルを同時に読み込むことをサポートしています。 これは、複数の地域からの文書を言語別に事前に分類することなく処理する国際化アプリケーションにとって重要です。 各言語パックはコアライブラリと並行して維持され、同じ前処理機能と出力機能をサポートしています。

GitHubプロジェクトにおけるOCRのベストプラクティスは何ですか?

GitHub上でOCRプロジェクトを管理する際、いくつかの組織的な決定を行うことで、貢献者の体験とプロジェクトの長期的な健全性を向上させることができます。 これらの手法は、小規模なユーティリティスクリプトを構築する場合でも、大規模なEnterprise文書処理サービスを構築する場合でも適用されます。

リポジトリのサイズが肥大化するのを避けるため、大規模なテストイメージにはGit LFSを使用してください。標準のGit履歴にバイナリアセットがあると、特にテストデータセットに高解像度スキャンが含まれている場合、クローン時間とストレージコストが増大します。 ライセンスキーは環境変数またはGitHub Secretsに保存し、コミットされたC#コードには絶対に保存しないでください。 設定手順については、ライセンスキー設定ガイドを参照してください。

サンプル画像を専用のtest-dataフォルダに含めて、貢献者が自分のドキュメントを用意することなくOCR機能を検証できるようにします。 READMEファイルにサポートされている画像フォーマットと.NETバージョンの要件を記載することで、導入時の質問を減らすことができます。 GitHub Actionsを使用してCIパイプラインでテストを構築および実行し、ライブラリがターゲット環境全体で正しく機能することを確認します。

GitHub Actionsワークフローの場合、 IronOCRはWindowsとLinuxの両方のランナー上でコンテナ化された環境で実行されます。 Ubuntuやその他のWindows以外のランナーをターゲットとする場合は、設定の詳細についてはLinuxデプロイメントガイドを参照してください。

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

IronOCRは、外部バイナリに依存することなく、Tesseractの設定、前処理、バーコード検出、多言語サポートを処理するNuGetで配布されるライブラリを通じて、C# GitHubプロジェクトに信頼性の高いテキスト認識機能を提供します。 このガイドのコード例は、基本的なテキスト抽出、画像前処理、バーコードスキャン、検索可能なPDFの作成、多言語処理といった主要なユースケースを網羅しています。

全機能を体験するには、時間制限やクレジットカード情報の入力不要の無料トライアルをお試しください。 本番環境への展開準備が整ったら、個人開発者からEnterpriseチームまでを対象とするライセンスオプションを確認してください。

知識を深めるための関連リソース:

OCR C# GitHub: IronOCRを使用したテキスト認識の実装 : 画像 7 - ライセンス

よくある質問

IronOCRとは何ですか?

IronOCRは、最適化されたTesseract 5エンジンを使用して画像やPDFからテキストを抽出する、C#用 for .NET OCRライブラリです。NuGetNuGetでインストールされ、バイナリ依存関係は内部で処理されるため、手動でのTessdata設定は不要です。

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

Visual Studio のNuGetパッケージ マネージャー コンソールで ` Install-Package IronOCR ` を実行するか、 NuGetパッケージ マネージャー UI を使用してIronOCRを検索してください。パッケージには、Windows、Linux、macOS に必要なすべてのバイナリが含まれています。

IronOCR はLinux のGitHub Actions で動作しますか?

はい、 IronOCRはGitHub ActionsでLinuxランナーをサポートしています。Ubuntuやその他のディストリビューションで必要なパッケージ依存関係については、Linuxデプロイメントガイド(https://ironsoftware.com/csharp/ocr/how-to/linux/)をご覧ください。

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

はい。Read() を呼び出す前に ocr.Configuration.ReadBarCodes = true に設定してください。OcrResult.Barcodes コレクションには、検出された各コードの値と形式が含まれており、QR、Code 128、EAN-13、UPC、Data Matrix、PDF417 をサポートしています。

スキャンした画像から検索可能な PDF を生成するにはどうすればよいですか?

ocr.Read(input) を呼び出した後、 result.SaveAsSearchablePdf("output.pdf") を使用して、元のスキャンデータの上に非表示のテキストレイヤーを追加した PDF を作成します。出力はアーカイブやエンタープライズ文書管理システムに適しています。

IronOCR は英語以外の言語をサポートしていますか?

はい。IronOCRは専用のNuGet言語パックを通じて125以上の言語をサポートしています。言語パッケージ(例: Install-Package IronOcr.Languages.French)をインストールし、処理前にocr.Language = OcrLanguage.Frenchを設定してください。

IronOCRライセンスキーをGitHubリポジトリに保存するにはどうすればよいですか?

ライセンスキーはGitHub Secretsに保存し、 GitHub Actionsワークフローに環境変数として挿入してください。ライセンスキー文字列をC#コードやappsettingsファイルに直接コミットしないでください。

IronOCRはどのような画像形式をサポートしていますか?

IronOCRは、PNG、JPG、JPEG、BMP、GIF、TIFF(マルチフレームを含む)、PDF、その他の一般的な形式をサポートしています。画像は、ファイルパス、URL、ストリーム、またはバイト配列から読み込むことができます。

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

アイアンサポートチーム

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