SkillAgentSearch skills...

OMRChecker

Evaluate OMR sheets fast and accurately using a scanner 🖨 or your phone 🤳.

Install / Use

/learn @Udayraj123/OMRChecker

README

OMR Checker

Read OMR sheets fast and accurately using a scanner 🖨 or your phone 🤳.

What is OMR?

OMR stands for Optical Mark Recognition, used to detect and interpret human-marked data on documents. OMR refers to the process of reading and evaluating OMR sheets, commonly used in exams, surveys, and other forms.

Quick Links

<hr />

PRs Welcome <!-- [![Maintenance](https://img.shields.io/badge/Maintained%3F-yes-brightgreen.svg)](https://github.com/Udayraj123/OMRChecker/wiki/TODOs) --> GitHub pull-requests closed GitHub issues-closed Ask me

<!-- [![GitHub contributors](https://img.shields.io/github/contributors/Udayraj123/OMRChecker.svg)](https://GitHub.com/Udayraj123/OMRChecker/graphs/contributors/) -->

GitHub stars Join

<!-- [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/gist/Udayraj123/a125b1531c61cceed5f06994329cba66/omrchecker-on-cloud.ipynb) -->

🎯 Features

A full-fledged OMR checking software that can read and evaluate OMR sheets scanned at any angle and having any color.

| Specs <img width=200/> | Current_Speed Min Resolution <img width=200/> | | :--------------------- | :--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | 💯 Accurate | Currently nearly 100% accurate on good quality document scans; and about 90% accurate on mobile images. | | 💪🏿 Robust | Supports low resolution, xeroxed sheets. See Robustness for more. | | ⏩ Fast | Current processing speed without any optimization is 200 OMRs/minute. | | ✅ Customizable | Easily apply to custom OMR layouts, surveys, etc. | | 📊 Visually Rich | Get insights to configure and debug easily. | | 🎈 Lightweight | Very minimal core code size. | | 🏫 Large Scale | Tested on a large scale at Technothlon. | | 👩🏿‍💻 Dev Friendly | Pylinted and Black formatted code. Also has a developer community on discord. |

Note: For solving interesting challenges, developers can check out TODOs.

See the complete guide and details at Project Wiki.

<!-- 💁🏿‍♂️ **User Friendly** - WIP, Help by contributing! -->

💡 What can OMRChecker do for me?

Once you configure the OMR layout, just throw images of the sheets at the software; and you'll get back the marked responses in an excel sheet!

Images can be taken from various angles as shown below-

<p align="center"> <img alt="sample_input" width="400" src="https://raw.githubusercontent.com/wiki/Udayraj123/OMRChecker/extras/Progress/2019-04-26/images/sample_input.PNG"> </p>

Code in action on images taken by scanner:

<p align="center"> <img alt="document_scanner" height="300" src="https://raw.githubusercontent.com/wiki/Udayraj123/OMRChecker/extras/mini_scripts/outputs/gif/document_scanner.gif"> </p>

Code in action on images taken by a mobile phone:

<p align="center"> <img alt="checking_xeroxed_mobile" height="300" src="https://raw.githubusercontent.com/wiki/Udayraj123/OMRChecker/extras/mini_scripts/outputs/gif/checking_xeroxed_mobile.gif"> </p>

Visuals

Processing steps

See step-by-step processing of any OMR sheet:

<p align="center"> <a href="https://github.com/Udayraj123/OMRChecker/wiki/Rich-Visuals"> <img alt="rotation_stack" width="650" src="https://raw.githubusercontent.com/wiki/Udayraj123/OMRChecker/extras/Progress/2019-04-26/images/rotation.PNG"> </a> <br> *Note: This image is generated by the code itself!* </p>

Output

Get a CSV sheet containing the detected responses and evaluated scores:

<p align="center"> <a href="https://github.com/Udayraj123/OMRChecker/wiki/Rich-Visuals"> <img alt="csv_output" width="550" src="https://raw.githubusercontent.com/wiki/Udayraj123/OMRChecker/extras/Progress/2019-04-26/images/csv_output.PNG"> </a> </p>

We now support colored outputs as well. Here's a sample output on another image -

<p align="center"> <a href="https://github.com/Udayraj123/OMRChecker/wiki/%5Bv2%5D-About-Evaluation"> <img alt="colored_output" width="550" src="./docs/assets/colored_output.jpg"> </a> </p>

There are many more visuals in the wiki. Check them out here!

Getting started

Setup Time

Operating system: OSX or Linux is recommended although Windows is also supported.

1. Install global dependencies

opencv 4.0.0 python 3.5+

To check if python3 and pip is already installed:

python3 --version
python3 -m pip --version
<details> <summary><b>Install Python3</b></summary>

To install python3 follow instructions here

To install pip - follow instructions here

</details> <details> <summary><b>Install OpenCV</b></summary>

Any installation method is fine.

Recommended:

python3 -m pip install --user --upgrade pip
python3 -m pip install --user opencv-python
python3 -m pip install --user opencv-contrib-python

More details on pip install openCV here.

</details> <details> <summary><b>Extra steps(for Linux users only)</b></summary>

<b>Installing missing libraries(if any):</b>

On a fresh computer, some of the libraries may get missing in event after a successful pip install. Install them using following commands(ref):

sudo apt-get install -y build-essential cmake unzip pkg-config
sudo apt-get install -y libjpeg-dev libpng-dev libtiff-dev
sudo apt-get install -y libavcodec-dev libavformat-dev libswscale-dev libv4l-dev
sudo apt-get install -y libatlas-base-dev gfortran
</details>

2. Install project dependencies

Clone the repo

git clone https://github.com/Udayraj123/OMRChecker
cd OMRChecker/

Install pip requirements

python3 -m pip install --user -r requirements.txt

Note: If you face a distutils error in pip, use --ignore-installed flag in above command.

<!-- Wiki should not get cloned -->

3. Run the code

  1. First copy and examine the sample data to know how to structure your inputs:
    cp -r ./samples/sample1 inputs/
    # Note: you may remove previous inputs (if any) with `mv inputs/* ~/.trash`
    # Change the number N in sampleN to see more examples
    
  2. Run OMRChecker:
    python3 main.py
    

Alternatively you can also use python3 main.py -i ./samples/sample1.

Each example in the samples folder demonstrates different ways in which OMRChecker can be used.

Common Issues

<details> <summary> 1. [Windows] ERROR: Could not open requirements file<br> </summary> Command: <code>python3 -m pip install --user -r requirements.txt</code> <br> Link to Solution: <a href="https://github.com/Udayraj123/OMRChecker/issues/54#issuecomment-1264569006">#54</a> </details> <details> <summary> 2. [Linux] ERROR: No module named pip<br> </summary> Command: <code>python3 -m pip install --user --upgrade p
View on GitHub
GitHub Stars1.0k
CategoryDevelopment
Updated2d ago
Forks464

Languages

Python

Security Score

100/100

Audited on Mar 25, 2026

No findings