Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Added OMR test scanner using CV techniques #1193

Conversation

Panchadip-128
Copy link
Contributor

Introduction
OMR (Optical Mark Recognition) is a technique used to capture human-marked data from documents like multiple-choice exams, surveys, and ballots. An OMR scanner identifies marks made by users (typically filled bubbles or boxes) on a printed form, and then processes that data. This project aims to build an OMR scanner and grader that can read and grade multiple-choice test forms including handling of multiple marked bubbles , Non-filled bubbles, Visualization of correct and incorrect answers and displaying the percentage of correct answers at the bottom of the OMR sheet. It also includes reading the answer key from a CSV file, easier to input large answer keys.

Methodology
Image Preprocessing:
Image Acquisition: Capture or scan the OMR sheet (scanned or photographed).

Grayscale Conversion: Convert the image to grayscale to simplify further processing.

Thresholding/Binarization: Apply thresholding to convert the grayscale image into a binary image (black and white). This helps in clearly distinguishing the filled marks from the background.

Noise Reduction: Use filters (e.g., Gaussian or median filters) to remove noise from the image.

OMR Sheet Alignment: Perspective Transformation: Correct any skew or rotation in the scanned form using perspective transformation. Contour Detection: Find the contours of the OMR form, ensuring to process the area that contains the marks (typically a grid of answer choices). Bubble/Mark Detection: Grid Division: Divide the detected region of interest (ROI) into sections corresponding to the answer options (i.e., the grid where bubbles are located). Mark Identification: For each section, check whether a bubble is filled. This can be done by counting the number of black pixels in each bubble region and setting a threshold to decide if a bubble is marked (e.g., more than 60% of the area is filled). -Handling Multiple Marks: If the user marks more than one option for a question, it can be marked as incorrect based on predefined rules. Answer Key Comparison: Once the marked bubbles are detected, compare the selected answers with the correct answer key stored in the system. The given code reads the answer key from a CSV file using the pandas library. Each correct answer receives a point, and wrong or multiple answers get no points.

Copy link

github-actions bot commented Nov 9, 2024

Thank you for submitting your pull request! 🙌 We'll review it as soon as possible. If there are any specific instructions or feedback regarding your PR, we'll provide them here. Thanks again for your contribution! 😊

@Panchadip-128
Copy link
Contributor Author

@Niketkumardheeryan Sorry to intervene, but pls review once as time is less

@Niketkumardheeryan
Copy link
Owner

@Panchadip-128 run each cell of your code ,

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants