C#で画像の特定領域からテキスト抽出・文字認識を行う方法
C# で画像の特定の領域から文字起こし・テキスト抽出を行うには、IronOCR の Rectangle オブジェクトを使用して、y 座標、width、および height を指定して正確な領域を定義し、それを LoadImage メソッドに渡して対象の文字認識処理を行います。
クイックスタート: 特定の画像領域からテキストを抽出する
-
IronOCR をNuGetパッケージマネージャでインストール
PM > Install-Package IronOcr -
このコード スニペットをコピーして実行します。
using IronOcr; using IronSoftware.Drawing; // 1. Install IronOCR via NuGet: Install-Package IronOcr var ocr = new IronTesseract(); using var input = new OcrInput(); // 2. Create a Rectangle with coordinates var region = new Rectangle(x: 215, y: 1250, width: 1335, height: 280); // 3. Load image with region input.LoadImage("image.png", region); // 4. Extract text var result = ocr.Read(input); Console.WriteLine(result.Text); -
実際の環境でテストするためにデプロイする
今日プロジェクトで IronOCR を使い始めましょう無料トライアル
多くの場合、請求書の合計金額やフォームの特定のフィールドなど、画像の小さな部分からテキストを抽出するだけで済みます。 ドキュメント全体をスキャンするのは非効率的であり、無関係なテキストをキャプチャすることでエラーが発生する可能性があります。
IronOCR を使用すると、スキャンする正確な長方形領域を指定することにより、精度、パフォーマンス、正確性を向上させることができます。 このガイドでは、特定の OCR 領域を定義し、そこからテキストを抽出し、OCR タスクに対して座標が正しいことを視覚的に確認する方法について、ステップバイステップで説明します。
IronOCRを使い始める
画像の特定のOCR領域を定義する方法
- OCR領域を定義するためのC#ライブラリをダウンロードする
- OCRエンジンをインスタンス化する
- OCR領域を長方形で指定する
- `LoadImage`で定義した四角形とともに画像をロードします。
- **`OcrResult`**プロパティにアクセスして、抽出されたデータを表示および操作します。
特定の地域で OCR を実行するにはどうすればよいですか?
特定の OCR 領域を定義するには、IronSoftware.Drawing 名前空間から Rectangle オブジェクトを作成します。 このオブジェクトには、ピクセル単位の 4 つの値 (x 座標、y 座標、width、および height) が必要です。 (y) 座標は、目的の領域の左上隅を表します。
LoadImage を使用してイメージをロードする場合、この Rectangle を 2 番目のパラメータとして渡します。 IronOCR は、OCR プロセスをその境界ボックス内のピクセルのみに制限します。
請求書、スキャンしたフォーム、アイデンティティ文書のように、特定の情報が常に予測可能な場所に表示されるような構造化された文書を扱う場合、地域 OCR は特に便利です。 OCRを関連する領域だけに限定することで、処理速度を大幅に向上させ、無関係なテキストによる誤検出を減らすことができます。
Rectangle の座標を見つけるには、MS ペイントのような簡単な画像エディタを使用できます。 入力画像を開き、指定された領域の左上隅と右下隅にマウスを移動して、ピクセル座標 (y) をメモします。 次に、四角形のプロパティを計算できます: (width = height = y1。
テストにはどのような画像を使用すればよいですか?
3つの段落を含むサンプル画像を使用します。目標は、2番目の段落のみを抽出し、残りのテキストを無視することです。 これは、大きな文書から特定のフィールドやセクションを抽出する必要がある一般的なシナリオを示しています。
コードで地域 OCR を実装するにはどうすればよいですか?
実装には、OcrInput オブジェクトの作成と、指定された長方形領域での画像の読み込みが含まれます。 このアプローチは、JPG、PNG、GIF、TIFF、BMPを含むさまざまな画像フォーマットに対応しています。
:path=/static-assets/ocr/content-code-examples/how-to/ocr-region-of-an-image.cs
using IronOcr;
using IronSoftware.Drawing;
using System;
var ocrTesseract = new IronTesseract();
using var ocrInput = new OcrInput();
// Define the specific region as a Rectangle
// (x, y) is the top-left corner.
var ContentArea = new Rectangle(x: 215, y: 1250, width: 1335, height: 280);
ocrInput.LoadImage("region-input.png", ContentArea);
var ocrResult = ocrTesseract.Read(ocrInput);
// Print the extracted text
Console.WriteLine(ocrResult.Text);
Imports IronOcr
Imports IronSoftware.Drawing
Imports System
Dim ocrTesseract As New IronTesseract()
Using ocrInput As New OcrInput()
' Define the specific region as a Rectangle
' (x, y) is the top-left corner.
Dim ContentArea As New Rectangle(x:=215, y:=1250, width:=1335, height:=280)
ocrInput.LoadImage("region-input.png", ContentArea)
Dim ocrResult = ocrTesseract.Read(ocrInput)
' Print the extracted text
Console.WriteLine(ocrResult.Text)
End Using
より複雑なシナリオでは、同じ画像内に複数のリージョンを定義することができます。 これは、複数のフィールドを持つフォームや、ドキュメント内のテーブルを処理する場合に特に役立ちます:
using IronOcr;
using IronSoftware.Drawing;
var ocr = new IronTesseract();
using var input = new OcrInput();
// Define multiple regions for different form fields
var nameField = new Rectangle(x: 100, y: 200, width: 300, height: 50);
var dateField = new Rectangle(x: 100, y: 300, width: 200, height: 50);
var amountField = new Rectangle(x: 400, y: 500, width: 150, height: 50);
// Load the same image multiple times with different regions
input.LoadImage("form.png", nameField);
var nameResult = ocr.Read(input);
input.Clear();
input.LoadImage("form.png", dateField);
var dateResult = ocr.Read(input);
input.Clear();
input.LoadImage("form.png", amountField);
var amountResult = ocr.Read(input);
// Process each field separately
Console.WriteLine($"Name: {nameResult.Text}");
Console.WriteLine($"Date: {dateResult.Text}");
Console.WriteLine($"Amount: {amountResult.Text}");
using IronOcr;
using IronSoftware.Drawing;
var ocr = new IronTesseract();
using var input = new OcrInput();
// Define multiple regions for different form fields
var nameField = new Rectangle(x: 100, y: 200, width: 300, height: 50);
var dateField = new Rectangle(x: 100, y: 300, width: 200, height: 50);
var amountField = new Rectangle(x: 400, y: 500, width: 150, height: 50);
// Load the same image multiple times with different regions
input.LoadImage("form.png", nameField);
var nameResult = ocr.Read(input);
input.Clear();
input.LoadImage("form.png", dateField);
var dateResult = ocr.Read(input);
input.Clear();
input.LoadImage("form.png", amountField);
var amountResult = ocr.Read(input);
// Process each field separately
Console.WriteLine($"Name: {nameResult.Text}");
Console.WriteLine($"Date: {dateResult.Text}");
Console.WriteLine($"Amount: {amountResult.Text}");
Imports IronOcr
Imports IronSoftware.Drawing
Dim ocr As New IronTesseract()
Using input As New OcrInput()
' Define multiple regions for different form fields
Dim nameField As New Rectangle(x:=100, y:=200, width:=300, height:=50)
Dim dateField As New Rectangle(x:=100, y:=300, width:=200, height:=50)
Dim amountField As New Rectangle(x:=400, y:=500, width:=150, height:=50)
' Load the same image multiple times with different regions
input.LoadImage("form.png", nameField)
Dim nameResult = ocr.Read(input)
input.Clear()
input.LoadImage("form.png", dateField)
Dim dateResult = ocr.Read(input)
input.Clear()
input.LoadImage("form.png", amountField)
Dim amountResult = ocr.Read(input)
' Process each field separately
Console.WriteLine($"Name: {nameResult.Text}")
Console.WriteLine($"Date: {dateResult.Text}")
Console.WriteLine($"Amount: {amountResult.Text}")
End Using
どのような結果を期待できますか?
コンソール出力からわかるように、OCR によって処理されるのは 2 番目の段落のみです。 このようなターゲットを絞ったアプローチにより、画像の他の部分から無関係なテキストが翻訳結果を邪魔することがなくなります。
地域OCRの精度は、いくつかの要因に左右されます:
座標が正しいことを確認するにはどうすればよいですか?
入力画像の正しい座標を選択したことを確認するには、定義したContentArea を視覚化します。 これを行う簡単な方法は、入力画像に四角形を描画し、StampCropRectangleAndSaveAs を使用して新しいファイルとして保存することです。 これにより、座標をデバッグして微調整し、最適なパフォーマンスを実現できます。
この視覚化テクニックは、複雑なレイアウトで作業するときや、品質保証の目的で特定のテキストエリアを強調表示する必要があるときに特に役立ちます。
これは、上記の入力画像の例に指定された境界ボックスを描画した後の出力画像です。
選択した領域を視覚化するにはどうすればよいですか?
:path=/static-assets/ocr/content-code-examples/how-to/ocr-region-of-an-image-highlighted.cs
using IronOcr;
using IronSoftware.Drawing;
var ocrTesseract = new IronTesseract();
using var ocrInput = new OcrInput();
// Define the specific rectangular area to scan within the image.
// The coordinates are in pixels: (x, y) is the top-left corner of the rectangle.
var ContentArea = new Rectangle(x: 4, y: 59, width: 365, height: 26);
ocrInput.LoadImage("region-input.png", ContentArea);
var ocrResult = ocrTesseract.Read(ocrInput);
// Draws the rectangle from above in a blue bounding box on the image for visualization.
ocrInput.StampCropRectangleAndSaveAs(ContentArea, Color.Aqua, "region-input.png");
Imports IronOcr
Imports IronSoftware.Drawing
Dim ocrTesseract = New IronTesseract()
Using ocrInput As New OcrInput()
' Define the specific rectangular area to scan within the image.
' The coordinates are in pixels: (x, y) is the top-left corner of the rectangle.
Dim ContentArea As New Rectangle(x:=4, y:=59, width:=365, height:=26)
ocrInput.LoadImage("region-input.png", ContentArea)
Dim ocrResult = ocrTesseract.Read(ocrInput)
' Draws the rectangle from above in a blue bounding box on the image for visualization.
ocrInput.StampCropRectangleAndSaveAs(ContentArea, Color.Aqua, "region-input.png")
End Using
視覚化はどのように見えますか?
水色の四角形は、処理のために 2 番目の段落を正しく分離したことを確認します。
地域 OCR はいつ使用すべきですか?
地域OCRは、いくつかの一般的なシナリオに最適です:
1.フォーム処理:データが一貫した場所に表示される標準化されたフォームから特定のフィールドを抽出する場合。 2.請求書処理: ドキュメント全体を処理することなく、合計、日付、請求書番号などの特定の値を抽出します。 3.ライセンスプレート:ナンバープレート認識を使用するときは、プレートの領域だけに注目してください。 4.身分証明書: パスポートまたはIDカードから特定のフィールドを抽出します。 5.スクリーンショット:スクリーンショットで特定のUI要素からテキストをキャプチャする場合。
地域 OCR のベストプラクティス
地域OCRで最適な結果を得る
1.パディングを追加する: 文字が端で切れてしまわないように、テキストの周囲に小さなバッファを含めます。 2.サンプル画像でテストする:大きなバッチを処理する前に、常に代表的なサンプルで座標を検証してください。 3.バリエーションを扱う:スキャンした文書のわずかな位置のばらつきを考慮して、領域を必要以上に少し大きくしてください。 4.パフォーマンスを最適化する:マルチスレッド処理では、異なる領域を並行して処理します。 5.自信を監視する:結果の信頼度スコアをチェックし、正確さを確認します。
OCR処理を特定の領域に集中させることで、テキスト抽出タスクの速度と精度の両方を大幅に向上させることができます。 この的を絞ったアプローチは、.NETアプリケーションで効率的な文書処理ワークフローを構築するために不可欠です。
よくある質問
C#で画像の特定の部分のみからテキストを抽出するにはどうすればよいですか?
IronOCRでは、x/y座標、幅、高さの値を持つRectangleオブジェクトを作成することで、特定の領域からテキストを抽出することができます。このRectangleをLoadImageメソッドの2番目のパラメータとして渡すと、IronOCRはその定義された領域のみにOCR処理を制限する。
画像全体をスキャンする代わりにOCR領域を定義する利点は何ですか?
IronOCRで特定のOCR領域を定義することにより、処理速度を向上させ、精度を高め、無関係なテキストを取り込むことによるエラーを減らすことができます。これは、情報が予測可能な場所に現れる構造化された文書に特に有効です。
地域OCR用の矩形を作成するには、どのようなパラメータが必要ですか?
IronOCRの地域OCR用の矩形を作成するには、ピクセル単位でx座標、y座標、幅、高さの4つの値が必要です。(x, y)座標は希望するスキャン領域の左上隅を表します。
OCR 領域用の Rectangle オブジェクトを含む名前空間はどれですか?
IronOCRでOCR領域を定義するRectangleオブジェクトはIronSoftware.Drawing名前空間にあります。
地域別OCR処理が最も有効な文書の種類は?
IronOCRのリージョナルOCRは、請求書、スキャンしたフォーム、IDドキュメントなど、特定の情報が一貫して同じ場所に現れるような構造化されたドキュメントに特に効果的です。

