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 を示します。

  1. IronOCR をNuGetパッケージマネージャでインストール

    PM > Install-Package IronOcr
  2. このコード スニペットをコピーして実行します。

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

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

    arrow pointer


IronOCRでストリームを読むには?

まず、OCR を実行するためにIronTesseractクラスをインスタンス化します。 画像ファイルをインポートするには、AnyBitmapFromFile メソッドを使用します。この AnyBitmap オブジェクトは画像データをストリームに変換します。 次に、using ステートメントを使用して、GetStream メソッドでイメージ ストリームを渡し、OcrImageInput オブジェクトを作成します。 最後に、Read メソッドを使用して OCR を実行します。

:path=/static-assets/ocr/content-code-examples/how-to/input-streams-read-streams.cs
using IronOcr;
using IronSoftware.Drawing;

// Instantiate IronTesseract
IronTesseract ocrTesseract = new IronTesseract();

// Read image file to AnyBitmap
AnyBitmap anyBitmap = AnyBitmap.FromFile("Potter.tiff");

// Import image stream
using var imageInput = new OcrImageInput(anyBitmap.GetStream());
// Perform OCR
OcrResult ocrResult = ocrTesseract.Read(imageInput);
$vbLabelText   $csharpLabel

ストリームベースOCRは、画像のアップロードを受け取るウェブアプリケーション、データベースからの画像を処理するアプリケーション、またはディスクに書き込まれるべきでない一時的なデータを処理するアプリケーションに役立ちます。 ストリーム アプローチはSystem.Drawing オブジェクトやその他の画像操作ライブラリとシームレスに統合されます。

なぜ OCR にストリームを使用するのですか?

ストリームを使用することで、.NET 開発者にはいくつかの利点があります:

1.メモリ効率:ファイル全体をメモリにロードするのではなく、チャンク単位でデータを処理します。 2.セキュリティ:ディスク上に一時ファイルを作成せずに機密文書を処理する 3.パフォーマンス: ファイルシステム操作によるI/Oオーバーヘッドを排除します。 4.柔軟性:Webアップロード、データベースBLOB、およびインメモリ変換を使用します。

複数ページのドキュメントの処理やPDFストリームの処理のために、IronOCRは同じシンプルなAPIを維持し、堅牢なパフォーマンスを提供します。 スキャンされた文書を扱う場合、ストリーム処理によってスキャンされた文書を効率的に読むためにIronOCRの機能を活用することもできます。

ストリーム OCR のスキャン領域を指定するにはどうすればよいですか?

大きな画像のパフォーマンスを向上し、特定の領域から特定の読み取り値を取得するには、CropRectangle クラスを利用します。 OcrImageInput コンストラクタは、2 番目のパラメータとして CropRectangle オブジェクトを受け入れ、イメージ ドキュメントのどの領域を読み取るかを指定できます。 以下のコード例では、章番号とタイトル領域のみを読み取るように指定しています。

:path=/static-assets/ocr/content-code-examples/how-to/input-streams-read-specific-region.cs
using IronOcr;
using IronSoftware.Drawing;
using System;

// Instantiate IronTesseract
IronTesseract ocrTesseract = new IronTesseract();

// Read image file to AnyBitmap
AnyBitmap anyBitmap = AnyBitmap.FromFile("Potter.tiff");

// Specify crop region
Rectangle scanRegion = new Rectangle(800, 200, 900, 400);

// Add image
using var imageInput = new OcrImageInput(anyBitmap.GetStream(), ContentArea: scanRegion);
// Perform OCR
OcrResult ocrResult = ocrTesseract.Read(imageInput);

// Output the result to console
Console.WriteLine(ocrResult.Text);
$vbLabelText   $csharpLabel

このテクニックは、画像の特定の領域をOCRする必要がある場合や、テキストが予測可能な場所に表示される構造化ドキュメントを扱う場合に特に役立ちます。 テーブルや構造化データを含むより複雑なシナリオについては、ドキュメント内のテーブルを読む方法を調べてください。

スキャン領域は出力でどのように見えますか?

