IronOCRで手書き画像を読み取る方法

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

IronOCRは、画像から手書きテキストを確実にデジタル化する特殊なReadHandwritingメソッドを提供し、不規則な間隔やストロークのバリエーションという固有の課題にもかかわらず、英語の手書き文字で約90%の精度を達成します。

クイックスタート: IronOCRで手書き画像を読む

IronOCRで手書き画像を読むのは簡単です。 最初にOCRエンジンをインスタンス化し、次にLoadImageで画像をロードし、最後に手書き認識用に設計された特殊なReadHandwritingメソッドを使用します。 抽出したテキストを印刷し、正確さと内容を確認してください。

処理の前に、画質補正フィルターを適用して可読性を高めることを検討してください。 これらのフィルタは、特にコントラストや解像度の低いスキャン文書に対して、認識精度を大幅に向上させることができます。

どのような入力形式を使用すればよいですか?

OCR処理用の筆記体を示すサンプル手書き入力画像.
:path=/static-assets/ocr/content-code-examples/how-to/read-handwritten-image.cs
using IronOcr;

// Instantiate OCR engine
var ocr = new IronTesseract();

// Load handwriting image
var inputHandWriting = new OcrInput();
inputHandWriting.LoadImage("handwritten.png");

// Perform OCR on the handwriting image
OcrHandwritingResult result = ocr.ReadHandwriting(inputHandWriting);

// Output the recognized handwritten text
Console.WriteLine(result.Text);
// Output the confidence score of the OCR result
Console.WriteLine(result.Confidence);
$vbLabelText   $csharpLabel

どのような結果を期待できますか?

抽出された手書きテキストを示すOCR出力結果と信頼度スコア.

ReadHandwritingメソッドは90.6%の信頼スコアを達成し、冒頭のフレーズ "My name is Erin Fish" を含むテキストの大部分を正しく識別しました。

この強力な結果は、IronOCRが困難な手書き文字にも対応できることを示しています。 このエンジンは、文字間隔や文字のつながりに苦労しながらも、核となるメッセージの抽出に成功しました。 これはIronOCRが複雑で非標準的なテキストを効果的に処理することを示しています。

OCR の初心者の方は、手書き認識に取り組む前に、simple OCR tutorial で基本を理解してください。

非同期バージョンはどのように使用しますか?

IronOCRは非同期バージョンをサポートしています:ReadHandwritingAsyncです。 これは、処理前に入力画像を取得する必要がある非同期コードを扱う場合に役立ちます。 async support documentation は、非同期 OCR 操作の実装に関する包括的なガイダンスを提供します。

同じ入力を使って、asyncメソッドの使い方を説明します:

:path=/static-assets/ocr/content-code-examples/how-to/read-handwritten-image-async.cs
using IronOcr;
using System.Threading.Tasks;

// Instantiate OCR engine
var ocr = new IronTesseract();

// Load handwriting image
var inputHandWriting = new OcrInput();
inputHandWriting.LoadImage("handwritten.png");

// Perform OCR using the async method with 'await'.
// The compiler automatically infers this top-level code block as an 'async Task Main()' method.
OcrHandwritingResult result = await ocr.ReadHandwritingAsync(inputHandWriting);

// Output the recognized handwriting text
Console.WriteLine(result.Text);
// Output the confidence score of the OCR result
Console.WriteLine(result.Confidence);
$vbLabelText   $csharpLabel

オプションのtimeoutMsパラメータを指定すると、自動キャンセルまでのミリ秒を指定できます。 デフォルト値は-1で、時間制限がないことを意味します。

高度な処理テクニック

複雑な手書き認識シナリオについては、以下の高度なテクニックをご検討ください:

地域固有のOCR:フォームや構造化されたドキュメントを扱う場合、領域ベース OCR を使用して、手書きテキストを含む特定の領域に焦点を当てます。 このアプローチは、処理領域を限定することで精度を向上させます:

using IronOcr;
using IronSoftware.Drawing;

var ocrTesseract = new IronTesseract();
using var ocrInput = new OcrInput();

// Define a specific region for signature area
var signatureRegion = new CropRectangle(x: 100, y: 500, width: 300, height: 100);
ocrInput.LoadImage("form-with-signature.png", signatureRegion);

var signatureResult = ocrTesseract.ReadHandwriting(ocrInput);
Console.WriteLine($"Signature text: {signatureResult.Text}");
using IronOcr;
using IronSoftware.Drawing;

var ocrTesseract = new IronTesseract();
using var ocrInput = new OcrInput();

// Define a specific region for signature area
var signatureRegion = new CropRectangle(x: 100, y: 500, width: 300, height: 100);
ocrInput.LoadImage("form-with-signature.png", signatureRegion);

