C#でOCR処理に入力画像を使用する方法

C#で画像を読み取る方法 with IronOCR

This article was translated from English: Does it need improvement?
Translated
View the article in English

IronOCRは光学式文字認識技術を使ってJPG, PNG, GIF, TIFF, BMPフォーマットの画像からテキストを抽出します。 基本的なテキスト抽出は、NuGetパッケージをインストールした後、わずか1行のコードが必要です。

OCR(光学式文字認識)技術は、画像からテキストを認識・抽出する技術です。 スキャンしたページ、写真、その他の画像ファイルからテキストコンテンツを抽出し、印刷文書をデジタル化します。 IronOCRはTesseract 5の高度な機械学習アルゴリズムと独自の画像前処理を組み合わせ、業界をリードする精度を実現しています。

ライブラリは、jpgpnggiftiffbmp フォーマットをサポートしています。 画像フィルタは、一般的な品質問題を自動補正することで、読み取り能力を向上させます。 C#OCRは、Tesseract 5と高度な前処理を組み合わせることで、高解像度スキャンから圧縮されたウェブ画像まで、さまざまな画像品質やフォーマットにおいて正確な結果を提供します。

クイックスタート: IronOCRで画像ファイルを読み取る

1行のコードで画像からテキストを抽出します。 この例では、IronTesseractReadメソッドを使って、画像を読み込み、テキストを読み込んでいます。 このライブラリは、画像の前処理とテキストの抽出を自動的に行います。

Nuget Icon今すぐ NuGet で PDF を作成してみましょう:

  1. NuGet パッケージ マネージャーを使用して IronOCR をインストールします

    PM > Install-Package IronOcr

  2. このコード スニペットをコピーして実行します。

    var result = new IronTesseract().Read(new OcrImageInput("Potter.png"));
  3. 実際の環境でテストするためにデプロイする

    今すぐ無料トライアルでプロジェクトに IronOCR を使い始めましょう
    arrow pointer


IronOCRで画像を読むには?

まず、IronTesseractクラスをインスタンス化します。 using'ステートメントを使用して、画像ファイルのパスを持つOcrImageInputオブジェクトを作成します。 これにより、適切なリソース廃棄が保証されます。 IronOCRはjpg、png、gif、tiff、bmpフォーマットをサポートしています。 ReadメソッドでOCRを実行します。 ライブラリは自動的に画像フォーマットを検出し、適切な前処理を適用します。

新規ユーザーについては、Windows用インストールガイドを参照するか、NuGetパッケージオプションを探索してください。 クロスプラットフォーム開発については、LinuxセットアップまたはmacOSインストールを確認してください。

ブラケットオープン バージョン2025.6から:

  • 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
$vbLabelText   $csharpLabel
IronOCRテキスト抽出デモ:ハリー・ポッターのページ画像をコードエディタでプレーンテキストに変換

TIFFとGIF画像の読み方については、マルチフレーム/ページGIFとTIFFの読み方をご覧ください。 複数ページについては、複数ページTIFF処理例を参照してください。

なぜ信頼度が重要なのですか?

信頼度はIronOCRが抽出したテキストの正確さについて確信を持っていることを示します。 一般的に、85%以上の値は信頼できる結果を示します。 スコアが低い場合、画像の前処理や手作業によるレビューが必要になることがあります。 信頼度スコアを使用して、人間による検証のためにドキュメントに自動的にフラグを立てたり、追加の画像最適化フィルタをトリガしたりします。

どのような場合に異なる画像フォーマットを使用すべきですか?

PNGとTIFF形式は、可逆圧縮により最高のOCR結果を提供します。 単一ページのドキュメントにはPNGを、複数ページのスキャンにはTIFFを使用してください。 JPEGは写真には適していますが、圧縮アーチファクトが発生する可能性があります。 BMPは非圧縮の品質を提供しますが、ファイルサイズが大きくなります。 GIFは、色を限定したシンプルなグラフィックに適しています。 フォーマット固有の最適化については、こちらをご覧ください。

一般的な画像の読み取りエラーとは

