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

OCRのためにC#でストリームから読み取る方法

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

IronOCRはOcrInputまたはOcrImageInputコンストラクタにストリームを渡すことにより、C#でストリームから直接画像データを読み込み、ファイルをディスクに保存することなく効率的なOCR処理を可能にします。

ストリームとは、読み書きが可能なバイナリ情報の連続的な流れのことです。 プログラミングでは、ストリームは、管理可能なチャンクで処理することにより、メモリには大きすぎるデータを効率的に処理します。

IronOCRのインポートメソッドは画像データストリームを直接受け取ります。 ストリーム・データをインポート・メソッドに渡すと、必要なすべてのステップが自動的に処理されます。 高度なシナリオについては、OcrInput クラスを探求してください。

クイックスタート: ストリームを使用して数秒で OCR 入力を行う

この例では、System.IO.StreamをIronOCRに入力し、ファイルパスをスキップし、最小限のコードで認識されたテキストを取得することで、即座にOCRを行うことを示しています。

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

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

    PM > Install-Package IronOcr

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

    using var input = new IronOcr.OcrInput(stream);
    var result = new IronOcr.IronTesseract().Read(input);
  3. 実際の環境でテストするためにデプロイする

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


IronOCRでストリームを読むには? まず、**`IronTesseract`**クラスをインスタンス化して、OCRを実行します。 画像ファイルをインポートするには、`AnyBitmap`の`FromFile`メソッドを使用します。この`AnyBitmap`オブジェクトは画像データをストリームに変換します。 次に、`using`ステートメントを使用して、`GetStream`メソッドで画像ストリームを渡して`OcrImageInput`オブジェクトを作成します。 最後に、 `Read`メソッドを使用して OCR を実行します。 ```csharp :path=/static-assets/ocr/content-code-examples/how-to/input-streams-read-streams.cs ``` ストリームベースOCRは、画像のアップロードを受け取るウェブアプリケーション、データベースからの画像を処理するアプリケーション、またはディスクに書き込まれるべきでない一時的なデータを処理するアプリケーションに役立ちます。 ストリーム・アプローチは、[`System.Drawing` オブジェクト](https://ironsoftware.com/csharp/ocr/how-to/input-system-drawing/)やその他の画像操作ライブラリとシームレスに統合されています。 ### なぜ OCR にストリームを使用するのですか? ストリームを使用することで、.NET 開発者にはいくつかの利点があります: 1.**メモリ効率**:ファイル全体をメモリにロードするのではなく、チャンク単位でデータを処理します。 2.**セキュリティ**:ディスク上に一時ファイルを作成せずに機密文書を処理する 3.**パフォーマンス**: ファイルシステム操作によるI/Oオーバーヘッドを排除します。 4.**柔軟性**:Webアップロード、データベースBLOB、およびインメモリ変換を使用します。 複数ページのドキュメントの処理や[PDFストリーム](https://ironsoftware.com/csharp/ocr/examples/ocr-for-pdf-stream/)の処理のために、IronOCRは同じシンプルなAPIを維持し、堅牢なパフォーマンスを提供します。 スキャンされた文書を扱う場合、ストリーム処理によって[スキャンされた文書を効率的に読む](https://ironsoftware.com/csharp/ocr/how-to/read-scanned-document/)ためにIronOCRの機能を活用することもできます。 ## ストリーム OCR のスキャン領域を指定するにはどうすればよいですか? 大きな画像のパフォーマンスを改善し、特定の領域から特定の読み取り値を得るには、`CropRectangle`クラスを利用します。 `OcrImageInput`コンストラクタは、2番目のパラメータとして`CropRectangle`オブジェクトを受け入れ、画像ドキュメントのどの領域を読み取るかを指定できます。 以下のコード例では、章番号とタイトル領域のみを読み取るように指定しています。 ```csharp :path=/static-assets/ocr/content-code-examples/how-to/input-streams-read-specific-region.cs ``` このテクニックは、[画像の特定の領域](https://ironsoftware.com/csharp/ocr/how-to/ocr-region-of-an-image/)をOCRする必要がある場合や、テキストが予測可能な場所に表示される構造化ドキュメントを扱う場合に特に役立ちます。 テーブルや構造化データを含むより複雑なシナリオについては、[ドキュメント内のテーブルを読む](https://ironsoftware.com/csharp/ocr/how-to/read-table-in-document/)方法を調べてください。 ### スキャン領域は出力でどのように見えますか?
OCR demo: Document in Photo Viewer with extracted text 'Chapter Eight The Deathday Party' indicated in debug console
## どのような高度なストリーム処理技術を使用できますか? ストリームを使用する場合は、IronOCRの追加機能を活用して認識精度を高めてください。 [画像最適化フィルター](https://ironsoftware.com/csharp/ocr/examples/ocr-image-filters-for-net-tesseract/)は、OCR処理の前にストリームデータに直接適用することができます: ```csharp using IronOcr; using IronSoftware.Drawing; using System.IO; // Process stream with filters public string ProcessStreamWithFilters(Stream imageStream) { IronTesseract ocrTesseract = new IronTesseract(); // Configure for better accuracy ocrTesseract.Configuration.BlackListCharacters = "~`$#^*_}{][|\\"; ocrTesseract.Configuration.PageSegmentationMode = TesseractPageSegmentationMode.AutoOsd; using var input = new OcrImageInput(imageStream); // Apply preprocessing filters input.Deskew(); input.DeNoise(); input.Sharpen(); var result = ocrTesseract.Read(input); return result.Text; } ``` 画像処理を強化するには、[フィルタ ウィザード](https://ironsoftware.com/csharp/ocr/how-to/filter-wizard/)を使用して、特定のドキュメント タイプに最適な前処理ステップを自動的に決定することを検討してください。さらに、ストリーム内の回転した画像や傾いた画像を処理する場合、[画像の向きを修正する](https://ironsoftware.com/csharp/ocr/how-to/image-orientation-correction/)機能を使用すると、OCR 精度を大幅に向上させることができます。 ### 異なるストリームソースで作業するにはどうすればよいですか? IronOCRは様々なストリームソースをシームレスに処理します。 ウェブフォームからのアップロード処理、データベースからの画像取得、フォーマット間の変換など、APIは一貫性を保っています: ```csharp // From MemoryStream byte[] imageBytes = GetImageBytesFromDatabase(); using var memoryStream = new MemoryStream(imageBytes); using var input = new OcrImageInput(memoryStream); // From FileStream using var fileStream = new FileStream("document.png", FileMode.Open); using var input2 = new OcrImageInput(fileStream); // From network stream using var webClient = new WebClient(); using var networkStream = webClient.OpenRead("https://example.com/image.jpg"); using var input3 = new OcrImageInput(networkStream); ``` 最適な結果を得るためには、低解像度のストリームで作業する場合、[DPI設定](https://ironsoftware.com/csharp/ocr/how-to/dpi-setting/)を調整することを検討してください。 IronOCRは自動的にDPI検出を行いますが、手動で設定することで、特定のユースケースの精度を向上させることができます。 マルチページ ドキュメントを扱う場合は、ストリーム処理によって [マルチページ TIFF および GIF ファイル](https://ironsoftware.com/csharp/ocr/how-to/input-tiff-gif/)を処理することを検討してください。 ## ストリームからの OCR 結果をどのように扱えばよいですか? ストリームを処理した後、IronOCRは単純なテキスト抽出を超えたリッチな結果オブジェクトを提供します。 [`OcrResult`クラス](https://ironsoftware.com/csharp/ocr/examples/results-objects/)には、信頼度スコア、位置、構造など、認識されたテキストに関する詳細な情報が含まれています: ```csharp // Process stream and analyze results using var input = new OcrImageInput(stream); var result = new IronTesseract().Read(input); // Access detailed results foreach (var page in result.Pages) { Console.WriteLine($"Page {page.PageNumber} Confidence: {page.Confidence}%"); foreach (var paragraph in page.Paragraphs) { Console.WriteLine($"Paragraph: {paragraph.Text}"); Console.WriteLine($"Location: X={paragraph.X}, Y={paragraph.Y}"); } } // Export results string text = result.Text; string searchablePdf = result.SaveAsSearchablePdf("output.pdf"); string hocrHtml = result.SaveAsHocrHtml("output.html"); ``` 結果オブジェクトは、[検索可能なPDF](https://ironsoftware.com/csharp/ocr/how-to/searchable-pdf/)や[hOCRのHTMLフォーマット](https://ironsoftware.com/csharp/ocr/how-to/html-hocr-export/)にエクスポートするメソッドも提供しており、ストリーム入力から検索可能なドキュメントアーカイブを簡単に作成できます。 デバッグのために、[highlight texts feature](https://ironsoftware.com/csharp/ocr/how-to/highlight-texts-as-images/)を使って、IronOcrが画像から何を検出したかを視覚化することができます。 ## どのようなパフォーマンスを考慮すべきか

複数のストリームを処理する場合や、高スループットの OCR ソリューションを実装する場合は、以下の最適化戦略を検討してください: 1.**`IronTesseract`インスタンスを再利用する**:単一のインスタンスを作成し、複数の操作で再利用する。 2.**進捗追跡を実装する**:大規模なストリームでは、[進捗追跡](https://ironsoftware.com/csharp/ocr/how-to/progress-tracking/)を使用して処理状況を監視します。 3.**並列処理**:`IronOCR`は複数のストリームの同時処理をサポートします。 4.**画質を最適化する**:最適な解像度と鮮明さを確保するためにストリームを前処理します。 パフォーマンスを最大化するために、[高速 OCR 設定](https://ironsoftware.com/csharp/ocr/examples/tune-tesseract-for-speed-in-dotnet/)オプションを検討し、バッチ処理用に [マルチスレッド処理](https://ironsoftware.com/csharp/ocr/how-to/async/)の実装を検討してください。 時間に敏感なアプリケーションで作業する場合、[タイムアウト](https://ironsoftware.com/csharp/ocr/examples/timeouts/)を理解することで、長時間実行される OCR 操作を効果的に管理することができます。

一般的なストリームの問題をトラブルシューティングするには? ストリームを扱う場合、特定の課題に遭遇する可能性があります。 よくあるシナリオの解決策をご紹介します: - **ストリーム位置**:`IronOCR`に渡す前に、ストリーム位置を常に`0`にリセットする。 - **処分**:適切なリソースのクリーンアップを確実にするために、`using`文を使用してください。 - **フォーマットのサポート**: IronOCRはストリームを通して[JPEG、PNG、TIFF、BMPを含む様々な画像フォーマット](https://ironsoftware.com/csharp/ocr/how-to/input-images/)をサポートします。 - **メモリ管理**:大きなストリームの場合、チャンク処理またはストリーミング・アプローチを検討する。 複雑な文書や標準的な OCR では満足のいく結果が得られない場合、[コンピューター ビジョン機能](https://ironsoftware.com/csharp/ocr/how-to/computer-vision/)を使用すると、テキストをより正確に検索して抽出することができます。 さらに、低品質ストリームを扱う場合は、認識率を大幅に向上させる前処理テクニックについて、[低品質スキャンの修正](https://ironsoftware.com/csharp/ocr/examples/ocr-low-quality-scans-tesseract/)のガイドを参照してください。 ストリームやその他の入力メソッドの詳細については、包括的な[ハウツーガイド](https://ironsoftware.com/csharp/ocr/how-to/input-streams/)や[コード例](https://ironsoftware.com/csharp/ocr/examples/ocr-for-pdf-stream/)を参照してください。

よくある質問

画像データをディスクに保存せずに、OCRを実行するにはどうすればよいですか?

IronOCRでは、OcrInputまたはOcrImageInputコンストラクタに画像ストリームを渡すことで、画像ストリームを直接処理することができます。これは一時ファイルを作成することなく効率的なOCR処理を可能にし、ウェブアップロードやデータベースのBLOB、あるいはディスクに触れるべきでない機密文書を扱うのに理想的です。

OCR 処理の入力として使用できるストリームの種類は?

IronOCRは画像データを含むあらゆるSystem.IO.Streamを受け入れます。これには、ウェブアップロードからのメモリストリーム、データベースのBLOBフィールドからのストリーム、画像操作ライブラリから作成されたストリームが含まれます。OcrInputまたはOcrImageInputにストリームを渡すと、ライブラリは必要なすべての変換ステップを自動的に処理します。

C#でストリームにOCRを実行する最も簡単な方法は何ですか?

最も手っ取り早い方法は、ストリームでOcrInputオブジェクトを作成し、Readメソッドを呼び出すことです: 'using var input = new IronOcr.OcrInput(stream); var result = new IronOcr.IronTesseract().Read(input);'.この最小限のコードはOCRを実行し、認識されたテキストを即座に返します。

OCRにファイルパスの代わりにストリームを使用するのはなぜですか?

IronOCRによるストリームベースOCRはいくつかの利点を提供します:データをチャンク単位で処理することによるメモリ効率、ディスク上の一時ファイルを回避することによるセキュリティの強化、ファイルI/Oのオーバーヘッドを排除することによるパフォーマンスの向上、ウェブアップロードやデータベースのBLOBを扱う際の柔軟性などです。

画像ストリームの特定の領域を指定して読み取ることはできますか?

はい、IronOCRではストリームを処理する際、クロップ領域を指定して読み取り領域を定義することができます。この機能により、文書全体を処理することなく、画像の特定の部分にOCRを集中させることができ、速度と精度の両方が向上します。

ストリーム処理は、他の画像操作ライブラリとどのように統合されていますか?

IronOCRのストリーム・アプローチは、System.Drawingオブジェクトや他の.NET画像操作ライブラリとシームレスに統合されています。AnyBitmapクラスを使用して、GetStreamメソッドを使用して画像をストリームに変換することができ、OCRを他の画像処理ワークフローと簡単に組み合わせることができます。

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

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,299,091 | バージョン: 2025.12 リリース