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

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

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

C# OMR API เพื่อดำเนินการ OMR และแยกข้อมูล

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

PM> Install-Package Aspose.OMR

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

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

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

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

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

// เส้นทางไฟล์ภาพ
string imagePath = @"D:\Files\OMR\Sheet1.jpg";

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

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

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

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

// บันทึกไฟล์ CSV
File.WriteAllText(@"D:\Files\OMR\Sheet1.csv", csvResult);
ดำเนินการ OMR และดึงข้อมูลจากรูปภาพ

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

เทมเพลต OMR ที่ใช้ในตัวอย่างโค้ดด้านบนสามารถดาวน์โหลดได้จาก ที่นี่

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

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

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

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

// เส้นทางไฟล์โฟลเดอร์รูปภาพ
string imageFolderPath = @"D:\Files\OMR\";

// เส้นทางไดเร็กทอรีเอาต์พุต
string outputPath = @"D:\Files\OMR\";

// ภาพที่จะประมวลผล
string[] UserImages = new string[] { "Sheet1.jpg", "Sheet2.jpg" };

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

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

// ประมวลภาพทีละภาพ
for (int i = 0; i < UserImages.Length; i++)
{
    string imagePath = Path.Combine(imageFolderPath, UserImages[i]);
    
    // รู้จักภาพ
    RecognitionResult result = templateProcessor.RecognizeImage(imagePath);
    
    // รับผลลัพธ์เป็น CSV
    string csvResult = result.GetCsv();

    // บันทึกไฟล์ CSV
    File.WriteAllText(Path.Combine(outputPath, Path.GetFileNameWithoutExtension(UserImages[i]) + ".csv"), csvResult);
}

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

รับผลลัพธ์ OMR ด้วยเกณฑ์

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

ตัวอย่างโค้ดต่อไปนี้แสดงวิธีดำเนินการ OMR ด้วยค่าขีดจำกัดโดยใช้ C#

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

// เส้นทางไฟล์ภาพ
string imagePath = @"D:\Files\OMR\Sheet1.jpg";

// ค่าเกณฑ์
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
File.WriteAllText(@"D:\Files\OMR\Sheet1_threshold.csv", csvResult);

การดำเนินการ OMR พร้อมการคำนวณใหม่

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

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

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

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

// เส้นทางไฟล์ภาพ
string imagePath = @"D:\Files\OMR\Sheet1.jpg";

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

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

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

// ตัวจับเวลาสำหรับการวัดประสิทธิภาพ
Stopwatch sw = Stopwatch.StartNew();

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

sw.Stop();

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

// บันทึกไฟล์ CSV
File.WriteAllText(@"D:\Files\OMR\Sheet1.csv", csvResult);

sw.Restart();

// คำนวณใหม่
templateProcessor.คำนวณใหม่(result, CustomThreshold);
sw.Stop();

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

// บันทึกไฟล์ CSV ผลลัพธ์ที่คำนวณใหม่
File.WriteAllText(@"D:\Files\OMR\Sheet1_คำนวณใหม่d.csv", csvResult);

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

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

บทสรุป

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

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

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

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