ตรวจจับและดึงพื้นที่ที่ทำเครื่องหมายจากแผ่นสแกนโดยใช้ Python
เครื่องมือ OMR ฟรีแบบโอเพนซอร์สที่พัฒนาด้วย Python รองรับการประมวลผล OMR รองรับการประมวลผลแผ่น OMR การตรวจจับแบบเทมเพลตและการจัดการแบบฟอร์มหลายหน้า เป็นต้น
อะไรคือ PyOMR Librar?
Optical Mark Recognition (OMR) คือเทคโนโลยีที่มีประสิทธิภาพใช้ในการจับข้อมูลที่ผู้ใช้ทำเครื่องหมายจากเอกสารเช่นแบบสำรวจ, การทดสอบ, และบัตรลงคะแนน. แม้ว่าจะมีโซลูชัน OMR เชิงพาณิชย์อยู่แล้ว, แต่สำหรับนักพัฒนาที่มองหาแนวทางฟรีและโอเพนซอร์ส สามารถใช้ PyOMR ซึ่งเป็นไลบรารี Python ที่ออกแบบมาสำหรับการประมวลผล OMR ได้. PyOMR ถูกพัฒนาโดย pattyjogal ทำให้นักพัฒนาซอฟต์แวร์สามารถตรวจจับบับเบิลที่ทำเครื่องหมายบนแบบฟอร์มที่สแกนโดยใช้โค้ด Python ง่าย ๆ และเทคนิคการประมวลผลภาพมาตรฐาน. รองรับการตรวจจับและสกัดพื้นที่ที่ทำเครื่องหมายจากแผ่นสแกน, การประมวลผลแบบฟอร์มหลายตัวเลือก, แบบสำรวจ, และการประเมินผล รวมถึงการปรับแต่งเทมเพลต OMR สำหรับกรณีการใช้งานต่าง ๆ.
PyOMR เป็นเครื่องมือ OMR ที่พัฒนาด้วย Python ออกแบบมาเพื่อตรวจจับเครื่องหมายที่เติมลงบนแบบฟอร์มที่กำหนดไว้ล่วงหน้า เช่น ใบทดสอบแบบเลือกตอบหลายตัวเลือกหรือแบบสำรวจ มันใช้ไลบรารีอย่าง OpenCV สำหรับการประมวลผลภาพและให้ระบบแบบเทมเพลตเพื่อกำหนดพื้นที่เครื่องหมายที่คาดว่าจะอยู่บนแผ่น ไม่ว่าคุณจะเป็นนักพัฒนาซอฟต์แวร์ที่สร้างระบบการให้คะแนน, ครูที่ต้องการอัตโนมัติการประเมินผลการทดสอบ, หรือองค์กรที่เก็บข้อมูลแบบสำรวจ PyOMR ช่วยให้คุณสามารถเชื่อมฟังก์ชัน OMR เข้าไปในแอปของคุณโดยตรง ด้วยแนวทางแบบเทมเพลต, การตรวจจับที่ขับเคลื่อนด้วย OpenCV, และความสามารถในการสคริปต์เต็มรูปแบบ ทำให้เป็นตัวเลือกที่เหมาะสำหรับนักพัฒนาที่ต้องการสร้างเครื่องมือประมวลผลแบบฟอร์มอัตโนมัติโดยไม่ต้องพึ่งพาบริการของบุคคลที่สาม
เริ่มต้นใช้งาน PyOMR
วิธีที่แนะนำในการติดตั้งไลบรารี PyOMR คือการใช้ GitHub โปรดใช้คำสั่งต่อไปนี้เพื่อการติดตั้งที่ราบรื่น
ติดตั้งไลบรารี PyOMR ผ่าน GitHub
git clone https://github.com/pattyjogal/pyomr.git
cd pyomr
ติดตั้งไลบรารีที่รองรับผ่าน GitHub
pip install opencv-python numpy คุณสามารถดาวน์โหลดไลบรารีโดยตรงจาก GitHub
การเตรียมภาพอัตโนมัติผ่าน Python
• ไลบรารีโอเพ่นซอร์ส PyOMR ได้รวมการสนับสนุนเต็มรูปแบบสำหรับการประมวลผลภาพอัตโนมัติภายในแอปพลิเคชัน Python ไลบรารีนี้มีฟังก์ชันในตัวสำหรับการแก้ไขการเอียง (Deskewing) เพื่อแก้ไขการสแกนที่เอียง, การแปลงเป็นสีขาวดำ (Thresholding) เพื่อการตรวจจับเครื่องหมายที่ดียิ่งขึ้นและการกำจัดสัญญาณรบกวนเพื่อเพิ่มความแม่นยำในการสแกนคุณภาพต่ำ นอกจากนี้ยังทำให้เครื่องมือสามารถจัดการกับปัญหาทั่วไปในแบบฟอร์มที่สแกนได้ เช่น ความไม่สม่ำเสมอของแสง, คอนทราสต์ต่ำ, หรือการจัดตำแหน่งเล็กน้อย ตัวอย่างโค้ดต่อไปนี้แสดงวิธีประมวลผลภาพภายในแอปพลิเคชัน Python
วิธีประมวลผลภาพในแอป Python?
from omr import omr_engine
# File paths
template_path = "config.json"
image_path = "answer_sheet.jpg"
# Run the OMR process
results = omr_engine.process_image(image_path, template_path)
# Output the results
for i, response in enumerate(results, 1):
print(f"Q{i}: {response if response else 'No mark detected'}")
การตรวจจับแบบใช้เทมเพลตผ่าน Python
PyOMR ใช้เทมเพลต JSON เพื่อกำหนดรูปแบบของแผ่นคำตอบของคุณ ซึ่งรวมถึงจำนวนคำถาม, จำนวนตัวเลือกต่อคำถาม, ตำแหน่งเริ่มต้นของบับเบิลแรก, ระยะห่างระหว่างแถวและคอลัมน์ และขนาดของบับเบิล สิ่งนี้ทำให้ระบบมีความยืดหยุ่นสูงและสามารถนำกลับมาใช้ใหม่ได้ในรูปแบบต่าง ๆ ตัวอย่างง่าย ๆ ด้านล่างแสดงวิธีสร้างเทมเพลต JSON เพื่อระบุตำแหน่งบับเบิลโดยใช้ไลบรารี Python
วิธีสร้างเทมเพลต JSON เพื่อระบุตำแหน่งบับเบิล & โหลดผ่าน Python?
{
"bubbles": [
{"question": "Q1", "options": ["A", "B", "C", "D"], "coords": [100, 150, 30, 30]},
{"question": "Q2", "options": ["A", "B", "C", "D"], "coords": [100, 200, 30, 30]}
],
"reference_marks": [[50, 50], [500, 50], [50, 700]]
}
#Load template
omr.load_template("template.json")
การจัดการแบบฟอร์มหลายหน้าผ่าน Python
ไลบรารี PyOMR มีการสนับสนุนการจัดการแบบฟอร์มหลายหน้าในแอปพลิเคชัน Python ไม่ว่าจะเป็นการประมวลผลแผ่นคำตอบหน้าเดียวหรือแบบสำรวจหลายหน้า PyOMR สามารถกำหนดค่าให้จัดการกับเค้าโครงที่แตกต่างกันได้ แนะนำสำหรับแบบฟอร์มหลายหน้าให้ประมวลผลแต่ละหน้าแยกกัน: ตัวอย่างโค้ดต่อไปนี้แสดงให้ผู้พัฒนาซอฟต์แวร์เห็นวิธีการจัดการแบบฟอร์มหลายหน้าในแอปพลิเคชัน Python
วิธีจัดการแบบฟอร์มหลายหน้าโดยใช้ไลบรารี Python?
# for multi-page forms, process each page separately:
for page in omr.multi_page_scan("multi_page_form.pdf"):
page.preprocess()
answers = page.read_answers()
print(answers)
การจัดการสัญญาณรบกวนและการเตรียมข้อมูล
ไลบรารี PyOMR แบบโอเพนซอร์สได้ให้การสนับสนุนเต็มรูปแบบสำหรับการประมวลผลภาพล่วงหน้าและการจัดการสัญญาณรบกวนในแอปพลิเคชัน Python ไลบรารีนี้รวมการประมวลผลภาพล่วงหน้า เช่น การแปลงเป็นระดับสีเทา, การตั้งค่าเกณฑ์, และการตรวจจับเส้นขอบ เพื่อระบุเครื่องหมายอย่างแม่นยำ แม้จะเป็นการสแกนที่มีสัญญาณรบกวนหรือการพิมพ์ที่ไม่สมบูรณ์