JavaOMRライブラリ

シンプルでありながら機能豊富なJavaOMRライブラリが必要ですか?スキャンした画像の光学マークを認識しますか? Aspose.OMR for Javaを試してください-Javaベースのアプリケーションで光学式マーク認識(OMR)操作を実行するためのJavaクラスライブラリ。上記のJavaAPIの機能をざっと見て、さまざまな画像形式の光学マークを認識し、MCQを含む調査、アンケート、またはテストから人間がマークしたデータをキャプチャする方法を見てみましょう。

JavaOMRライブラリを使用してOMRテンプレートを動的に作成する

Aspose.OMR for Javaは、OMRテンプレートの作成から、データをキャプチャするための光学式マークの認識まで、一連の機能を提供します。 APIは、単純なテキストマークアップからのOMRテンプレートファイルまたは画像の生成をサポートします。テンプレートのテキストマークアップをAPIに渡すだけで、テンプレートが生成されます。以下は、OMRテンプレートのサンプルテキストマークアップです。

?text=Name__________________________________ Date____________

?grid=ID
sections_count=8
#What is Aspose.OMR main function?
() OCR () Capture human-marked data
() There is no main function () Enhance images
#Can Aspose.OMR process photos as well?
() Yes, indeed! () No
#Aspose.OMR is available on any platform, because it is:
() Cross-platform code () Cloud service
#Aspose.OMR works with any kind of OMR forms: tests, exams, questionnaires, surveys, etc.
() Yes, indeed! () No
#Excellent recognition results can be achieved only for filled bubbles at least for:
() 40% () 60% () 75% () 98%
#Do you have to mark up every question on the page?
(Yes) Yes, that will help a lot! (No) No
#Rate your preference from 0 to 9 with "0" being preference towards performance
and "9" being preference towards flexibility.
(0) (1) (2) (3) (4) (5) (6) (7) (8) (9)
#I found aspose omr to be a useful tool. (5 - strongly agree, 1 - strongly disagree)
(5) (4) (3) (2) (1)

?text= Answer sheet section
?answer_sheet=MainQuestions
elements_count=10
columns_count=5

?text=Sign________________________________

テキストマークアップは、拡張子が.txtのテキストファイルに保存するだけです。完了したら、次の手順を使用してテンプレートを生成できます。

次のコードサンプルは、Javaを使用してテキストマークアップからOMRテンプレートを生成する方法を示しています。

String outputDirectory = "GenerationResult";

String[] GenerationMarkups = new String[] { "Sheet.txt", "Grid.txt", "AsposeTest.txt" };
String[] GenerationMarkupsNoExt = new String[] { "Sheet", "Grid", "AsposeTest" };

OmrEngine engine = new OmrEngine();

for (int i = 0; i < GenerationMarkups.length; i++)
{
    // マークアップ付きのtxtファイルへのパスを提供するテンプレート生成を呼び出します
    GenerationResult res = engine.generateTemplate(GenerationMarkups[i]);

    // エラーの場合はチェック
    if (res.getErrorCode() != 0)
    {
        System.out.println("ERROR CODE: " + res.getErrorCode());
    }

    // 生成結果の保存:画像と.omrテンプレート
    res.save(outputDirectory, GenerationMarkupsNoExt[i]);
}

出力

JavaOMRライブラリ

Javaを使用した画像の光学式マーク認識(OMR)

画像でOMRを実行するには、準備されたOMRテンプレート(.omr)とOMRを実行する画像(ユーザー入力フォーム/シート)の2つが必要です。 APIは、次の画像形式のOMRをサポートしています。

画像でOMRを実行する手順は次のとおりです。

次のコードサンプルは、Javaを使用して画像内の光学マークを認識する方法を示しています。

String[] UserImages = new String[] { "Sheet1.jpg", "Sheet2.jpg" };
String[] UserImagesNoExt = new String[] { "Sheet1", "Sheet2" };

String outputDirectory = "Result";
String templatePath = "Sheet.omr";

// エンジンを初期化し、.omrファイルへのパスを提供するテンプレートプロセッサを取得します
OmrEngine engine = new OmrEngine();
TemplateProcessor templateProcessor = engine.getTemplateProcessor(templatePath);
System.out.println("Template loaded.");