OCRデモ:Photo Viewerのドキュメントと、デバッグコンソールに表示された

どのような高度なストリーム処理技術を使用できますか?

ストリームを使用する場合は、IronOCRの追加機能を活用して認識精度を高めてください。 画像最適化フィルターは、OCR処理の前にストリームデータに直接適用することができます:

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

画像処理を強化するには、フィルタ ウィザードを使用して、特定のドキュメント タイプに最適な前処理ステップを自動的に決定することを検討してください。さらに、ストリーム内の回転した画像や傾いた画像を処理する場合、画像の向きを修正する機能を使用すると、OCR 精度を大幅に向上させることができます。

異なるストリームソースで作業するにはどうすればよいですか?

IronOCRは様々なストリームソースをシームレスに処理します。 ウェブフォームからのアップロード処理、データベースからの画像取得、フォーマット間の変換など、APIは一貫性を保っています:

// 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);
// 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);
$vbLabelText   $csharpLabel

最適な結果を得るためには、低解像度のストリームで作業する場合、DPI設定を調整することを検討してください。 IronOCRは自動的にDPI検出を行いますが、手動で設定することで、特定のユースケースの精度を向上させることができます。 マルチページ ドキュメントを扱う場合は、ストリーム処理によって マルチページ TIFF および GIF ファイルを処理することを検討してください。

ストリームからの OCR 結果をどのように扱えばよいですか?

ストリームを処理した後、IronOCRは単純なテキスト抽出を超えたリッチな結果オブジェクトを提供します。 OcrResult クラスには、信頼度スコア、位置、構造など、認識されたテキストに関する詳細な情報が含まれています。

// 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");
// 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");
$vbLabelText   $csharpLabel

結果オブジェクトは、検索可能なPDFhOCRのHTMLフォーマットにエクスポートするメソッドも提供しており、ストリーム入力から検索可能なドキュメントアーカイブを簡単に作成できます。 デバッグのために、highlight texts featureを使って、IronOcrが画像から何を検出したかを視覚化することができます。

どのようなパフォーマンスを考慮すべきか

複数のストリームを処理する場合や、高スループットの OCR ソリューションを実装する場合は、以下の最適化戦略を検討してください:

1.インスタンスの再利用: 単一のインスタンスを作成し、複数の操作で再利用します。
2.進捗追跡を実装する:大規模なストリームでは、進捗追跡を使用して処理状況を監視します。 3.並列処理: IronOCR は複数のストリームの同時処理をサポートします
4.画質を最適化する:最適な解像度と鮮明さを確保するためにストリームを前処理します。

パフォーマンスを最大化するために、高速 OCR 設定オプションを検討し、バッチ処理用に マルチスレッド処理の実装を検討してください。 時間に敏感なアプリケーションで作業する場合、タイムアウトを理解することで、長時間実行される OCR 操作を効果的に管理することができます。

一般的なストリームの問題をトラブルシューティングするには?

ストリームを扱う場合、特定の課題に遭遇する可能性があります。 よくあるシナリオの解決策をご紹介します:

-ストリーム位置: IronOCR に渡す前に、常にストリーム位置を 0 にリセットします。
-廃棄: using ステートメントを使用して、リソースの適切なクリーンアップを確実に実行します。

複雑な文書や標準的な OCR では満足のいく結果が得られない場合、コンピューター ビジョン機能を使用すると、テキストをより正確に検索して抽出することができます。 さらに、低品質ストリームを扱う場合は、認識率を大幅に向上させる前処理テクニックについて、低品質スキャンの修正のガイドを参照してください。

ストリームやその他の入力メソッドの詳細については、包括的なハウツーガイドコード例を参照してください。

よくある質問

画像データをディスクに保存せずに、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オブジェクトや他 for .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,525,971 | バージョン: 2026.3 リリース
Still Scrolling Icon

まだスクロールしていますか?

すぐに証拠が欲しいですか? PM > Install-Package IronOcr
サンプルを実行 あなたの画像が検索可能なテキストになるのをご覧ください。