よくあるエラーとしては、画像の解像度が低い(200DPI以下)、テキストが傾いている、コントラストが低い、サポートされていない言語などがあります。 IronOCRは多くの問題に対して自動修正機能を提供しますが、深刻な問題に対しては手作業による前処理が必要になる場合があります。 解決策については、トラブルシューティングガイドを参照してください。

画像をバイトとしてインポートするにはどうすればよいですか?

. <! -- 画像をバイトとしてインポートする方法を実演しているスクリーンショット? IronPdfで -->。 <!ステップバイステップのプロセスを示すスクリーンショット -->。

OcrImageInput<//code> クラスは、ファイルパス、バイト、<code>AnyBitmap、Stream、または 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)
$vbLabelText   $csharpLabel

ファイル パスの代わりにバイト配列を使用する必要があるのはどのような場合ですか?

バイト配列は、データベース、ウェブサービス、暗号化されたソースからの画像に最適です。 ファイルは一時的なディスクストレージを必要としないため、より優れたセキュリティを提供します。 クラウドアプリケーション、マイクロサービス、機密文書の処理にはバイト配列を使用します。 ファイルパスは、大規模な画像コレクションのローカルバッチ処理において、より効率的なままであること。

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
$vbLabelText   $csharpLabel

なぜイメージ バイトではメモリ管理が重要なのですか?

大きな画像は、特に複数のドキュメントを同時に処理する場合、大きなメモリを消費します。 using'ステートメントを使用することで、適切なリソースの廃棄を保証します。 バッチ処理については、同時処理を制限したキューシステムの実装を検討してください。 マルチスレッドガイドは、効率的なメモリ管理テクニックを示しています。

異なる入力タイプのパフォーマンスへの影響は何ですか?

IronOCRはデータを直接読み込むため、ファイルパスはローカルファイルに対して最速のパフォーマンスを提供します。 バイト配列は、画像全体をメモリにロードする必要がありますが、柔軟性があります。 ストリームは、データをインクリメンタルに読み込むことで、メモリ使用量とパフォーマンスのバランスをとります。 大規模バッチでの最適なパフォーマンスについては、パフォーマンス・チューニング・ガイドを参照してください。

スキャン領域を指定するにはどうすればよいですか?

OcrImageInput<//code> をインスタンス化するときに CropRectangle<//code> を渡して、処理する画像領域を指定します。 スキャン範囲を限定することで、パフォーマンスが大幅に向上します。 以下の例では、章番号とタイトルだけを読み上げています。 この手法では、特定の文書領域をターゲットにする場合、処理時間を最大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)
$vbLabelText   $csharpLabel

なぜリージョンを指定するとパフォーマンスが向上するのですか?

関連する画像領域のみを処理することで、計算オーバーヘッドを60~90%削減します。 OCRエンジンは入力領域のすべてのピクセルを分析するため、領域が小さいほど処理が速くなります。 また、このアプローチは、ヘッダー、フッター、またはターゲットテキスト領域外の装飾要素による潜在的な干渉を排除することで、精度を向上させます。

ソース画像とデバッグ出力の両方で、第8章のタイトルを強調する赤い四角形を使用した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
$vbLabelText   $csharpLabel

画像最適化フィルター低品質スキャンの修正について学んでください。 色補正のニーズについては、画像色補正ガイドを参照してください。

画像前処理フィルタはいつ適用すべきですか?

スキャンした文書、テキストの写真、品質に問題のある画像を扱う場合は、フィルタを適用します。 よくあるシナリオとしては、傾いたページの修正、コピーからの背景ノイズの除去、色あせたテキストの強調などがあります。 DPI設定ガイドは、解像度関連の問題を最適化するのに役立ちます。

なぜフィルタの順序が重要なのですか?

フィルタの順序は結果に大きく影響します。 回転補正(Deskew)を最初に適用し、次にノイズ除去を行い、コントラストを強調します。 2値化は通常、最後に行う必要があります。例えば、ノイズ除去の前にシャープネス処理を行うと、ノイズが目立ちやすくなります。 最適な結果を得るために、さまざまなシーケンスをテストしてください。

