کتابخانه جاوا OMR

آیا به یک کتابخانه جاوا OMR ساده و در عین حال غنی از امکانات نیاز دارید؟ آیا می خواهید علائم نوری را در تصاویر اسکن شده تشخیص دهید؟ Aspose.OMR for Java را امتحان کنید - یک کتابخانه کلاس جاوا برای انجام عملیات تشخیص علامت نوری (OMR) در برنامه های کاربردی مبتنی بر جاوا. بیایید یک قدم سریع در میان ویژگی‌های Java API ذکر شده داشته باشیم تا نحوه تشخیص علائم نوری در انواع فرمت‌های تصویر و گرفتن داده‌های علامت‌گذاری شده توسط انسان از نظرسنجی‌ها، پرسشنامه‌ها یا آزمایش‌های حاوی MCQ را ببینیم.

با استفاده از کتابخانه Java OMR به صورت پویا الگوی OMR ایجاد کنید

Aspose.OMR برای جاوا مجموعه کاملی از ویژگی ها از ایجاد قالب 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 ذخیره کنید. پس از اتمام، می توانید با استفاده از مراحل زیر الگو را ایجاد کنید:

نمونه کد زیر نحوه تولید الگوی 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]);
}

خروجی

کتابخانه جاوا OMR

تشخیص علامت نوری (OMR) در تصاویر با استفاده از جاوا

برای انجام OMR در تصاویر، فقط به دو چیز نیاز دارید - قالب OMR آماده شده (omr.) و تصاویر (فرم ها/برگ های پر شده توسط کاربر) برای انجام OMR. API از OMR برای فرمت های تصویر زیر پشتیبانی می کند:

مراحل زیر برای انجام OMR در تصاویر آمده است:

  • شیء OmrEngine ایجاد کنید.
  • شیء TemplateProcessor را ایجاد کنید و آن را با مسیر الگوی OMR مقداردهی اولیه کنید.
  • تصاویر را با استفاده از روش TemplateProcessor.recognizeImage() تشخیص دهید و نتایج را با فرمت CSV یا JSON دریافت کنید.

نمونه کد زیر نحوه تشخیص علائم نوری در تصاویر را با استفاده از جاوا نشان می دهد.

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

همچنین می‌توانید نتایج OMR را با تعریف یک آستانه سفارشی بین 0 تا 100 تنظیم کنید. افزایش آستانه باعث می‌شود API در تشخیص پاسخ‌ها سخت‌تر شود. مقادیر آستانه را می توان در روش TemplateProcessor.recognizeImage() به عنوان پارامتر دوم، همانطور که در نمونه کد جاوا زیر نشان داده شده است، تنظیم کرد.

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() در چنین مواردی، می توانید API را برای محاسبه مجدد خودکار با استفاده از روش TemplateProcessor.recalculate() پیکربندی کنید تا کارایی پردازش تصویر بهبود یابد. نمونه کد زیر نحوه اجرای محاسبه مجدد نتایج OMR را نشان می دهد.

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

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

// موتور init و پردازشگر قالب را دریافت کنید
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();
}

در صورت داشتن هرگونه سؤال یا سؤالی در رابطه با کتابخانه جاوا OMR ما، برای هر گونه سؤال یا سؤال از طریق [فروم 11 ما با ما تماس بگیرید.

همچنین ببینید