ดำเนินการ OMR และแยกข้อมูลโดยใช้ Java

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

หัวข้อต่อไปนี้จะครอบคลุมในบทความนี้:

  1. Java OMR API เพื่อดึงข้อมูลจากรูปภาพ
  2. แยกข้อมูลจากรูปภาพ
  3. ทำ OMR และดึงข้อมูลจากหลายๆ ภาพ
  4. แยกข้อมูล OMR ด้วยเกณฑ์
  5. แยกข้อมูล OMR ด้วยการคำนวณใหม่

Java OMR API เพื่อดึงข้อมูลจากอิมเมจ

ในการดำเนินการ OMR และดึงข้อมูลจาก รูปแบบภาพที่สนับสนุน เราจะใช้ Aspose.OMR for Java API อนุญาตให้ออกแบบ สร้าง และจดจำกระดาษคำตอบ แบบทดสอบ กระดาษ MCQ แบบทดสอบ แบบฟอร์มข้อเสนอแนะ แบบสำรวจ และบัตรลงคะแนน

คลาส OmrEngine ของ API จัดการการสร้างเทมเพลตและการประมวลผลรูปภาพ เมธอด getTemplateProcessor(String templatePath) ของคลาสนี้สร้างอินสแตนซ์ TemplateProcessor สำหรับการประมวลผลเทมเพลตและรูปภาพ เราสามารถจดจำรูปภาพได้โดยใช้เมธอด recognizeImage(String imagePath) จะส่งคืนองค์ประกอบ OMR ทั้งหมดเป็นอินสแตนซ์ของคลาส RecognitionResult เมธอด getCsv() ของคลาสนี้สร้างสตริง CSV พร้อมผลลัพธ์การจดจำ เมธอด recalculate(RecognitionResult result, int recognitionThreshold) จะอัปเดตผลลัพธ์การรับรู้โดยใช้พารามิเตอร์ที่ปรับแต่งอย่างละเอียด

โปรด ดาวน์โหลด JAR ของ API หรือเพิ่มการกำหนดค่า pom.xml ต่อไปนี้ในแอปพลิเคชัน Java ที่ใช้ Maven

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

แยกข้อมูลจากรูปภาพใน Java

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

  1. ขั้นแรก สร้างอินสแตนซ์ของคลาส OmrEngine
  2. ถัดไป เรียกเมธอด getTemplateProcessor() และเตรียมใช้งานอ็อบเจกต์คลาส TemplateProcessor ใช้เส้นทางไฟล์เทมเพลต OMR เป็นอาร์กิวเมนต์
  3. จากนั้น รับวัตถุ RecognitionResult โดยเรียกเมธอด recognitionImage() โดยมีเส้นทางรูปภาพเป็นอาร์กิวเมนต์
  4. หลังจากนั้น รับผลการจดจำเป็นสตริง CSV โดยใช้เมธอด getCsv()
  5. สุดท้าย บันทึกผลลัพธ์ CSV เป็นไฟล์ CSV บนดิสก์ภายในเครื่อง

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

// ตัวอย่างโค้ดนี้สาธิตวิธีดำเนินการ OMR บนรูปภาพและแยกข้อมูล
// เส้นทางไฟล์เทมเพลต OMR
String templatePath = "C:\\Files\\OMR\\Sheet.omr";

// เส้นทางไฟล์ภาพ
String imagePath = "C:\\Files\\OMR\\Sheet1.png";

// เริ่มต้นเครื่องยนต์ OMR
OmrEngine engine = new OmrEngine();

// รับตัวประมวลผลเทมเพลต
TemplateProcessor templateProcessor = engine.getTemplateProcessor(templatePath);

// รู้จักภาพ
RecognitionResult result = templateProcessor.recognizeImage(imagePath);

// รับผลลัพธ์เป็น CSV
String csvResult = result.getCsv();

// บันทึกไฟล์ CSV
PrintWriter wr = new PrintWriter(new FileOutputStream("C:\\Files\\OMR\\Sheet1.csv"), true);
wr.println(csvResult);
แยกข้อมูลจากภาพใน Java

ดำเนินการ OMR และแยกข้อมูลจากรูปภาพใน Java