// 画像ループ
for (int i = 0; i < UserImages.length; i++) {
    // 認識される画像へのパス
    String imagePath = UserImages[i];
    System.out.println("Processing image: " + imagePath);

    // 画像を認識して結果を受け取る
    RecognitionResult result = templateProcessor.recognizeImage(imagePath);

    // 結果をcsv文字列としてエクスポート
    String csvResult = result.getCsv();

    String json = result.getJson();

    // csvを出力フォルダーに保存します
    PrintWriter wr = new PrintWriter(new FileOutputStream(UserImagesNoExt[i] + ".csv"), true);
    wr.println(csvResult);
}

OMRのカスタム認識しきい値の使用

0〜100のカスタムしきい値を定義することで、OMRの結果を微調整することもできます。しきい値を大きくすると、APIが回答をより厳密に認識できるようになります。次のJavaコードサンプルに示すように、しきい値はTemplateProcessor.recognizeImage()メソッドで2番目のパラメーターとして設定できます。

String[] UserImages = new String[] { "Sheet1.jpg", "Sheet2.jpg" };
String[] UserImagesNoExt = new String[] { "Sheet1", "Sheet2" };

String outputDirectory = "Result";
String templatePath = "Sheet.omr";
int customThreshold = 40;

// エンジンを初期化し、.omrファイルへのパスを提供するテンプレートプロセッサを取得します
OmrEngine engine = new OmrEngine();
TemplateProcessor templateProcessor = engine.getTemplateProcessor(templatePath);
System.out.println("Template loaded.");

// 画像ループ
for (int i = 0; i < UserImages.length; i++) {
    // 認識される画像へのパス
    String imagePath = UserImages[i];
    System.out.println("Processing image: " + imagePath);

    // 画像を認識して結果を受け取る
    RecognitionResult result = templateProcessor.recognizeImage(imagePath, customThreshold);

    // 結果をcsv文字列としてエクスポート
    String csvResult = result.getCsv();

    String json = result.getJson();

    // csvを出力フォルダーに保存します
    PrintWriter wr = new PrintWriter(new FileOutputStream(UserImagesNoExt[i] + ".csv"), true);
    wr.println(csvResult);
}

OMR結果の再計算

場合によっては、異なるしきい値を使用してOMR結果を再計算したいことがあります。このような場合にTemplateProcessor.recognizeImage()を何度も呼び出す代わりに、TemplateProcessor.recalculate()メソッドを使用して自動再計算用にAPIを構成し、画像処理の効率を向上させることができます。次のコードサンプルは、OMR結果の再計算を実装する方法を示しています。

String[] UserImages = new String[] { "Sheet1.jpg", "Sheet2.jpg" };
String[] UserImagesNoExt = new String[] { "Sheet1", "Sheet2" };

String outputDirectory = "Result";
String templatePath = "Sheet.omr";

// エンジンを初期化し、テンプレートプロセッサを取得します
OmrEngine engine = new OmrEngine();
TemplateProcessor templateProcessor = engine.getTemplateProcessor(templatePath);
System.out.println("Template loaded.");

// 再計算で使用するカスタムしきい値を設定します
// この値は(0〜100)の範囲にあります
// 認識されるバブル画像上の必要な黒ピクセルのパーセンテージを表します
// つまり、値が低いほど、バブルが塗りつぶされたものとしてカウントされるために必要な黒のピクセルが少なくなり、その逆も同様です。
int CustomThreshold = 40;

// 画像ループ
for (int i = 0; i < UserImages.length; i++)
{
    String image = UserImages[i];
    String imagePath = image;
    System.out.println("Processing image: " + imagePath);

    // 画像を認識する
    RecognitionResult result = templateProcessor.recognizeImage(imagePath);

    // エクスポートcsv文字列を取得します
    String stringRes = result.getCsv();

    // csvを出力フォルダーに保存します
    String outputName = UserImagesNoExt[i] + ".csv";

    PrintWriter wr = new PrintWriter(new FileOutputStream(outputName), true);
    wr.println(stringRes);

    System.out.println("Export done. Path: " + outputName);

    // カスタムしきい値を使用して認識結果を再計算します
    templateProcessor.recalculate(result, CustomThreshold);

    // エクスポートcsv文字列を取得します
    stringRes = result.getCsv();

    // 再計算された結果を保存する
    outputName = UserImagesNoExt[i] + "_recalculated.csv";

    wr = new PrintWriter(new FileOutputStream(outputName), true);
    wr.println(stringRes);

    System.out.println("Recalculated result export done. Path: " + outputName);
    System.out.println();
}

Java OMRライブラリに関連する質問や質問がある場合は、フォーラムから質問や質問についてお問い合わせください。

も参照してください