Simple Optical Mark Recognition in python
Switch branches/tags
Nothing to show
Clone or download
Latest commit f3077e6 Jun 17, 2018
Failed to load latest commit information.
img Initial (public) commit Nov 12, 2016
sheet Initial (public) commit Nov 12, 2016
.gitignore Initial (public) commit Nov 12, 2016 Update Jun 17, 2018 Changes for Python 3 Jun 14, 2018 Create Jun 14, 2018


omr is a simple python2 optical mark recognition script. It takes as input an image of an answered answer sheet and outputs which alternatives were marked. Scroll down for an example.


$ python2 --help
usage: [-h] --input INPUT [--output OUTPUT] [--show]

optional arguments:
  -h, --help       show this help message and exit
  --input INPUT    Input image filename
  --output OUTPUT  Output image filename
  --show           Displays annotated image


$ python --input img/answered-sheet-photo.jpg  --output /tmp/results.png --show

Q1: A
Q2: C
Q3: C
Q4: E
Q5: N/A
Q6: N/A
Q7: A
Q8: N/A
Q9: N/A
Q10: N/A

In this case, we used the following image as input:


And got the following output:


Anwer Sheet

The answer sheet is available in the sheet/ directory.


Run unit tests contains unit tests that can be run using:

$ py.test
======================================================== test session starts =========================================================
platform darwin -- Python 3.6.5, pytest-3.5.1, py-1.5.3, pluggy-0.6.0
rootdir: /Users/user/omr, inifile:
plugins: remotedata-0.2.1, openfiles-0.3.0, doctestplus-0.1.3, arraydiff-0.2
collected 1 item .                                                                                                                  [100%]

====================================================== 1 passed in 1.61 seconds ======================================================