C#でSystem.Drawingオブジェクトからテキスト抽出・文字認識を行う方法
IronOCR は、Bitmap や Image などの System.Drawing オブジェクトからの画像文字認識・テキスト抽出を OcrImageInput でラップすることで可能にし、Windows、macOS、Linux プラットフォーム全体で.NETアプリケーションにシームレスな OCR 機能を提供します。
System.Drawing.Bitmap は、ビットマップ イメージを操作するために使用される.NET Frameworkのクラスです。 ビットマップ イメージを作成、操作、表示するためのメソッドとプロパティを提供します。
System.Drawing.Image は、 .NET Framework内のすべての GDI+ イメージ オブジェクトの基本クラスです。 これは、System.Drawing.Bitmap を含むさまざまなイメージ タイプの親クラスです。
IronSoftware.Drawing.AnyBitmap は、もともとIron Softwareによって開発されたオープンソース ライブラリであるIronDrawingのビットマップ クラスです。 これは、C# ソフトウェア エンジニアが Windows、macOS、Linux プラットフォーム上 for .NETプロジェクトで System.Drawing.Common を置き換えるのに役立ちます。
クイックスタート: System.Drawing.Bitmap からテキストを読み取る
1 つのステートメントで、IronTesseract を作成し、OcrImageInput でラップされた System.Drawing.Bitmap を入力して、すべてのテキストを抽出します。 このクイックスタート例では、IronOCRが最小限のセットアップで画像を読みやすいテキストに変換する方法を示します。
C#でSystem.Drawingオブジェクトから読み取る方法
- System.Drawing オブジェクトを読み取るための C# ライブラリをダウンロードします。
- Obtain System.Drawing objects such as `Bitmap` and `Image`
- Construct the `OcrImageInput` class using the acquired data
- Utilize `AnyBitmap` from Iron Software for Linux and macOS
- 切り抜き領域を指定して読み込みエリアを定義する
System.Drawing.Bitmapから読み取るには?
まず、OCR を実行するためにIronTesseractクラスをインスタンス化します。 さまざまな方法のいずれかから System.Drawing.Bitmap を作成します。 コード例では、ファイルパスが使用されています。
次に、using ステートメントを使用して OcrImageInput オブジェクトを作成し、System.Drawing.Bitmap オブジェクトからイメージを渡します。 最後に、Read メソッドを使用して OCR を実行します。
:path=/static-assets/ocr/content-code-examples/how-to/input-system-drawing-read-bitmap.cs
using IronOcr;
using System.Drawing;
// Instantiate IronTesseract
IronTesseract ocrTesseract = new IronTesseract();
// Read image file to Bitmap
Bitmap bitmap = new Bitmap("Potter.tiff");
// Import System.Drawing.Bitmap
using var imageInput = new OcrImageInput(bitmap);
// Perform OCR
OcrResult ocrResult = ocrTesseract.Read(imageInput);
Imports IronOcr
Imports System.Drawing
' Instantiate IronTesseract
Private ocrTesseract As New IronTesseract()
' Read image file to Bitmap
Private bitmap As New Bitmap("Potter.tiff")
' Import System.Drawing.Bitmap
Private imageInput = New OcrImageInput(bitmap)
' Perform OCR
Private ocrResult As OcrResult = ocrTesseract.Read(imageInput)
なぜOcrImageInputではusing文が重要なのですか?
using ステートメントは、適切なリソース管理とメモリのクリーンアップを保証するため、OcrImageInput を操作するときに重要です。OcrImageInput は IDisposable を実装します。つまり、オブジェクトの使用が完了したら解放する必要があるアンマネージ リソースを保持します。 using ステートメントがないと、これらのリソースがすぐに解放されず、メモリ リークやファイル ロックが発生する可能性があります。 これは、バッチ操作で複数の画像を処理する場合に特に重要です。 IronOCRにおける適切なリソース管理の詳細については、API Referenceドキュメントをご覧ください。
一般的なビットマップの読み込み方法は何ですか?
System.Drawing.Bitmap は、この例で使用されているファイル パス コンストラクター以外にも、いくつかの読み込みメソッドを提供します。 ストリームから Bitmaps を作成したり (new Bitmap(stream))、既存の Images から (new Bitmap(image))、または特定の寸法の空のビットマップを作成したりすることもできます (new Bitmap(width, height))。 Web アプリケーションを扱う場合、アップロードされたファイルを処理するために、ストリームからの読み込みが特に役立ちます。 埋め込みリソースの場合は、Assembly.GetManifestResourceStream() を使用できます。 IronOCR は、これらすべての Bitmap ソースを OcrImageInput コンストラクターを通じてシームレスに処理します。 さまざまな入力方法については、画像 (jpg, png, gif, tiff, bmp)ガイドをご覧ください。
いつ Bitmap オブジェクトを破棄すればよいですか?
ビットマップ廃棄のタイミングは、アプリケーションのワークフローに依存します。 OCR に Bitmap のみが必要な場合は、OcrImageInput を作成した直後に破棄してください。 ただし、複数の操作を実行したり、画像を表示したりする必要がある場合は、すべての操作が完了するまで生かしてください。 確実に破棄するには、常に using ステートメントまたは try-finally ブロックを使用します。 OcrImageInput は独自の内部コピーを作成するので、元の Bitmap は作成後に破棄できることに留意してください。 複数の画像操作を含む複雑なシナリオについては、OCR画像最適化フィルターの例をご検討ください。
System.Drawing.Imageから読み取るには?
System.Drawing.Image からの読み取りは、Image を使用して OcrImageInput オブジェクトを作成し、Read メソッドを使用して標準の OCR プロセスを実行するだけです。
:path=/static-assets/ocr/content-code-examples/how-to/input-system-drawing-read-image.cs
using IronOcr;
using Image = System.Drawing.Image;
// Instantiate IronTesseract
IronTesseract ocrTesseract = new IronTesseract();
// Open image file as Image
Image image = Image.FromFile("Potter.tiff");
// Import System.Drawing.Image
using var imageInput = new OcrImageInput(image);
// Perform OCR
OcrResult ocrResult = ocrTesseract.Read(imageInput);
Imports IronOcr
Imports Image = System.Drawing.Image
' Instantiate IronTesseract
Private ocrTesseract As New IronTesseract()
' Open image file as Image
Private image As Image = Image.FromFile("Potter.tiff")
' Import System.Drawing.Image
Private imageInput = New OcrImageInput(image)
' Perform OCR
Private ocrResult As OcrResult = ocrTesseract.Read(imageInput)
OCRのイメージとビットマップの違いは何ですか?
System.Drawing.Bitmap はビットマップ画像専用の実装ですが、System.Drawing.Image は JPEG、PNG、GIF、TIFF などのさまざまな画像形式を表すことができる抽象基本クラスです。 OCR の目的では、 IronOCR はOcrImageInput を通じて両方を同一に扱いますが、Image は異なる形式で作業する場合に柔軟性を高めます。 Bitmap はピクセルレベルの操作機能を提供しますが、Image は一般的な画像処理に適しています。 どちらもIronOCRの先進的なTesseract 5エンジンで同様に機能します。どちらを選ぶかはOCRの性能よりも幅広いアプリケーションのニーズによります。
なぜ他の読み込み方法ではなく Image.FromFile を使用するのですか?
Image.FromFile は、ディスクからイメージをロードするための最も簡単で直接的な方法です。 画像形式を自動的に検出し、ファイルの読み込み処理を行います。 Image.FromStream のような代替方法は、Web アプリケーションやメモリ ストリームを操作する場合に適しています。 Image.FromFile は、Image が破棄されるまでファイルをロックします。これは、マルチスレッド アプリケーションでは考慮すべき事項です。 高いパフォーマンスや同時アクセスが必要な制作シナリオでは、まず画像をメモリストリームにロードすることを検討してください。Multithreaded Tesseract OCR の例は、同時画像処理のベスト プラクティスを示しています。
IronSoftware.Drawing.AnyBitmapから読み取るにはどうすればよいですか?
同様に、AnyBitmap オブジェクトを作成または取得した後、OcrImageInput クラスを構築できます。 コンストラクタは、データをインポートするために必要なすべてのステップを処理します。 以下のコード例でこれを示します。
:path=/static-assets/ocr/content-code-examples/how-to/input-system-drawing-read-anybitmap.cs
using IronOcr;
using IronSoftware.Drawing;
// Instantiate IronTesseract
IronTesseract ocrTesseract = new IronTesseract();
// Open image file as AnyBitmap
AnyBitmap anyBitmap = AnyBitmap.FromFile("Potter.tiff");
// Import IronSoftware.Drawing.AnyBitmap
using var imageInput = new OcrImageInput(anyBitmap);
// Perform OCR
OcrResult ocrResult = ocrTesseract.Read(imageInput);
Imports IronOcr
Imports IronSoftware.Drawing
' Instantiate IronTesseract
Private ocrTesseract As New IronTesseract()
' Open image file as AnyBitmap
Private anyBitmap As AnyBitmap = AnyBitmap.FromFile("Potter.tiff")
' Import IronSoftware.Drawing.AnyBitmap
Private imageInput = New OcrImageInput(anyBitmap)
' Perform OCR
Private ocrResult As OcrResult = ocrTesseract.Read(imageInput)
なぜSystem.DrawingクラスではなくAnyBitmapを選択するのですか?
AnyBitmap は、System.Drawing クラスと比較して、優れたクロスプラットフォーム互換性を提供します。 System.Drawing.Common は.NET 6 以降では Windows 以外のプラットフォームではサポートが制限されていますが、AnyBitmap は Windows、Linux、macOS でシームレスに動作します。 プラットフォームに依存しない一貫したAPIを提供するため、クラウドのデプロイメントやコンテナ化されたアプリケーションに最適です。 AnyBitmap は、画像処理タスク向けに特別に設計された、より優れたメモリ管理とパフォーマンスの最適化も提供します。 詳細な互換性情報については、互換性ドキュメントを参照してください。
AnyBitmapはどのプラットフォームをサポートしていますか?
AnyBitmap は、 .NET が実行されるすべての主要プラットフォーム (Windows (x86、x64、ARM)、Linux (Docker 用の Alpine Linux を含む)、macOS (Intel と Apple Silicon の両方)) をサポートしています。 このように幅広いプラットフォームをサポートしているため、多様な環境で実行する必要がある最新 for .NETアプリケーションに推奨される選択肢となっています。 特に、AWS LambdaやAzure Functionsのクラウドデプロイメントに役立ちます。 Linux、macOS、Docker環境のガイドでは、プラットフォーム固有のセットアップについて詳しく説明しています。
AnyBitmapはメモリ管理をどのように処理しますか?
AnyBitmap は、自動ガベージコレクションの統合と明示的な破棄パターンを通じて効率的なメモリ管理を実装します。 頻繁に割り当てられるバッファにメモリプーリングを使用し、パフォーマンス向上のためにコピーオンライトセマンティクスを実装しています。 ファイルロックを保持できる System.Drawing.Bitmap とは異なり、 AnyBitmap はイメージを完全にメモリにロードし、ファイル アクセスの問題を防止します。 また、高スループットのシナリオでメモリ使用量をより適切に制御できるようにします。 大量の画像を処理するアプリケーションの場合、AnyBitmap のメモリ効率により、全体的なメモリフットプリントを大幅に削減できます。 移行のヒントについては、System.Drawing.Common Alternatives ガイドを参照してください。
スキャン領域を指定するにはどうすればよいですか?
OcrImageInput クラスの構築では、スキャンする領域を指定できます。 これにより、OCR 用に画像ドキュメントの特定の領域を定義できます。 画像ドキュメントによっては、スキャン領域を指定することでパフォーマンスが大幅に向上することがあります。 提供されたコード例では、章番号とタイトルだけが抽出されています。
: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)
より良いパフォーマンスを得るためには、いつリージョン スキャンを使用すべきですか?
リージョンスキャンは、一貫したドキュメントレイアウトの特定の領域のテキストだけが必要な場合に、パフォーマンスを劇的に向上させます。 一般的な使用例としては、ヘッダー、フォームフィールド、請求書の合計、IDカード情報の抽出などがあります。 パフォーマンスが最も向上するのは、テキストの占める割合が小さい大きな画像です。 3000x4000ピクセルの請求書の場合、総額の領域だけをスキャンすると、全ページOCRよりも10~20倍速くなります。 また、リージョンスキャンは、他の領域からの潜在的なノイズを除去することで、精度を向上させます。 リージョンベースの例については、Content Areas & Crop Regions with PDFsガイドをご覧ください。
自分の地域の正しい座標を決定するにはどうすればよいですか?
座標を決定するには、Rectangle が (X, Y, 幅、高さ) 形式を使用し、(0,0) が左上隅であることを理解する必要があります。 まず、カーソル座標を表示する画像エディタで画像を開いてください。 あるいは、IronOCRのデバッグ機能を使って、検出されたテキスト領域を視覚化してください。 動的レイアウトの場合は、まずIronOCRを使用して完全スキャンを実行し、次に OcrResult を分析してプログラムでテキストの位置を見つけることを検討してください。 Highlight Texts for Debugging の例では、正確な座標決定のために OCR 領域を視覚化する方法を示しています。
領域が画像の境界を超えるとどうなりますか?
指定された領域が画像の境界を超えた場合、IronOCRは自動的に有効な画像領域にクリップします。 例えば、画像が1000x1000ピクセルで、矩形を(900, 900, 200, 200)で指定した場合、IronOCRは(900, 900)から(1000, 1000)までの領域のみを処理します。 この自動クリッピングはエラーを防ぎますが、座標が正しくない場合、テキストの抽出が不完全になる可能性があります。 常に、実際の画像寸法と照らし合わせて、リージョンを検証してください。 動的な画像サイズについては、固定ピクセルではなく、パーセンテージで領域を計算してください。 OCR Region of an Image ガイドでは、安全なリージョン処理の例をより多く提供しています。
OCR結果
よくある質問
C#でOCRを使用してSystem.Drawing.Bitmapからテキストを抽出するにはどうすればよいですか?
IronOCRはSystem.Drawing.Bitmapオブジェクトからテキストを簡単に抽出することができます。まずIronTesseractクラスをインスタンス化し、Bitmapをusingステートメントを使ってOcrImageInputオブジェクトにラップし、最後にReadメソッドを呼び出します。最小限のコードは以下の通り: var result = new IronOcr.IronTesseract().Read(new IronOcr.OcrImageInput(bitmap));
なぜOcrImageInputを使用する際にusing文が重要なのですか?
OcrImageInputはIDisposableを実装しており、適切なクリーンアップが必要な管理されていないリソースを保持しているため、using文は非常に重要です。これがないと、特に複数の画像を処理する場合、メモリー・リークやファイル・ロックの危険性があります。IronOCRのOcrImageInputは、.NETアプリケーションの効率的なリソース管理のために適切な廃棄が必要です。
System.Drawing.ImageオブジェクトでOCRを実行できますか?
はい、IronOCRはSystem.Drawing.ImageオブジェクトのOCRをサポートしています。Imageオブジェクトをビットマップと同じようにOcrImageInputでラップするだけで、IronOCRはWindows、macOS、Linuxの各プラットフォームでシームレスにテキストを抽出します。
IronSoftware.Drawing.AnyBitmapとは何ですか?
IronSoftware.Drawing.AnyBitmapはIronDrawingのビットマップ・クラスで、.NETプロジェクトのSystem.Drawing.Commonを置き換えるオープンソース・ライブラリです。Windows、macOS、Linuxのクロスプラットフォーム互換性を提供し、異なるオペレーティングシステム間で一貫した画像処理が必要な場合にIronOCRで使用するのに理想的です。
テキスト抽出のために画像の特定の領域を指定できますか?
はい、IronOCRではクロップ領域を指定することで特定の読み取り領域を定義することができます。この機能により、System.Drawingオブジェクトの特定の部分にOCR処理を集中させることができ、画像の特定の部分からテキストを必要とする場合に、パフォーマンスと精度を向上させることができます。

