
光学式マーク認識 (OMR) は、特殊な種類の文書フォームに人がマークしたデータを読み取ってキャプチャできるようにする電子プロセスです。このドキュメント フォームは、ユーザーが入力したバブルまたは正方形の入力で構成されるテストまたはアンケートである可能性があります。このような調査フォーム、アンケート、またはテストシートのスキャンされた画像に対して OMR 操作を簡単に実行し、ユーザー入力をプログラムで読み取ることができます。この記事では、OMR を実行し、Java で画像からデータを抽出する方法を学習します。
この記事では、次のトピックについて説明します。
画像からデータを抽出する Java OMR API
OMR 操作を実行し、サポートされている画像フォーマット からデータを抽出するには、Aspose.OMR for Java API を使用します。これにより、解答用紙、テスト、MCQ 用紙、クイズ、フィードバック フォーム、アンケート、および投票用紙を設計、作成、および認識することができます。
API の OmrEngine クラスは、テンプレートの作成と画像処理を処理します。このクラスの getTemplateProcessor(String templatePath) メソッドは、テンプレートと画像を処理するための TemplateProcessor インスタンスを作成します。 recognizeImage(String imagePath) メソッドを使用して画像を認識できます。すべての OMR 要素を RecognitionResult クラス インスタンスとして返します。このクラスの getCsv() メソッドは、認識結果を含む CSV 文字列を生成します。 recalculate(RecognitionResult result, int registrationThreshold) メソッドは、微調整されたパラメーターを使用して認識結果を更新します。
API の JAR をダウンロード するか、Maven ベースの Java アプリケーションに次の pom.xml 構成を追加してください。
<repository>
<id>AsposeJavaAPI</id>
<name>Aspose Java API</name>
<url>http://repository.aspose.com/repo/</url>
</repository>
<dependency>
<groupId>com.aspose</groupId>
<artifactId>aspose-omr</artifactId>
<version>19.12</version>
</dependency>
Java で画像からデータを抽出する
OMR 操作を実行するには、準備された OMR テンプレート (.omr) と、ユーザーが入力したフォーム/シートの画像が必要です。以下の手順に従って、画像に対して OMR 操作を実行し、データを抽出できます。
- まず、OmrEngine クラスのインスタンスを作成します。
- 次に、getTemplateProcessor() メソッドを呼び出して、TemplateProcessor クラス オブジェクトを初期化します。 OMR テンプレート ファイルのパスを引数として取ります。
- 次に、イメージ パスを引数として認識イメージ() メソッドを呼び出して、RecognitionResult オブジェクトを取得します。
- その後、 getCsv() メソッドを使用して認識結果を CSV 文字列として取得します。
- 最後に、CSV の結果を CSV ファイルとしてローカル ディスクに保存します。
次のコード サンプルは、Java を使用して CSV 形式の画像から OMR データを抽出する方法を示しています。
// このコード例は、イメージに対して OMR を実行し、データを抽出する方法を示しています
// OMR テンプレート ファイルのパス
String templatePath = "C:\\Files\\OMR\\Sheet.omr";
// 画像ファイルのパス
String imagePath = "C:\\Files\\OMR\\Sheet1.png";
// OMR エンジンの初期化
OmrEngine engine = new OmrEngine();
// テンプレート プロセッサを取得する
TemplateProcessor templateProcessor = engine.getTemplateProcessor(templatePath);
// 画像認識
RecognitionResult result = templateProcessor.recognizeImage(imagePath);
// 結果を CSV で取得する
String csvResult = result.getCsv();
// CSVファイルを保存
PrintWriter wr = new PrintWriter(new FileOutputStream("C:\\Files\\OMR\\Sheet1.csv"), true);
wr.println(csvResult);