โปรด ดาวน์โหลดเทมเพลต OMR ที่ใช้ในบล็อกโพสต์นี้

ดำเนินการ OMR และแยกข้อมูลจากหลายภาพ

เราสามารถดำเนินการ OMR กับภาพหลายภาพและแยกข้อมูลในไฟล์ CSV แยกต่างหากสำหรับแต่ละภาพโดยทำตามขั้นตอนที่กล่าวถึงก่อนหน้านี้ อย่างไรก็ตาม เราจำเป็นต้องทำซ้ำขั้นตอน #3, 4 และ 5 สำหรับภาพทั้งหมดทีละภาพ

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

// ตัวอย่างโค้ดนี้สาธิตวิธีดำเนินการ OMR กับรูปภาพหลายรูปและแยกข้อมูล
// เส้นทางโฟลเดอร์การทำงาน
String folderPath = "C:\\Files\\OMR\\";

// เส้นทางไฟล์เทมเพลต OMR
String templatePath = folderPath + "Sheet.omr";

// เส้นทางไฟล์ภาพ
String[] UserImages = new String[] { "Sheet1.png", "Sheet2.png" };

// เริ่มต้นเครื่องยนต์ OMR
OmrEngine engine = new OmrEngine();

// รับตัวประมวลผลเทมเพลต
TemplateProcessor templateProcessor = engine.getTemplateProcessor(templatePath);

// ประมวลผลภาพทีละภาพในลูป
for (int i = 0; i < UserImages.length; i++)
{
    String image = UserImages[i];
    String imagePath = folderPath + image;

    // รู้จักภาพ
    RecognitionResult result = templateProcessor.recognizeImage(imagePath);

    // รับผลลัพธ์เป็น CSV
    String csvResult = result.getCsv();

    // บันทึกไฟล์ CSV
    PrintWriter wr = new PrintWriter(new FileOutputStream(folderPath + "Sheet_" + i + ".csv"), true);
    wr.println(csvResult);
    System.out.println(csvResult);
}

แยกข้อมูล OMR ด้วยเกณฑ์ใน Java

เราสามารถดำเนินการ OMR ด้วยค่าเกณฑ์ (0 ถึง 100) ขึ้นอยู่กับข้อกำหนด ยิ่งค่าของเกณฑ์สูงเท่าใด API ก็ยิ่งเข้มงวดมากขึ้นในการเน้นคำตอบ โปรดทำตามขั้นตอนที่กล่าวถึงก่อนหน้านี้เพื่อดำเนินการ OMR ด้วยเกณฑ์ อย่างไรก็ตาม เราจำเป็นต้องเรียกใช้เมธอด recognitionImage(string, int32) ที่โอเวอร์โหลดในขั้นตอนที่ # 3 ซึ่งใช้พาธไฟล์รูปภาพและค่าเกณฑ์เป็นอาร์กิวเมนต์

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

// ตัวอย่างโค้ดนี้สาธิตวิธีดำเนินการ OMR ด้วย therashold และดึงข้อมูลจากรูปภาพ
// เส้นทางไฟล์เทมเพลต OMR
String templatePath = "C:\\Files\\OMR\\Sheet.omr";

// เส้นทางไฟล์ภาพ
String imagePath = "C:\\Files\\OMR\\Sheet1.png";

// ค่าเกณฑ์
int CustomThreshold = 40;

// เริ่มต้นเครื่องยนต์ OMR
OmrEngine engine = new OmrEngine();

// รับตัวประมวลผลเทมเพลต
TemplateProcessor templateProcessor = engine.getTemplateProcessor(templatePath);

// รู้จักภาพ
RecognitionResult result = templateProcessor.recognizeImage(imagePath, CustomThreshold);

// รับผลลัพธ์เป็น CSV
String csvResult = result.getCsv();

// บันทึกไฟล์ CSV
PrintWriter wr = new PrintWriter(new FileOutputStream("C:\\Files\\OMR\\Sheet1_threshold.csv"), true);
wr.println(csvResult);
System.out.println(csvResult);

แยกข้อมูล OMR ด้วยการคำนวณใหม่ใน Java

