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

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

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

IronOCRは、C#のストリームから画像データを直接読み取ります。これには、ストリームをOcrImageInputのコンストラクタに渡すことで、ファイルをディスクに保存することなく効率的な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クラスをインスタンス化します。 画像ファイルをインポートするには、FromFileAnyBitmap メソッドを使用します。この AnyBitmap オブジェクトは、画像データをストリームに変換します。 次に、GetStreamオブジェクトを作成します。 最後に、OCR処理には Read メソッドを使用してください。

: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);
Imports IronOcr
Imports IronSoftware.Drawing

' Instantiate IronTesseract
Private ocrTesseract As New IronTesseract()

' Read image file to AnyBitmap
Private anyBitmap As AnyBitmap = AnyBitmap.FromFile("Potter.tiff")

' Import image stream
Private imageInput = New OcrImageInput(anyBitmap.GetStream())
' Perform OCR
Private ocrResult As OcrResult = ocrTesseract.Read(imageInput)
$vbLabelText   $csharpLabel

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

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

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

  1. メモリ効率: ファイル全体をメモリにロードせずにチャンク単位でデータを処理します
  2. セキュリティ: ディスクに一時ファイルを作成せずに機密文書を処理します
  3. パフォーマンス: ファイルシステム操作からI/Oのオーバーヘッドを排除します
  4. 柔軟性: ウェブアップロード、データベース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);
Imports IronOcr
Imports IronSoftware.Drawing
Imports System

' Instantiate IronTesseract
Private ocrTesseract As New IronTesseract()

' Read image file to AnyBitmap
Private anyBitmap As AnyBitmap = AnyBitmap.FromFile("Potter.tiff")

' Specify crop region
Private scanRegion As New Rectangle(800, 200, 900, 400)

' Add image
Private imageInput = New OcrImageInput(anyBitmap.GetStream(), ContentArea:= scanRegion)
' Perform OCR
Private ocrResult As 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;
}
Imports IronOcr
Imports IronSoftware.Drawing
Imports System.IO

' Process stream with filters
Public Function ProcessStreamWithFilters(imageStream As Stream) As String
    Dim ocrTesseract As New IronTesseract()

    ' Configure for better accuracy
    ocrTesseract.Configuration.BlackListCharacters = "~`$#^*_}{][|\"
    ocrTesseract.Configuration.PageSegmentationMode = TesseractPageSegmentationMode.AutoOsd

    Using input As New OcrImageInput(imageStream)
        ' Apply preprocessing filters
        input.Deskew()
        input.DeNoise()
        input.Sharpen()

        Dim result = ocrTesseract.Read(input)
        Return result.Text
    End Using
End Function
$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);
Imports System.IO
Imports System.Net

' From MemoryStream
Dim imageBytes As Byte() = GetImageBytesFromDatabase()
Using memoryStream As New MemoryStream(imageBytes)
    Using input As New OcrImageInput(memoryStream)
        ' Process input
    End Using
End Using

' From FileStream
Using fileStream As New FileStream("document.png", FileMode.Open)
    Using input2 As New OcrImageInput(fileStream)
        ' Process input2
    End Using
End Using

' From network stream
Using webClient As New WebClient()
    Using networkStream As Stream = webClient.OpenRead("https://example.com/image.jpg")
        Using input3 As New OcrImageInput(networkStream)
            ' Process input3
        End Using
    End Using
End Using
$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");
Imports IronOcr

' Process stream and analyze results
Using input As New OcrImageInput(stream)
    Dim result = New IronTesseract().Read(input)

    ' Access detailed results
    For Each page In result.Pages
        Console.WriteLine($"Page {page.PageNumber} Confidence: {page.Confidence}%")

        For Each paragraph In page.Paragraphs
            Console.WriteLine($"Paragraph: {paragraph.Text}")
            Console.WriteLine($"Location: X={paragraph.X}, Y={paragraph.Y}")
        Next
    Next

    ' Export results
    Dim text As String = result.Text
    Dim searchablePdf As String = result.SaveAsSearchablePdf("output.pdf")
    Dim hocrHtml As String = result.SaveAsHocrHtml("output.html")
End Using
$vbLabelText   $csharpLabel

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

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

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

  1. IronTesseract インスタンスの再利用: 単一のインスタンスを作成し、複数の操作で再利用します
  2. 進行状況のトラッキングを実装: 大規模ストリームの場合、進行状況のトラッキングを使用して処理ステータスを監視します
  3. 並列処理: IronOCR は、複数のストリームに対する並列処理をサポートしています
  4. 画像品質を最適化: ストリームを前処理して最適な解像度と明瞭さを確保します

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

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

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

  • ストリーム位置: 0 に渡す前に、常にストリーム位置を 0 にリセットしてください。
  • リソースの破棄: using ステートメントを使用して、リソースの適切なクリーンアップを確実に行う
  • フォーマットサポート: IronOCRは、ストリームを通じてJPEG、PNG、TIFF、BMPなどのさまざまな画像フォーマットをサポートします
  • メモリ管理: 大規模なストリームの場合、チャンク処理またはストリーミングアプローチを考慮してください

複雑な文書や標準的な 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を他の画像処理ワークフローと簡単に組み合わせることができます。

IronOCRは既存のアプリケーションに統合できますか?

IronOCRはC#を使用して既存のアプリケーションに簡単に統合できるよう設計されており、開発者がソフトウェアにOCR機能を少ない手間で追加できるようにします。

ドキュメント管理でIronOCRを使用する利点は何ですか?

IronOCRを使用することで、スキャンされた文書を検索可能かつ編集可能なテキストに変換し、手作業によるデータ入力を減らし、文書のアクセス性を向上させることでワークフローを効率化します。

IronOCRはデータ精度をどのように向上させますか?

IronOCRはその高度な認識アルゴリズムと画像補正機能により、信頼性が高く正確なテキスト抽出プロセスを保証します。

IronOCRの無料トライアルを利用できますか?

はい、Iron SoftwareはIronOCRの無料トライアルを提供しており、ユーザーが購入決定をする前にその機能と能力をテストできます。

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

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,888,303 | バージョン: 2026.5 just released
Still Scrolling Icon

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

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