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

Java API สำหรับสร้างเทมเพลต OMR และดำเนินการ OMR

Aspose.OMR for Java คือ API การจดจำเครื่องหมายด้วยแสงที่สามารถดำเนินการ OMR บน PNG, GIF, JPEG, TIFF, ฯลฯ ภาพ. API ยังรองรับการสร้างเทมเพลต OMR คุณสามารถดาวน์โหลด API ได้โดยตรงจากส่วน ดาวน์โหลด หรือติดตั้งโดยใช้การกำหนดค่า Maven ต่อไปนี้

<repositories>
    <repository>
        <id>AsposeJavaAPI</id>
        <name>Aspose Java API</name>
        <url>http://repository.aspose.com/repo/</url>
    </repository>
</repositories>
<dependency>
	<groupId>com.aspose</groupId>
	<artifactId>aspose-omr</artifactId>
	<version>19.12</version>
	<classifier>jdk6</classifier>
</dependency>

<dependency>
	<groupId>com.aspose</groupId>
	<artifactId>aspose-omr</artifactId>
	<version>19.12</version>
	<classifier>javadoc</classifier>
</dependency>

สร้างเทมเพลต OMR และภาพกระดาษคำตอบโดยใช้ Java

ในส่วนนี้ คุณจะได้เรียนรู้วิธีสร้างไฟล์เทมเพลต OMR และภาพกระดาษคำตอบโดยใช้มาร์กอัปข้อความอย่างง่าย เราจะเก็บมาร์กอัปข้อความไว้ในไฟล์ TXT และใช้ในโค้ด Java เพื่อสร้างเทมเพลต 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 not only scans, but also photos?
	() 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________________________________

ตอนนี้เรามีมาร์กอัปข้อความพร้อมแล้ว เราจะทำตามขั้นตอนด้านล่างเพื่อสร้างเทมเพลต OMR

โค้ดตัวอย่างต่อไปนี้แสดงวิธีสร้างเทมเพลต OMR โดยใช้มาร์กอัปข้อความด้วย Java

// พาธไดเร็กทอรีต้นทางและเอาต์พุต
String sourceDirectory = "SourceDirectory\\OMR\\Generation\\";
String outputDirectory = "OutputDirectory\\";

// สร้างอินสแตนซ์ของคลาส OmrEngine
OmrEngine engine = new OmrEngine();

// สร้างเทมเพลตโดยใช้มาร์กอัปข้อความ
GenerationResult res = engine.generateTemplate(sourceDirectory + "Grid.txt");

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

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

โค้ดด้านบนจะสร้างไฟล์เทมเพลต OMR และรูปภาพของกระดาษคำตอบ ต่อไปนี้เป็นภาพของกระดาษคำตอบที่สร้างขึ้น

รูปภาพของกระดาษคำตอบที่สร้างโดยรหัสตัวอย่าง

รูปภาพของกระดาษคำตอบที่สร้างโดยรหัสตัวอย่าง

ดำเนินการ OMR บนกระดาษคำตอบ Bubble โดยใช้ Java

หลังจากที่คุณรวบรวมคำตอบในกระดาษคำตอบที่สร้างขึ้นแล้ว คุณสามารถจับภาพของพวกเขาแล้วดำเนินการ OMR กับพวกเขา ในตัวอย่างนี้ เราจะดำเนินการ OMR กับภาพสองภาพ; อันแรกแสดงอยู่ด้านล่าง

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

โค้ดตัวอย่างต่อไปนี้แสดงวิธีการดำเนินการ OMR บนรูปภาพโดยใช้ Java

// พาธไดเร็กทอรีต้นทางและเอาต์พุต
String sourceDirectory = "SourceDirectory\\OMR\\";
String outputDirectory = "OutputDirectory\\";

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

// สร้างอินสแตนซ์ของคลาส OmrEngine
OmrEngine engine = new OmrEngine();

// โหลดไฟล์เทมเพลต
TemplateProcessor templateProcessor = engine.getTemplateProcessor(sourceDirectory + "Sheet.omr");
System.out.println("Template loaded.");

