光学式マーク認識(OMR)を使用すると、特殊なタイプのドキュメントフォームにマークされたデータの読み取りとキャプチャが可能になります。このドキュメントフォームは、ユーザーが入力したバブルまたは正方形の入力で構成されるテストまたは調査の場合があります。このような調査フォームやテストシートのスキャン画像に対してOMR操作を簡単に実行し、.NETアプリケーションでプログラムでユーザー入力を読み取ることができます。この記事では、OMRを実行し、C#を使用してデータを抽出する方法を学習します。
この記事では、次のトピックについて説明します。
- OMRを実行してデータを抽出するためのC#OMR API
- OMRを実行し、画像からデータを抽出します
- OMRを実行し、複数の画像からデータを抽出します
- しきい値を使用してOMR結果を取得する
- 再計算を伴うOMR操作
OMRを実行してデータを抽出するためのC#OMR API
OMR操作の実行と画像からのデータのエクスポートには、Aspose.OMR for .NET APIを使用します。これにより、解答用紙、テスト、MCQペーパー、クイズ、フィードバックフォーム、調査、および投票用紙の設計、作成、および認識が可能になります。 APIのDLLをダウンロードするか、NuGetを使用してインストールしてください。
PM> Install-Package Aspose.OMR
OMRを実行し、画像からデータを抽出します
画像に対してOMR操作を実行するには、OMRを実行するために準備されたOMRテンプレート(.omr)と画像(ユーザーが入力したフォーム/シート)が必要です。以下の手順に従って、画像に対してOMR操作を実行し、データを抽出できます。
- まず、OmrEngineクラスのインスタンスを作成します。
- 次に、GetTemplateProcessor()メソッドを呼び出し、TemplateProcessorクラスオブジェクトを初期化します。引数としてOMRテンプレートファイルパスを取ります。
- 次に、画像パスを引数としてRecognizeImage()メソッドを呼び出し、RecognitionResultオブジェクトを取得します。
- その後、GetCsv()メソッドを使用して、認識結果をCSV文字列として取得します。
- 最後に、CSV結果をCSVファイルとしてローカルディスクに保存します。
次のコードサンプルは、画像に対してOMRを実行し、C#を使用してCSV形式でデータを抽出する方法を示しています。
// OMRテンプレートファイルパス
string templatePath = @"D:\Files\OMR\Sheet.omr";
// 画像ファイルのパス
string imagePath = @"D:\Files\OMR\Sheet1.jpg";
// OMRエンジンを初期化する
OmrEngine engine = new OmrEngine();
// テンプレートプロセッサを入手する
TemplateProcessor templateProcessor = engine.GetTemplateProcessor(templatePath);
// 画像を認識する
RecognitionResult result = templateProcessor.RecognizeImage(imagePath);
// CSVで結果を取得
string csvResult = result.GetCsv();
// CSVファイルを保存
File.WriteAllText(@"D:\Files\OMR\Sheet1.csv", csvResult);
上記のコード例で使用されているOMRテンプレートは、ここからダウンロードできます。
OMRを実行し、複数の画像からデータを抽出します
前述の手順に従って、複数の画像に対してOMR操作を実行し、画像ごとに個別のCSVファイルにデータを抽出できます。ただし、すべての画像に対して手順3、4、5を1つずつ繰り返す必要があります。
次のコードサンプルは、複数の画像に対してOMRを実行し、C#を使用してCSV形式でデータを抽出する方法を示しています。
// OMRテンプレートファイルパス
string templatePath = @"D:\Files\OMR\Sheet.omr";
// 画像フォルダのファイルパス
string imageFolderPath = @"D:\Files\OMR\";
// 出力ディレクトリパス
string outputPath = @"D:\Files\OMR\";
// 処理する画像
string[] UserImages = new string[] { "Sheet1.jpg", "Sheet2.jpg" };
// OMRエンジンを初期化する
OmrEngine engine = new OmrEngine();
// テンプレートプロセッサを入手する
TemplateProcessor templateProcessor = engine.GetTemplateProcessor(templatePath);
// 画像を1つずつ処理する
for (int i = 0; i < UserImages.Length; i++)
{
string imagePath = Path.Combine(imageFolderPath, UserImages[i]);
// 画像を認識する
RecognitionResult result = templateProcessor.RecognizeImage(imagePath);
// CSVで結果を取得
string csvResult = result.GetCsv();
// CSVファイルを保存
File.WriteAllText(Path.Combine(outputPath, Path.GetFileNameWithoutExtension(UserImages[i]) + ".csv"), csvResult);
}
APIは、OMR操作中に画像で使用可能なバーコードを検出および認識する機能も提供します。これは、OMR操作のデフォルト機能です。前述の手順に従うことで、OMR操作を実行してバーコードを認識することができます。
しきい値を使用してOMR結果を取得する
画像に対してOMR操作を実行しているときにしきい値を適用できます。しきい値の値は、要件に応じて0〜100の範囲で指定できます。しきい値の値が高いほど、APIは回答の強調表示に関してより厳密になります。前述の手順に従って、しきい値を使用してOMRを実行してください。ただし、手順3でオーバーロードされたRecognizeImage(string, int32)メソッドを呼び出す必要があります。これは、画像ファイルのパスとしきい値を引数として取ります。
次のコードサンプルは、C#を使用してしきい値を使用してOMRを実行する方法を示しています。
// OMRテンプレートファイルパス
string templatePath = @"D:\Files\OMR\Sheet.omr";
// 画像ファイルのパス
string imagePath = @"D:\Files\OMR\Sheet1.jpg";
// しきい値
int CustomThreshold = 40;
// OMRエンジンを初期化する
OmrEngine engine = new OmrEngine();
// テンプレートプロセッサを入手する
TemplateProcessor templateProcessor = engine.GetTemplateProcessor(templatePath);
// 画像を認識する
RecognitionResult result = templateProcessor.RecognizeImage(imagePath, CustomThreshold);
// CSVで結果を取得
string csvResult = result.GetCsv();
// CSVファイルを保存
File.WriteAllText(@"D:\Files\OMR\Sheet1_threshold.csv", csvResult);
再計算を伴うOMR操作
場合によっては、異なるしきい値を使用してOMR結果を再計算する必要があります。この目的のために、TemplateProcessor.recalculate()メソッドを使用して自動的に再計算するようにAPIを構成できます。しきい値設定を変更して目的の結果を得ることができるため、画像を複数回処理できます。以下の手順に従って、再計算を使用してOMR操作を実行できます。
- まず、OmrEngineクラスのインスタンスを作成します。
- 次に、GetTemplateProcessor()メソッドを呼び出し、TemplateProcessorクラスオブジェクトを初期化します。引数としてOMRテンプレートファイルパスを取ります。
- 次に、Stopwatchオブジェクトを初期化し、タイマーを開始します。
- 次に、画像パスを引数としてRecognizeImage()メソッドを呼び出し、RecognitionResultオブジェクトを取得します。
- 次に、タイマーを停止し、GetCsv()メソッドを使用して認識結果をCSV文字列としてエクスポートします。
- 次に、CSV結果をCSVファイルとしてローカルディスクに保存します。
- 次に、Restart()メソッドを使用してタイマーを再起動します。
- 次に、Recalculate()メソッドを呼び出します。これは、RecognitionResultオブジェクトとしきい値を引数として取ります。
- その後、タイマーを停止し、GetCsv()メソッドを使用して認識結果をCSV文字列としてエクスポートします。 10.最後に、CSV結果をCSVファイルとしてローカルディスクに保存します。
次のコードサンプルは、C#を使用した再計算方法でOMRを実行する方法を示しています。
// OMRテンプレートファイルパス
string templatePath = @"D:\Files\OMR\Sheet.omr";
// 画像ファイルのパス
string imagePath = @"D:\Files\OMR\Sheet1.jpg";
// しきい値
int CustomThreshold = 40;
// OMRエンジンを初期化する
OmrEngine engine = new OmrEngine();
// テンプレートプロセッサを入手する
TemplateProcessor templateProcessor = engine.GetTemplateProcessor(templatePath);
// 性能測定用タイマー
Stopwatch sw = Stopwatch.StartNew();
// 画像を認識する
RecognitionResult result = templateProcessor.RecognizeImage(imagePath, CustomThreshold);
sw.Stop();
// CSVで結果を取得
string csvResult = result.GetCsv();
// CSVファイルを保存
File.WriteAllText(@"D:\Files\OMR\Sheet1.csv", csvResult);
sw.Restart();
// 再計算
templateProcessor.再計算(result, CustomThreshold);
sw.Stop();
// 再計算された結果をCSVで取得
csvResult = result.GetCsv();
// 再計算された結果のCSVファイルを保存します
File.WriteAllText(@"D:\Files\OMR\Sheet1_再計算d.csv", csvResult);
無料ライセンスを取得する
無料の一時ライセンスを取得して、評価の制限なしにライブラリを試すことができます。
結論
この記事では、次の方法を学びました。
- 画像に対してOMR操作を実行し、C#を使用してCSV形式でデータを抽出します。
- 画像にOMRを実行するときにしきい値設定を適用します。
- プログラムで自動車プロセスのOMR結果を再計算します。
さらに、ドキュメントを使用して、Aspose.OMR for.NET APIについて詳しく知ることができます。あいまいな点がありましたら、フォーラムまでお気軽にお問い合わせください。