文字起こし・テキスト抽出のためにC#でストリームから読み取る方法
IronOCR は、ストリームを OcrInput または OcrImageInput コンストラクターに渡すことで、C# のストリームから直接画像データを読み取り、ファイルをディスクに保存せずに効率的な文字認識処理を可能にします。
ストリームとは、読み書きが可能なバイナリ情報の連続的な流れのことです。 プログラミングでは、ストリームは、管理可能なチャンクで処理することにより、メモリには大きすぎるデータを効率的に処理します。
IronOCRのインポートメソッドは画像データストリームを直接受け取ります。 ストリーム・データをインポート・メソッドに渡すと、必要なすべてのステップが自動的に処理されます。 高度なシナリオについては、さまざまな入力形式を準備するための広範なオプションを提供するOcrInput クラスを参照してください。
クイックスタート: 数秒で OCR 入力にストリームを使用する
この例では、 System.IO.Stream をIronOCRに入力し、ファイル パスをスキップして、最小限のコードを使用して認識されたテキストを取得することで、即時 OCR を示します。
最小限のワークフロー(5ステップ)
- ストリームから読み取るためのC#ライブラリをダウンロードする
- 画像ストリームデータを取得し準備する
- 画像をインポートするには、**`OcrImageInput`**コンストラクタに画像ストリームを渡します。
- OCRを実行するには`Read`メソッドを使用します
- 切り抜き領域を指定して読み込みエリアを定義する
IronOCRでストリームを読むには?
まず、OCR を実行するためにIronTesseractクラスをインスタンス化します。 画像ファイルをインポートするには、AnyBitmap の FromFile メソッドを使用します。この 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);
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)
ストリームベース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);
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)
このテクニックは、画像の特定の領域をOCRする必要がある場合や、テキストが予測可能な場所に表示される構造化ドキュメントを扱う場合に特に役立ちます。 テーブルや構造化データを含むより複雑なシナリオについては、ドキュメント内のテーブルを読む方法を調べてください。
スキャン領域は出力でどのように見えますか?
どのような高度なストリーム処理技術を使用できますか?
ストリームを使用する場合は、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
画像処理を強化するには、フィルタ ウィザードを使用して、特定のドキュメント タイプに最適な前処理ステップを自動的に決定することを検討してください。さらに、ストリーム内の回転した画像や傾いた画像を処理する場合、画像の向きを修正する機能を使用すると、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
最適な結果を得るためには、低解像度のストリームで作業する場合、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
結果オブジェクトは、検索可能なPDFやhOCRのHTMLフォーマットにエクスポートするメソッドも提供しており、ストリーム入力から検索可能なドキュメントアーカイブを簡単に作成できます。 デバッグのために、highlight texts featureを使って、IronOcrが画像から何を検出したかを視覚化することができます。
どのようなパフォーマンスを考慮すべきか
複数のストリームを処理する場合や、高スループットの OCR ソリューションを実装する場合は、以下の最適化戦略を検討してください:
1.インスタンスの再利用: 単一のインスタンスを作成し、複数の操作で再利用します。
2.進捗追跡を実装する:大規模なストリームでは、進捗追跡を使用して処理状況を監視します。
3.並列処理: IronOCR は複数のストリームの同時処理をサポートします
4.画質を最適化する:最適な解像度と鮮明さを確保するためにストリームを前処理します。
パフォーマンスを最大化するために、高速 OCR 設定オプションを検討し、バッチ処理用に マルチスレッド処理の実装を検討してください。 時間に敏感なアプリケーションで作業する場合、タイムアウトを理解することで、長時間実行される OCR 操作を効果的に管理することができます。
一般的なストリームの問題をトラブルシューティングするには?
ストリームを扱う場合、特定の課題に遭遇する可能性があります。 よくあるシナリオの解決策をご紹介します:
-ストリーム位置: IronOCR に渡す前に、常にストリーム位置を 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を他の画像処理ワークフローと簡単に組み合わせることができます。