// วนซ้ำตามภาพ
for (int i = 0; i < UserImages.length; i++) {

    // รับรู้ภาพและรับผล
    RecognitionResult result = templateProcessor.recognizeImage(sourceDirectory + UserImages[i]);

    // ส่งออกผลลัพธ์เป็นสตริง csv
    String csvResult = result.getCsv();

    // บันทึก csv ไปยังโฟลเดอร์ผลลัพธ์
    PrintWriter wr = new PrintWriter(new FileOutputStream(outputDirectory + UserImagesNoExt[i] + ".csv"), true);
    wr.println(csvResult);
}

ต่อไปนี้คือเอาต์พุต CSV สำหรับรูปภาพแรกที่สร้างโดยโค้ดด้านบน

Element Name,Value,
MainQuestions1,"A"
MainQuestions2,"B"
MainQuestions3,"D"
MainQuestions4,"C"
MainQuestions5,"C"
MainQuestions6,"A"
MainQuestions7,"B"
MainQuestions8,"B"
MainQuestions9,"C"
MainQuestions10,"B"
MainQuestions11,"D"
MainQuestions12,"A"
MainQuestions13,"C"
MainQuestions14,"B"
MainQuestions15,"D"
MainQuestions16,"A"
MainQuestions17,"C"
MainQuestions18,"B"
MainQuestions19,"A"
MainQuestions20,"A"
MainQuestions21,"A"
MainQuestions22,"C"
MainQuestions23,"D"
MainQuestions24,"B"
MainQuestions25,"A"
MainQuestions26,"C"
MainQuestions27,"B"
MainQuestions28,"D"
MainQuestions29,"C"
MainQuestions30,"A"
MainQuestions31,"C"
MainQuestions32,"B"
MainQuestions33,"D"
MainQuestions34,"A"
MainQuestions35,"C"
MainQuestions36,"B"
MainQuestions37,"D"
MainQuestions38,"C"
MainQuestions39,"B"
MainQuestions40,"A"
MainQuestions41,"D"
MainQuestions42,"C"
MainQuestions43,"B"
MainQuestions44,"A"
MainQuestions45,"C"
MainQuestions46,"B"
MainQuestions47,"D"
MainQuestions48,"C"
MainQuestions49,"A"
MainQuestions50,"C"
MainQuestions51,"B"
MainQuestions52,"D"
MainQuestions53,"B"
MainQuestions54,"C"
MainQuestions55,"B"
MainQuestions56,"A"
MainQuestions57,"C"
MainQuestions58,"B"
MainQuestions59,"D"
MainQuestions60,"B"
MainQuestions61,"A"
MainQuestions62,"C"
MainQuestions63,"B"
MainQuestions64,"D"
MainQuestions65,"C"
MainQuestions66,"B"
MainQuestions67,"A"
MainQuestions68,"C"
MainQuestions69,"B"
MainQuestions70,"D"
MainQuestions71,"C"
MainQuestions72,"B"
MainQuestions73,"B"
MainQuestions74,"A"
MainQuestions75,"C"
MainQuestions76,"B"
MainQuestions77,"D"
MainQuestions78,"D"
MainQuestions79,"C"
MainQuestions80,"B"
ID,"27860000" 

รับใบอนุญาตฟรี

คุณสามารถลองใช้ API ได้โดยไม่มีข้อจำกัดในการประเมินโดยขอ ใบอนุญาตชั่วคราวฟรี

บทสรุป

ในบทความนี้ คุณได้เรียนรู้วิธีสร้างเทมเพลต OMR และภาพกระดาษคำตอบโดยใช้ Java นอกจากนี้ คุณได้เรียนรู้วิธีดำเนินการ OMR กับรูปภาพและรับผลลัพธ์เป็น CSV Aspose.OMR for Java เป็น API ที่มีประสิทธิภาพสำหรับงานที่เกี่ยวข้องกับ OMR ของคุณ ซึ่งคุณสามารถสำรวจโดยละเอียดได้โดยไปที่ เอกสารอย่างเป็นทางการ หากคุณมีคำถามใดๆ เกี่ยวกับแง่มุมใดๆ ของ API โปรดติดต่อเราที่ ฟอรัมสนับสนุนฟรี

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