var signatureResult = ocrTesseract.ReadHandwriting(ocrInput);
Console.WriteLine($"Signature text: {signatureResult.Text}");
$vbLabelText   $csharpLabel

進捗追跡:複数の手書き文書のバッチ処理では、進捗追跡を実装して、OCR 操作を監視します:

ocrTesseract.OcrProgress += (sender, e) => 
{
    Console.WriteLine($"Processing: {e.ProgressPercent}% complete");
};
ocrTesseract.OcrProgress += (sender, e) => 
{
    Console.WriteLine($"Processing: {e.ProgressPercent}% complete");
};
$vbLabelText   $csharpLabel

どのような課題に注意すべきですか?

IronOCRは全体的な構造とテキストを保持する高い信頼性を達成しましたが、OCRはまだ手書き文字に苦戦しており、局所的なエラーにつながっています。 よくある課題として、抽出されたアウトプットの検証が必要です:

不規則な間隔:印刷されたテキストは、文字と文字の間隔が均一です。 手書きの場合、筆と筆の間隔や文字のつながりが大きく異なります。 このため、ununiformedが1つの単語ではなく、個々の文字(u n u n i f o c m e d)に分割されるように、文字分割が正しく行われません。

筆跡のばらつき: 人にはそれぞれ個性的な筆跡があり、同じ文字でも毎回書き方が異なります。文字の接続とパターンは大幅に異なります。 エンジンは、ストロークの傾き、筆圧、フォルムのばらつきが大きいため、パターンマッチングの信頼性が標準化されたフォントよりも低くなる。

あいまいな文字の形:手書きでは、簡略化された、あるいは急いで書かれたストロークが使われることが多く、あいまいな形が作られます。素早く書かれた ec のように見えたり、つながった li が誤認されたりすることがあります。

品質と解像度の問題:スキャン画質が悪い、解像度が低い、インクが薄くなっているなどは、認識精度に大きく影響します。 このような問題が発生した場合は、一般的なトラブルシューティングガイドを参照して解決してください。

この方法を使用する場合は、出力が意図された入力と一致していることを確認し、間隔の狭い単語や形の悪い単語に特に注意してください。 ユースケースに特有の一般的な誤認識を処理するための後処理ロジックの実装を検討してください。

ReadHandwritingメソッドは、筆記体に関しては低い精度のOCR抽出しか達成できません。 ブラケットを閉じる

よくある質問

画像から手書きテキストを抽出する場合、どの程度の精度が期待できますか?

IronOCRのReadHandwritingメソッドは、手書きOCRを特に難しくする不規則な間隔やストロークのバリエーションという固有の課題にもかかわらず、英語の手書き認識において約90%の精度を達成しています。

手書き認識に対応している言語は?

IronOCRのReadHandwritingメソッドは現在英語のみサポートしています。多言語OCRの場合は、特殊な手書きメソッドではなく、適切な言語パックを使用した標準のRead()メソッドを使用する必要があります。

手書きOCRにはどのような追加パッケージをインストールする必要がありますか?

IronOCRの手書き認識機能を使用するには、IronOCRのメインライブラリに加えてIronOcr.Extensions.AdvancedScanパッケージをインストールする必要があります。

C#で基本的な手書き認識を実装するにはどうすればよいですか?

IronTesseractインスタンスを作成し、LoadImage()を使用して手書き画像をロードし、ReadHandwriting()メソッドを呼び出し、OcrResultから抽出されたテキストにアクセスします。IronOCRは複雑な画像処理と機械学習を自動的に処理します。

どのような種類の手書き文書を処理できますか?

IronOCRは、過去の記録、患者の入室フォーム、顧客アンケート、手書きメモなど様々な手書き文書を処理することができます。このライブラリは人間の手書きの不一致を処理するように設計されており、手作業による処理ではエラーが発生しやすくなっています。

手書き認識機能を支えている技術は何ですか?

IronOCRの手書き文字認識は、強力なTesseract 5エンジン上に構築されており、高度な画像処理と機械学習アルゴリズムを組み合わせることで、業界をリードする手書き文字認識機能を実現しています。

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

Curtis Chauは、カールトン大学でコンピュータサイエンスの学士号を取得し、Node.js、TypeScript、JavaScript、およびReactに精通したフロントエンド開発を専門としています。直感的で美しいユーザーインターフェースを作成することに情熱を持ち、Curtisは現代のフレームワークを用いた開発や、構造の良い視覚的に魅力的なマニュアルの作成を楽しんでいます。

開発以外にも、CurtisはIoT(Internet of Things)への強い関心を持ち、ハードウェアとソフトウェアの統合方法を模索しています。余暇には、ゲームをしたりDiscordボットを作成したりして、技術に対する愛情と創造性を組み合わせています。

準備はできましたか?
Nuget ダウンロード 5,299,091 | バージョン: 2025.12 リリース