C#で画像文字認識・テキスト抽出を行う方法 with IronOCR
IronOCRは光学式文字認識技術を使用して、JPG、PNG、GIF、TIFF、BMP形式の画像から文字起こし・テキスト抽出を行います。 基本的なテキスト抽出は、NuGetパッケージをインストールした後、わずか1行のコードが必要です。
OCR(光学式文字認識)技術は、画像からテキストを認識・抽出する技術です。 スキャンしたページ、写真、その他の画像ファイルからテキストコンテンツを抽出し、印刷文書をデジタル化します。 IronOCRはTesseract 5の高度な機械学習アルゴリズムと独自の画像前処理を組み合わせ、業界をリードする精度を実現しています。
このライブラリはjpg、png、gif、tiff、bmp形式をサポートしています。 画像フィルタは、一般的な品質問題を自動補正することで、読み取り能力を向上させます。 C#OCRは、Tesseract 5と高度な前処理を組み合わせることで、高解像度スキャンから圧縮されたウェブ画像まで、さまざまな画像品質やフォーマットにおいて正確な結果を提供します。
クイックスタート: IronOCR で画像ファイルを読み取る
1行のコードで画像からテキストを抽出します。 この例では、画像を読み込み、Readメソッドを使用してそのテキストを読み取ります。 このライブラリは、画像の前処理とテキストの抽出を自動的に行います。
- 画像を読み取るためのC#ライブラリをダウンロードする
- jpg、png、gif、tiff、bmp形式の画像をサポートすること。
- **OcrImageInput**クラスをインスタンス化して画像を入力します
- 入力画像に対してOCRを実行するには`Read`メソッドを使用します
- 読み取り領域を定義するためにトリミング領域を指定します
IronOCRで画像を読むには?
まず、IronTesseractクラスをインスタンス化します。 'using'ステートメントを使用して、画像ファイルパスを持つOcrImageInputオブジェクトを作成します。 これにより、適切なリソース廃棄が保証されます。 IronOCRはjpg、png、gif、tiff、bmpフォーマットをサポートしています。 ReadメソッドでOCRを実行します。 ライブラリは自動的に画像フォーマットを検出し、適切な前処理を適用します。
新規ユーザーについては、Windows用インストールガイドを参照するか、NuGetパッケージオプションを探索してください。 クロスプラットフォーム開発については、LinuxセットアップまたはmacOSインストールを確認してください。
- TIFF 画像の読み込みのパフォーマンスが一貫して向上しました。
- TIFF画像の読み込みでは、マシンのGPUに依存するパフォーマンスの向上が見られます。 最大2倍の速度を体験するユーザーもいれば、以前のバージョンと同様のパフォーマンスを体験するユーザーもいます。
/* :path=/static-assets/ocr/content-code-examples/how-to/input-images-read.cs */
using IronOcr;
// Instantiate IronTesseract
IronTesseract ocrTesseract = new IronTesseract();
// Add image
using var imageInput = new OcrImageInput("Potter.png");
// Perform OCR
OcrResult ocrResult = ocrTesseract.Read(imageInput);
// Display the extracted text
Console.WriteLine(ocrResult.Text);
// Get confidence level
double confidence = ocrResult.Confidence;
Console.WriteLine($"Confidence: {confidence}%");
/* :path=/static-assets/ocr/content-code-examples/how-to/input-images-read.cs */
using IronOcr;
// Instantiate IronTesseract
IronTesseract ocrTesseract = new IronTesseract();
// Add image
using var imageInput = new OcrImageInput("Potter.png");
// Perform OCR
OcrResult ocrResult = ocrTesseract.Read(imageInput);
// Display the extracted text
Console.WriteLine(ocrResult.Text);
// Get confidence level
double confidence = ocrResult.Confidence;
Console.WriteLine($"Confidence: {confidence}%");
Imports IronOcr
' Instantiate IronTesseract
Dim ocrTesseract As New IronTesseract()
' Add image
Using imageInput As New OcrImageInput("Potter.png")
' Perform OCR
Dim ocrResult As OcrResult = ocrTesseract.Read(imageInput)
' Display the extracted text
Console.WriteLine(ocrResult.Text)
' Get confidence level
Dim confidence As Double = ocrResult.Confidence
Console.WriteLine($"Confidence: {confidence}%")
End Using
TIFFとGIF画像の読み方については、マルチフレーム/ページGIFとTIFFの読み方をご覧ください。 複数ページについては、複数ページTIFF処理例を参照してください。
なぜ信頼度が重要なのですか?
信頼度はIronOCRが抽出したテキストの正確さについて確信を持っていることを示します。 一般的に、85%以上の値は信頼できる結果を示します。 スコアが低い場合、画像の前処理や手作業によるレビューが必要になることがあります。 信頼度スコアを使用して、人間による検証のためにドキュメントに自動的にフラグを立てたり、追加の画像最適化フィルタをトリガしたりします。
どのような場合に異なる画像フォーマットを使用すべきですか?
PNGとTIFF形式は、可逆圧縮により最高のOCR結果を提供します。 単一ページのドキュメントにはPNGを、複数ページのスキャンにはTIFFを使用してください。 JPEGは写真には適していますが、圧縮アーチファクトが発生する可能性があります。 BMPは非圧縮の品質を提供しますが、ファイルサイズが大きくなります。 GIFは、色を限定したシンプルなグラフィックに適しています。 フォーマット固有の最適化について詳しくは、こちらをご覧ください。
一般的な画像の読み取りエラーとは
よくあるエラーとしては、画像の解像度が低い(200DPI以下)、テキストが傾いている、コントラストが低い、サポートされていない言語などがあります。 IronOCRは多くの問題に対して自動修正機能を提供しますが、深刻な問題に対しては手作業による前処理が必要になる場合があります。 解決策については、トラブルシューティングガイドを参照してください。
画像をバイトとしてインポートするにはどうすればよいですか?
AnyBitmap、ストリーム、またはImageオブジェクトとして画像を受け入れます。 AnyBitmapはIronSoftware.Drawing.AnyBitmapからのビットマップオブジェクトです。 この柔軟性により、データベース、Web API、クラウドストレージなど、さまざまなデータソースとのシームレスな統合が可能になります。
この柔軟性は、データベース、ウェブサービス、メモリストリームからの画像を扱う際に役立ちます。 高度なストリーム処理については、OCR with input streamsを参照してください。 System.Drawing統合ガイドは、レガシーコードとの互換性のための追加例を提供します。
:path=/static-assets/ocr/content-code-examples/how-to/input-images-import-byte.cs
using IronOcr;
using System.IO;
// Instantiate IronTesseract
IronTesseract ocrTesseract = new IronTesseract();
// Read byte from file
byte[] data = File.ReadAllBytes("Potter.tiff");
// Import image byte
using var imageInput = new OcrImageInput(data);
// Perform OCR
OcrResult ocrResult = ocrTesseract.Read(imageInput);
Imports IronOcr
Imports System.IO
' Instantiate IronTesseract
Private ocrTesseract As New IronTesseract()
' Read byte from file
Private data() As Byte = File.ReadAllBytes("Potter.tiff")
' Import image byte
Private imageInput = New OcrImageInput(data)
' Perform OCR
Private ocrResult As OcrResult = ocrTesseract.Read(imageInput)
ファイル パスの代わりにバイト配列を使用する必要があるのはどのような場合ですか?
バイト配列は、データベース、ウェブサービス、暗号化されたソースからの画像に最適です。 ファイルは一時的なディスクストレージを必要としないため、より優れたセキュリティを提供します。 クラウドアプリケーション、マイクロサービス、機密文書の処理にはバイト配列を使用します。 ファイルパスは、大規模な画像コレクションのローカルバッチ処理において、より効率的なままであること。
using IronOcr;
using IronSoftware.Drawing;
using System.IO;
// Method 1: From URL
var imageFromUrl = AnyBitmap.FromUri("https://example.com/document.jpg");
using var urlInput = new OcrImageInput(imageFromUrl);
// Method 2: From Stream
using var fileStream = File.OpenRead("document.png");
using var streamInput = new OcrImageInput(fileStream);
// Method 3: From System.Drawing (with IronSoftware.Drawing)
var bitmap = AnyBitmap.FromFile("scan.bmp");
using var bitmapInput = new OcrImageInput(bitmap);
// Process any of these inputs
IronTesseract ocr = new IronTesseract();
OcrResult result = ocr.Read(bitmapInput);
using IronOcr;
using IronSoftware.Drawing;
using System.IO;
// Method 1: From URL
var imageFromUrl = AnyBitmap.FromUri("https://example.com/document.jpg");
using var urlInput = new OcrImageInput(imageFromUrl);
// Method 2: From Stream
using var fileStream = File.OpenRead("document.png");
using var streamInput = new OcrImageInput(fileStream);
// Method 3: From System.Drawing (with IronSoftware.Drawing)
var bitmap = AnyBitmap.FromFile("scan.bmp");
using var bitmapInput = new OcrImageInput(bitmap);
// Process any of these inputs
IronTesseract ocr = new IronTesseract();
OcrResult result = ocr.Read(bitmapInput);
Imports IronOcr
Imports IronSoftware.Drawing
Imports System.IO
' Method 1: From URL
Dim imageFromUrl = AnyBitmap.FromUri("https://example.com/document.jpg")
Using urlInput As New OcrImageInput(imageFromUrl)
' Method 2: From Stream
Using fileStream As FileStream = File.OpenRead("document.png")
Using streamInput As New OcrImageInput(fileStream)
' Method 3: From System.Drawing (with IronSoftware.Drawing)
Dim bitmap = AnyBitmap.FromFile("scan.bmp")
Using bitmapInput As New OcrImageInput(bitmap)
' Process any of these inputs
Dim ocr As New IronTesseract()
Dim result As OcrResult = ocr.Read(bitmapInput)
End Using
End Using
End Using
End Using
なぜイメージ バイトではメモリ管理が重要なのですか?
大きな画像は、特に複数のドキュメントを同時に処理する場合、大きなメモリを消費します。 using'ステートメントを使用することで、適切なリソースの廃棄を保証します。 バッチ処理については、同時処理を制限したキューシステムの実装を検討してください。 マルチスレッドガイドは、効率的なメモリ管理テクニックを示しています。
異なる入力タイプのパフォーマンスへの影響は何ですか?
IronOCRはデータを直接読み込むため、ファイルパスはローカルファイルに対して最速のパフォーマンスを提供します。 バイト配列は、画像全体をメモリにロードする必要がありますが、柔軟性があります。 ストリームは、データをインクリメンタルに読み込むことで、メモリ使用量とパフォーマンスのバランスをとります。 大規模バッチでの最適なパフォーマンスについては、パフォーマンス・チューニング・ガイドを参照してください。
スキャン領域を指定するにはどうすればよいですか?
CropRectangleを渡すと、処理する画像領域を指定できます。 スキャン範囲を限定することで、パフォーマンスが大幅に向上します。 以下の例では、章番号とタイトルだけを読み上げています。 この手法では、特定の文書領域をターゲットにする場合、処理時間を最大90%短縮できます。
複雑なレイアウトや複数のリージョンについては、OCR Region of an Imageを参照してください。 コンテンツ領域ガイドでは、高度な領域選択テクニックを説明しています。
:path=/static-assets/ocr/content-code-examples/how-to/input-images-read-specific-region.cs
using IronOcr;
using IronSoftware.Drawing;
using System;
// Instantiate IronTesseract
IronTesseract ocrTesseract = new IronTesseract();
// Specify crop region
Rectangle scanRegion = new Rectangle(800, 200, 900, 400);
// Add image
using var imageInput = new OcrImageInput("Potter.tiff", ContentArea: scanRegion);
// Perform OCR
OcrResult ocrResult = ocrTesseract.Read(imageInput);
// Output the result to console
Console.WriteLine(ocrResult.Text);
Imports IronOcr
Imports IronSoftware.Drawing
Imports System
' Instantiate IronTesseract
Private ocrTesseract As New IronTesseract()
' Specify crop region
Private scanRegion As New Rectangle(800, 200, 900, 400)
' Add image
Private imageInput = New OcrImageInput("Potter.tiff", ContentArea:= scanRegion)
' Perform OCR
Private ocrResult As OcrResult = ocrTesseract.Read(imageInput)
' Output the result to console
Console.WriteLine(ocrResult.Text)
なぜリージョンを指定するとパフォーマンスが向上するのですか?
関連する画像領域のみを処理することで、計算オーバーヘッドを60~90%削減します。 OCRエンジンは入力領域のすべてのピクセルを分析するため、領域が小さいほど処理が速くなります。 また、このアプローチは、ヘッダー、フッター、またはターゲットテキスト領域外の装飾要素による潜在的な干渉を排除することで、精度を向上させます。
いつ複数のスキャン領域を使用する必要がありますか?
フォーム、請求書、複数カラムのレイアウトなど、テキストエリアが分かれているドキュメントには、複数のリージョンを使用します。 論理的なテキストの流れを維持するために、各領域を別々に処理します。 このアプローチは、テーブルデータの抽出や、構造化ドキュメントから特定のフィールドを読み取る場合に効果的です。
座標系の規約は何ですか?
IronOCRは左上を原点(0,0)とする標準ピクセル座標を使用します。 Xは右方向に、Yは下方向に増加します。 長方形のパラメータは(X、Y、幅、高さ)です。 正確な領域選択のためには、画像編集ツールを使ってピクセル座標を特定するか、アプリケーションに視覚的な領域セレクタを実装してください。
高度な画像処理はどのように適用できますか?
IronOCRはOCR精度を向上させる包括的な画像前処理機能を提供します。 低画質画像、スキャン文書、または困難な条件を扱う場合は、フィルタを適用します。 フィルタウィザードは、特定の画像に最適なフィルタの組み合わせを決定するのに役立ちます。
using IronOcr;
IronTesseract ocr = new IronTesseract();
using var input = new OcrImageInput("low-quality-scan.jpg");
// Apply image enhancement filters
input.Deskew(); // Correct image rotation
input.DeNoise(); // Remove background noise
input.Binarize(); // Convert to black and white
input.EnhanceResolution(300); // Adjust DPI for better accuracy
// Configure for better accuracy
ocr.Configuration.WhiteListCharacters = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
ocr.Configuration.Language = OcrLanguage.English;
OcrResult result = ocr.Read(input);
using IronOcr;
IronTesseract ocr = new IronTesseract();
using var input = new OcrImageInput("low-quality-scan.jpg");
// Apply image enhancement filters
input.Deskew(); // Correct image rotation
input.DeNoise(); // Remove background noise
input.Binarize(); // Convert to black and white
input.EnhanceResolution(300); // Adjust DPI for better accuracy
// Configure for better accuracy
ocr.Configuration.WhiteListCharacters = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
ocr.Configuration.Language = OcrLanguage.English;
OcrResult result = ocr.Read(input);
Imports IronOcr
Dim ocr As New IronTesseract()
Using input As New OcrImageInput("low-quality-scan.jpg")
' Apply image enhancement filters
input.Deskew() ' Correct image rotation
input.DeNoise() ' Remove background noise
input.Binarize() ' Convert to black and white
input.EnhanceResolution(300) ' Adjust DPI for better accuracy
' Configure for better accuracy
ocr.Configuration.WhiteListCharacters = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
ocr.Configuration.Language = OcrLanguage.English
Dim result As OcrResult = ocr.Read(input)
End Using
画像最適化フィルターと低品質スキャンの修正について学んでください。 色補正のニーズについては、画像色補正ガイドを参照してください。
画像前処理フィルタはいつ適用すべきですか?
スキャンした文書、テキストの写真、品質に問題のある画像を扱う場合は、フィルタを適用します。 よくあるシナリオとしては、傾いたページの修正、コピーからの背景ノイズの除去、色あせたテキストの強調などがあります。 DPI設定ガイドは、解像度関連の問題を最適化するのに役立ちます。
なぜフィルタの順序が重要なのですか?
フィルタの順序は結果に大きく影響します。 最初に回転補正 (Deskew) を適用し、その後にノイズ除去を行い、次にコントラストを強化します。 2値化は通常、最後に行う必要があります。例えば、ノイズ除去の前にシャープネス処理を行うと、ノイズが目立ちやすくなります。 最適な結果を得るために、さまざまなシーケンスをテストしてください。
よくある前処理の間違いは何ですか?
過剰な処理は、最も一般的なエラーです。 過剰な鮮鋭化はアーチファクトを生成し、積極的なノイズ除去は細かいテキストの詳細を削除し、不適切な二値化のしきい値は情報を失う。 最小限の前処理で開始し、必要な場合にのみフィルタを追加します。 画質補正ガイドは、詳細なベストプラクティスを提供します。
パフォーマンスを最適化するにはどうすればよいですか?
複数の画像や大きなバッチを処理する場合は、これらの最適化を考慮してください:
IronTesseractインスタンスの再利用: 複数の操作に1つのインスタンスを作成します 2.スキャン領域を指定する:OCRを関連する画像領域に限定することで、60~90%の利益が得られます。 3.適切な画像形式を使用する:PNGとTIFFはJPEGよりも良い結果をもたらします。 4.選択的に前処理を適用する:必要なときだけフィルタを使う 5.並列処理を実装する:バッチ処理にマルチコアCPUを活用する
高性能なシナリオについては、マルチスレッドガイドと高速OCR構成を参照してください。 プログレス・トラッキング機能は、長期間実行される操作を監視するのに役立ちます。
なぜインスタンスの再利用はパフォーマンスを向上させるのですか?
IronTesseractの初期化は、言語データをロードし、OCRエンジンを設定するため、200-500msかかります。 インスタンスを再利用することで、後続の操作におけるこのオーバーヘッドを排除します。 Webアプリケーション用のシングルトンインスタンス、またはバッチ処理用の共有インスタンスを作成し、効率を最大化します。
どのような場合に並列処理を使用する必要がありますか?
並列処理は、複数の独立した画像があるシナリオにメリットをもたらします。 異なるページやドキュメントを同時に処理しますが、同じ画像に対して並列処理を行うことは避けてください。 最新のCPUは、4~8個の同時OCR処理を効率的に処理します。 各操作には、画像サイズに応じて100~500MBが必要なため、メモリ使用量を監視してください。
メモリ使用に関する考慮事項は何ですか?
OCR処理には通常、RAMで10~20倍の画像ファイルサイズが必要です。 5MBの画像は、処理中に50~100MBを使用する可能性があります。 大きなバッチには、同時処理を制限したプロデューサー-コンシューマー・パターンを実装する。 abortトークンの例は、メモリ集約型操作のキャンセルを示しています。
次のステップは何ですか?
これらのリソースを使用して、より複雑なシナリオからテキストを抽出します:
- PDFからテキストを読み取る - OCRでPDF文書を処理する
- スクリーンショットからデータを抽出する - 画面の内容をキャプチャして読み取ります。
- スキャンされたドキュメントを処理する - 複数ページのスキャンされたファイルを処理する。
- System.Drawingオブジェクトの操作 - 既存 for .NET画像処理コードとの統合
- 複数の言語を読む - 125以上の言語でテキストを抽出します。
- 特定のドキュメントタイプを処理する - パスポート、請求書などのために最適化します。
よくある質問
C#でテキスト抽出のために読み込める画像形式は?
IronOCRはJPG, PNG, GIF, TIFF, BMP画像フォーマットからのテキスト読み込みをサポートします。ライブラリは自動的に画像フォーマットを検出し、最適なテキスト抽出結果のために適切な前処理を適用します。
1行のコードで画像ファイルからテキストを抽出するには?
IronOCRを使って1行でテキストを抽出することができます: `var result = new IronTesseract().Read(new OcrImageInput("image.png"));`.これは自動的にTesseract 5 OCRテクノロジーを使って画像の前処理とテキスト抽出を行います。
画像の読み取りにはどのようなOCR技術が使用されていますか?
IronOCR は、Tesseract 5の高度な機械学習アルゴリズムと独自の画像前処理を組み合わせています。この組み合わせにより、高解像度のスキャン画像から圧縮されたウェブ画像まで、様々な画質やフォーマットにおいて業界をリードする精度を実現します。
画像を読み取る際のリソースの適切な扱い方を教えてください。
OcrImageInputオブジェクトを作成する際には、usingステートメントを使用し、適切なリソース廃棄を行うようにしてください。このパターンは、メモリとファイルハンドルを自動的に管理します: `using var ocrInput = new OcrImageInput("image.jpg");`.
ファイル全体ではなく、画像の特定の領域を読み取ることはできますか?
はい、IronOCRでは、画像内の特定の読み取り領域を定義するために切り抜き領域を指定することができます。この機能は、OCR処理を画像の関連部分に集中させ、パフォーマンスと精度を向上させるのに役立ちます。
画像に自動的に適用される前処理は何ですか?
IronOCRは、一般的な画質の問題を補正し、読み取り能力を向上させる画像フィルターを自動的に適用します。このライブラリは、基本的なユースケースにおいて、手動設定を必要とせずにフォーマット検出と前処理を行います。
TIFF画像処理のパフォーマンス向上はありますか?
IronOCRバージョン2025.6から、TIFF画像の読み込みは一貫して高速になりました。TIFF画像の読み込みは、マシンのGPUに依存した改善が見られ、一部のユーザーは以前のバージョンの最大2倍の速度を経験しています。