よくある前処理の間違いは何ですか?

過剰な処理は、最も一般的なエラーです。 過剰な鮮鋭化はアーチファクトを生成し、積極的なノイズ除去は細かいテキストの詳細を削除し、不適切な二値化のしきい値は情報を失う。 最小限の前処理で開始し、必要な場合にのみフィルタを追加します。 画質補正ガイドは、詳細なベストプラクティスを提供します。

パフォーマンスを最適化するにはどうすればよいですか?

複数の画像や大きなバッチを処理する場合は、これらの最適化を考慮してください:

1.IronTesseractインスタンスの再利用:複数の操作のために1つのインスタンスを作成する 2.スキャン領域を指定する:OCRを関連する画像領域に限定することで、60~90%の利益が得られます。 3.適切な画像形式を使用する:PNGとTIFFはJPEGよりも良い結果をもたらします。 4.選択的に前処理を適用する:必要なときだけフィルタを使う 5.並列処理を実装する:バッチ処理にマルチコアCPUを活用する

高性能なシナリオについては、マルチスレッドガイド高速OCR構成を参照してください。 プログレス・トラッキング機能は、長期間実行される操作を監視するのに役立ちます。

なぜインスタンスの再利用はパフォーマンスを向上させるのですか?

IronTesseractの初期化では、言語データをロードし、OCRエンジンを設定します。 インスタンスを再利用することで、後続の操作におけるこのオーバーヘッドを排除します。 Webアプリケーション用のシングルトンインスタンス、またはバッチ処理用の共有インスタンスを作成し、効率を最大化します。

どのような場合に並列処理を使用する必要がありますか?

並列処理は、複数の独立した画像があるシナリオにメリットをもたらします。 異なるページやドキュメントを同時に処理しますが、同じ画像に対して並列処理を行うことは避けてください。 最新のCPUは、4~8個の同時OCR処理を効率的に処理します。 各操作には、画像サイズに応じて100~500MBが必要なため、メモリ使用量を監視してください。

メモリ使用に関する考慮事項は何ですか?

OCR処理には通常、RAMで10~20倍の画像ファイルサイズが必要です。 5MBの画像は、処理中に50~100MBを使用する可能性があります。 大きなバッチには、同時処理を制限したプロデューサー-コンシューマー・パターンを実装する。 abortトークンの例は、メモリ集約型操作のキャンセルを示しています。

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

これらのリソースを使用して、より複雑なシナリオからテキストを抽出します:

よくある質問

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倍の速度を経験しています。

カーティス・チャウ
テクニカルライター

Curtis Chauは、カールトン大学でコンピュータサイエンスの学士号を取得し、Node.js、TypeScript、JavaScript、およびReactに精通したフロントエンド開発を専門としています。直感的で美しいユーザーインターフェースを作成することに情熱を持ち、Curtisは現代のフレームワークを用いた開発や、構造の良い視覚的に魅力的なマニュアルの作成を楽しんでいます。

開発以外にも、CurtisはIoT(Internet of Things)への強い関心を持ち、ハードウェアとソフトウェアの統合方法を模索しています。余暇には、ゲームをしたりDiscordボットを作成したりして、技術に対する愛情と創造性を組み合わせています。

レビュー済み
Jeff Fritz
Jeffrey T. Fritz
プリンシパルプログラムマネージャー - .NETコミュニティチーム
Jeffはまた、.NETとVisual Studioチームのプリンシパルプログラムマネージャーです。彼は.NET Conf仮想会議シリーズのエグゼクティブプロデューサーであり、週に二回放送される開発者向けライブストリーム『Fritz and Friends』のホストを務め、テクノロジーについて話すことや視聴者と一緒にコードを書くことをしています。Jeffはワークショップ、プレゼンテーション、およびMicrosoft Build、Microsoft Ignite、.NET Conf、Microsoft MVPサミットを含む最大のMicrosoft開発者イベントのコンテンツを企画しています。
準備はできましたか?
Nuget ダウンロード 5,384,824 | バージョン: 2026.2 リリース