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