ไลบรารี Java OMR

คุณต้องการไลบรารี Java OMR ที่เรียบง่ายแต่มีฟีเจอร์ครบครันหรือไม่ คุณต้องการตรวจหาเครื่องหมายออปติกในภาพที่สแกนหรือไม่? ลอง Aspose.OMR สำหรับ Java - ไลบรารีคลาส Java เพื่อดำเนินการ Optical Mark Recognition (OMR) ในแอปพลิเคชันที่ใช้ Java มาดูคุณลักษณะของ Java API ดังกล่าวกันอย่างรวดเร็วเพื่อดูวิธีการจดจำเครื่องหมายออปติคัลในรูปแบบภาพต่างๆ และบันทึกข้อมูลที่มนุษย์ทำเครื่องหมายจากแบบสำรวจ แบบสอบถาม หรือการทดสอบที่มี MCQ

สร้างเทมเพลต OMR แบบไดนามิกโดยใช้ Java OMR Library

Aspose.OMR สำหรับ 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 ได้ เมื่อเสร็จแล้ว คุณสามารถสร้างเทมเพลตโดยใช้ขั้นตอนต่อไปนี้:

  • สร้างวัตถุ OmrEngine
  • โทร OmrEngine.generateTemplate() วิธีการที่ยอมรับเส้นทางของไฟล์ข้อความมาร์กอัป
  • บันทึกเทมเพลตโดยใช้เมธอด GenerationResult.save

ตัวอย่างโค้ดต่อไปนี้แสดงวิธีสร้างเทมเพลต 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++)
{
    // การสร้างเทมเพลตการโทรให้เส้นทางไปยังไฟล์ txt พร้อมมาร์กอัป
    GenerationResult res = engine.generateTemplate(GenerationMarkups[i]);

    // ตรวจสอบในกรณีที่มีข้อผิดพลาด
    if (res.getErrorCode() != 0)
    {
        System.out.println("ERROR CODE: " + res.getErrorCode());
    }

    // บันทึกผลลัพธ์การสร้าง: รูปภาพและเทมเพลต .omr
    res.save(outputDirectory, GenerationMarkupsNoExt[i]);
}

เอาต์พุต

ไลบรารี Java OMR

Optical Mark Recognition (OMR) ในภาพโดยใช้ Java

เพื่อดำเนินการ OMR ในภาพ คุณเพียงแค่ต้องการสองสิ่ง - เทมเพลต OMR ที่เตรียมไว้ (.omr) และรูปภาพ (แบบฟอร์ม/แผ่นงานที่ผู้ใช้กรอก) เพื่อดำเนินการ OMR API รองรับ OMR สำหรับรูปแบบภาพต่อไปนี้:

ต่อไปนี้เป็นขั้นตอนในการดำเนินการ OMR ในภาพ:

  • สร้างวัตถุ OmrEngine
  • สร้างวัตถุ TemplateProcessor และเริ่มต้นด้วยเส้นทางของเทมเพลต OMR
  • จดจำรูปภาพโดยใช้เมธอด TemplateProcessor.recognizeImage() และรับผลลัพธ์ในรูปแบบ CSV หรือ JSON

ตัวอย่างโค้ดต่อไปนี้แสดงวิธีการรับรู้เครื่องหมายออปติคัลในรูปภาพโดยใช้ 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

คุณยังสามารถปรับแต่งผลลัพธ์ OMR ได้อย่างละเอียดโดยกำหนดเกณฑ์ที่กำหนดเองระหว่าง 0 ถึง 100 การเพิ่มเกณฑ์ทำให้ API เข้มงวดมากขึ้นในการจดจำคำตอบ ค่าขีดจำกัดสามารถตั้งค่าในเมธอด 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 ใหม่

ในบางกรณี คุณอาจต้องการคำนวณผลลัพธ์ 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 ของเรา โปรดติดต่อเราผ่านทาง ฟอรัม สำหรับคำถามหรือข้อสงสัยใดๆ

ดูสิ่งนี้ด้วย