مكتبة Java OMR

هل تحتاج إلى مكتبة Java OMR بسيطة ولكنها غنية بالمميزات؟ هل تريد التعرف على العلامات الضوئية في الصور الممسوحة ضوئيًا؟ جرب Aspose.OMR for Java - مكتبة فئة Java لإجراء عمليات التعرف الضوئي على العلامة (OMR) في التطبيقات المستندة إلى Java. دعنا نتجول سريعًا في ميزات Java API المذكورة لمعرفة كيفية التعرف على العلامات الضوئية في مجموعة متنوعة من تنسيقات الصور والتقاط البيانات التي يميزها الإنسان من الاستطلاعات أو الاستبيانات أو الاختبارات التي تحتوي على MCQs.

إنشاء قالب ريال عماني ديناميكيًا باستخدام مكتبة Java OMR

يوفر Aspose.OMR for Java مجموعة كاملة من الميزات من إنشاء قالب OMR إلى التعرف على العلامات الضوئية لالتقاط البيانات. تدعم واجهة برمجة التطبيقات (API) إنشاء ملف قالب OMR أو الصورة من ترميز النص البسيط. يمكنك ببساطة تمرير ترميز النص الخاص بالقالب إلى واجهة برمجة التطبيقات وسوف يقوم بإنشاء القالب لك. ما يلي هو نموذج لترميز نصي لقالب 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 من ترميز النص باستخدام Java.

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++)
{
    // يوفر إنشاء قالب الاستدعاء مسارًا لملف النص مع الترميز
    GenerationResult res = engine.generateTemplate(GenerationMarkups[i]);

    // تحقق في حالة وجود أخطاء
    if (res.getErrorCode() != 0)
    {
        System.out.println("ERROR CODE: " + res.getErrorCode());
    }

    // حفظ نتيجة التوليد: صورة ونموذج عمر
    res.save(outputDirectory, GenerationMarkupsNoExt[i]);
}

انتاج |

مكتبة Java OMR

التعرف البصري على العلامة (OMR) في الصور باستخدام Java

لأداء OMR في الصور ، تحتاج فقط إلى شيئين - نموذج OMR المُعد (.omr) والصور (النماذج / الأوراق المملوءة بالمستخدم) لإجراء OMR عليها. تدعم واجهة برمجة التطبيقات (API) تنسيق 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);
}

استخدام عتبة التعرف المخصصة للريال العماني

يمكنك أيضًا ضبط نتائج البحث عن طريق تحديد عتبة مخصصة بين 0 إلى 100. زيادة الحد يجعل واجهة برمجة التطبيقات أكثر صرامة في التعرف على الإجابات. يمكن تعيين قيم العتبة في طريقة TemplateProcessor.recognizeImage() باعتبارها المعلمة الثانية كما هو موضح في نموذج كود Java التالي.

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 بقيم حد مختلفة. بدلاً من استدعاء 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";

// الحرف الأول والحصول على معالج القالب
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 ، اتصل بنا عبر المنتدى لأية أسئلة أو استفسارات.

أنظر أيضا