ในบางกรณี เราอาจต้องคำนวณผลลัพธ์ OMR ใหม่ด้วยค่าขีดจำกัดที่แตกต่างกัน เพื่อจุดประสงค์นี้ เราสามารถกำหนดค่า API ให้คำนวณใหม่โดยอัตโนมัติโดยใช้เมธอด TemplateProcessor.recalculate() ช่วยให้สามารถประมวลผลภาพได้หลายครั้งโดยเปลี่ยนการตั้งค่าเกณฑ์เพื่อให้ได้ผลลัพธ์ที่ต้องการ เราสามารถดำเนินการ OMR ด้วยการคำนวณใหม่ได้โดยทำตามขั้นตอนด้านล่าง:

  1. ขั้นแรก สร้างอินสแตนซ์ของคลาส OmrEngine
  2. ถัดไป เรียกเมธอด getTemplateProcessor() และเตรียมใช้งานอ็อบเจกต์คลาส TemplateProcessor ใช้เส้นทางไฟล์เทมเพลต OMR เป็นอาร์กิวเมนต์
  3. จากนั้น รับวัตถุ RecognitionResult โดยเรียกเมธอด recognitionImage() โดยมีเส้นทางรูปภาพเป็นอาร์กิวเมนต์
  4. ถัดไป ส่งออกผลการจดจำเป็นสตริง CSV โดยใช้เมธอด getCsv()
  5. จากนั้น บันทึกผลลัพธ์ CSV เป็นไฟล์ CSV บนดิสก์ภายในเครื่อง
  6. ถัดไป เรียกใช้เมธอด recalculate() ใช้วัตถุ RecognitionResult และค่าเกณฑ์เป็นอาร์กิวเมนต์
  7. หลังจากนั้น ให้ส่งออกผลการจดจำเป็นสตริง CSV โดยใช้เมธอด getCsv()
  8. สุดท้าย บันทึกผลลัพธ์ CSV เป็นไฟล์ CSV บนดิสก์ภายในเครื่อง

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

// เส้นทางไฟล์เทมเพลต OMR
String templatePath = "C:\\Files\\OMR\\Sheet.omr";

// เส้นทางไฟล์ภาพ
String imagePath = "C:\\Files\\OMR\\Sheet1.png";

// ค่าเกณฑ์
int CustomThreshold = 40;

// เริ่มต้นเครื่องยนต์ OMR
OmrEngine engine = new OmrEngine();

// รับตัวประมวลผลเทมเพลต
TemplateProcessor templateProcessor = engine.getTemplateProcessor(templatePath);

// รู้จักภาพ
RecognitionResult result = templateProcessor.recognizeImage(imagePath, CustomThreshold);

// รับผลลัพธ์เป็น CSV
String csvResult = result.getCsv();

// บันทึกไฟล์ CSV
PrintWriter wr = new PrintWriter(new FileOutputStream("C:\\Files\\OMR\\Sheet1.csv"), true);
wr.println(csvResult);

// คำนวณใหม่
// คุณสามารถใช้ค่าเกณฑ์ใหม่ได้ที่นี่
templateProcessor.recalculate(result, CustomThreshold);

// รับผลลัพธ์ที่คำนวณใหม่ใน CSV
csvResult = result.getCsv();

// บันทึกไฟล์ CSV ผลลัพธ์ที่คำนวณใหม่
PrintWriter finalWr = new PrintWriter(new FileOutputStream("C:\\Files\\OMR\\Sheet1_recalculated.csv"), true);
finalWr.println(csvResult);

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

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

บทสรุป

ในบทความนี้ เราได้เรียนรู้วิธีการ:

  • ดำเนินการ OMR กับภาพ;
  • แยกข้อมูลในรูปแบบ CSV โดยทางโปรแกรม
  • ใช้การตั้งค่าเกณฑ์ในขณะที่ดำเนินการ OMR กับรูปภาพ
  • คำนวณผลลัพธ์ OMR ใหม่ในกระบวนการยานยนต์โดยใช้ Java

นอกจากนี้ การแยกข้อมูลจากอิมเมจใน Java คุณสามารถเรียนรู้เพิ่มเติมเกี่ยวกับ Aspose.OMR for Java API โดยใช้ เอกสารประกอบ ในกรณีที่มีความคลุมเครือ โปรดติดต่อเราได้ที่ ฟอรัมสนับสนุนฟรี

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