OMR を実行し、Java でイメージからデータを抽出します。
このブログ投稿で使用されている OMR テンプレートをダウンロード してください。
OMR を実行し、複数の画像からデータを抽出する
前述の手順に従って、複数の画像に対して OMR 操作を実行し、画像ごとに個別の CSV ファイルにデータを抽出できます。ただし、すべての画像に対して手順 3、4、および 5 を 1 つずつ繰り返す必要があります。
次のコード サンプルは、Java を使用して複数の画像から OMR データを抽出する方法を示しています。
// このコード例は、複数の画像に対して OMR を実行し、データを抽出する方法を示しています
// 作業フォルダーのパス
String folderPath = "C:\\Files\\OMR\\";
// OMR テンプレート ファイルのパス
String templatePath = folderPath + "Sheet.omr";
// 画像ファイルのパス
String[] UserImages = new String[] { "Sheet1.png", "Sheet2.png" };
// OMR エンジンの初期化
OmrEngine engine = new OmrEngine();
// テンプレート プロセッサを取得する
TemplateProcessor templateProcessor = engine.getTemplateProcessor(templatePath);
// ループで画像を 1 つずつ処理する
for (int i = 0; i < UserImages.length; i++)
{
String image = UserImages[i];
String imagePath = folderPath + image;
// 画像認識
RecognitionResult result = templateProcessor.recognizeImage(imagePath);
// CSV で結果を取得する
String csvResult = result.getCsv();
// CSVファイルを保存
PrintWriter wr = new PrintWriter(new FileOutputStream(folderPath + "Sheet_" + i + ".csv"), true);
wr.println(csvResult);
System.out.println(csvResult);
}
Java でしきい値を使用して OMR データを抽出する
要件に応じて、しきい値 (0 ~ 100) を使用して OMR 操作を実行できます。しきい値の値が高いほど、API は回答をより厳密に強調表示します。前述の手順に従って、しきい値を使用して OMR を実行してください。ただし、手順 3 で、オーバーロードされた recognizeImage(string, int32) メソッドを呼び出す必要があるだけです。これは、画像ファイルのパスとしきい値を引数として取ります。
次のコード サンプルは、Java を使用してしきい値で OMR を実行する方法を示しています。
// このコード例は、ashold を使用して OMR を実行し、画像からデータを抽出する方法を示しています。
// OMR テンプレート ファイルのパス
String templatePath = "C:\\Files\\OMR\\Sheet.omr";
// 画像ファイルのパス
String imagePath = "C:\\Files\\OMR\\Sheet1.png";
// しきい値
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ファイルを保存
PrintWriter wr = new PrintWriter(new FileOutputStream("C:\\Files\\OMR\\Sheet1_threshold.csv"), true);
wr.println(csvResult);
System.out.println(csvResult);
Java での再計算による OMR データの抽出
場合によっては、OMR の結果を異なるしきい値で再計算する必要があります。この目的のために、TemplateProcessor.recalculate() メソッドを使用して自動的に再計算するように API を構成できます。しきい値設定を変更することで、画像を複数回処理して目的の結果を得ることができます。以下の手順に従って、再計算を使用して OMR 操作を実行できます。
- まず、OmrEngine クラスのインスタンスを作成します。
- 次に、getTemplateProcessor() メソッドを呼び出して、TemplateProcessor クラス オブジェクトを初期化します。 OMR テンプレート ファイルのパスを引数として取ります。
- 次に、イメージ パスを引数として認識イメージ() メソッドを呼び出して、RecognitionResult オブジェクトを取得します。
- 次に、getCsv() メソッドを使用して、認識結果を CSV 文字列としてエクスポートします。
- 次に、CSV の結果を CSV ファイルとしてローカル ディスクに保存します。
- 次に、recalculate() メソッドを呼び出します。 RecognitionResult オブジェクトとしきい値を引数として取ります。
- その後、getCsv() メソッドを使用して、認識結果を CSV 文字列としてエクスポートします。
- 最後に、CSV の結果を CSV ファイルとしてローカル ディスクに保存します。
次のコード サンプルは、Java を使用して再計算方式で OMR を実行する方法を示しています。
// OMR テンプレート ファイルのパス
String templatePath = "C:\\Files\\OMR\\Sheet.omr";
// 画像ファイルのパス
String imagePath = "C:\\Files\\OMR\\Sheet1.png";
// しきい値
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ファイルを保存
PrintWriter wr = new PrintWriter(new FileOutputStream("C:\\Files\\OMR\\Sheet1.csv"), true);
wr.println(csvResult);
// 再計算
// ここで新しいしきい値を適用できます
templateProcessor.recalculate(result, CustomThreshold);
// 再計算結果をCSVで取得
csvResult = result.getCsv();
// 再計算結果のCSVファイルを保存
PrintWriter finalWr = new PrintWriter(new FileOutputStream("C:\\Files\\OMR\\Sheet1_recalculated.csv"), true);
finalWr.println(csvResult);
無料ライセンスを取得する
無料の一時ライセンスを取得して、評価制限なしでライブラリを試すことができます。
結論
この記事では、次の方法を学びました。
- 画像に対して OMR 操作を実行します。
- プログラムで CSV 形式のデータを抽出します。
- 画像に対して OMR を実行する際にしきい値設定を適用します。
- Java を使用して自動車プロセスで OMR の結果を再計算します。
さらに、Java で画像からデータを抽出する方法については、ドキュメント を使用して Aspose.OMR for Java API について詳しく知ることができます。ご不明な点がございましたら、無料サポート フォーラム までお気軽にお問い合わせください。