GithubHelp home page GithubHelp logo

iansan5653 / open-mcr Goto Github PK

View Code? Open in Web Editor NEW
148.0 6.0 53.0 50.81 MB

:pencil: Exam bubble sheet scorer. Created with OpenCV and Python.

License: GNU General Public License v3.0

Python 97.13% NSIS 2.87%
education open-educational-resources oer omr optical-mark-recognition python computer-vision opencv exam-sheets scanner

open-mcr's Introduction

OpenMCR

Free and Open-Source Multiple Choice Exam Reader

Continuous Integration

Warning As per the license of this software, no warranty is implied. The software is stable but there still may be bugs. Given that students' grades are at stake, please be sure to audit the results - particularly when working with low-quality scans.

Background

Commercially available OMR (optical mark recognition) exam sheets, scanners, and processing software can cost educators and educational institutions thousands of dollars per year. In response to this, OpenMCR has been developed as a free and easy-to-use alternative. The tool includes a multiple choice exam sheet and works with any scanner and printer.

This software and the corresponding multiple choice sheet were developed as an independent study project by Ian Sanders, a mechanical engineering student at the University of South Florida, under the direction of Dr. Autar Kaw.

For a detailed discussion of the algorithm and features in use, please read the report as submitted for the original independent study course.

Installation Instructions

Currently, packaged executables are only provided for Windows. For other operating systems, see Running From Source.

Windows Installation

To install the utility, simply download the latest .exe file from from the releases page and install it. After installation, check your Start menu for a shortcut.

Running Without Install

For users who cannot or do not want to install the software on their machine, ZIP file packages are also available for each release. Download the file, extract it anywhere on your machine, and run the main.exe file. This method does not require administrator priveleges.

Running From Source / CLI

If you wish to customize the software, use the command line interface, or run it on a non-Windows device, you can run the Python program directly from the source files. This requires Python and Pip to be installed on your machine.

  1. Clone the reposotory using Git, or download and extract the latest Source code (zip) file from releases.
  2. Open a terminal / command prompt in the extracted directory.
  3. On Mac machines with fresh Python installations, you will to update TKinter from the default.
  4. Run pip3 install -r requirements.txt to install dependencies.
  5. Run python3 src/main.py for the CLI interface or python3 src/main_gui.py for the graphical interface.

Note: On MacOS, if you see a black screen when running the GUI, you need to uninstall Python, install TKinter, and then reinstall Python. The easiest way to do this is to manage your installation with Homebrew as described here.

Note: On Linux machines, you may see an error message that opencv or tkinter are not found. If you see this, install those dependencies by running sudo apt-get install python3-opencv python3-tk and then try again.

Codespaces

For development, a pre-made environment is available in Codespaces:

Open in GitHub Codespaces

Note

The configuration auomatically installs the desktop-lite feature for running the GUI. This environment can be accessed in your browser through the forwarded 6080 port. The desktop password is vscode.

Printable Multiple Choice Sheet

The multiple choice sheet that must be used with this software is available for printing here:

Usage Instructions

Run the program by finding it in your Start menu after installing.

For full operating instructions, see the Manual or click the Open Help button in the software.

Feedback / Bug Reports

To report a bug, request a new feature, or provide feedback, please file an issue.

License

Software License

Copyright (C) 2019 Ian Sanders

This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.

This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.

For the full license text, see license.txt.

Multiple Choice Sheet License

The multiple choice sheet distributed with this software is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International license (CC BY-NC-SA 4.0). In summary, this means that you are free to distribute and modify the document so long as you share it under the same license, provide attribution, and do not use it for commercial purposes. For the full license, see the Creative Commons website.

Note: You are explicitly allowed to distribute the multiple choice sheet without attribution if using it unmodified for educational purpose and not in any way implying that it is your own work. This is an exception to the Creative Commons terms.

open-mcr's People

Contributors

ayalcin1995 avatar dependabot[bot] avatar gutow avatar iansan5653 avatar n1m6 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar

open-mcr's Issues

Add unit tests

This is critically important - there is no automated testing. We need unit and/or end-to-end testing examining as many scenarios as possible. (edit: we do have E2E testing now but could still use some unit tests).

Add 200question option?

Hey, how long would it take to alter the script for a test with 200 questions? I am trying to prepare a simulation exam for medical students (offered for free) and the exam is a 200 questions one.

I would appreciate and try and help with this feature (I'm a linux engineer, but I'm trying to learn some OpenCV anyway)

Add type definitions for OpenCV and Numpy

For now I am limiting this to solely what types I am actively using in the libraries. IE, if I call numpy.function(A,B,C) then I only define:

def function(A: int, B: int, C: int) -> int: ...

Even if the full function is actually something like:

def function(A: int, B: int, C: int, D: float = 45.5) -> int: ...

Read all bubbles in a single operation

Currently the utility processes an image and then reads each zone as a separate operation. It would be much more efficient to read the entire sheet at once and calculate the threshold at that time, as the current method results in reading all the name bubbles twice.

Command line arguments don't support quoted file paths

The command line argument parsing functionality is using the native pathlib.Path constructor method to parse file path arguments. However, this fails when a path is quoted using double quotes, like: --formmap = "C:/Test User/data/map.csv". Because this path has a space, double quotes are necessary. But this fails because the quotes are never stripped.

Solution is to just create a custom parsing method that strips quotes if present.

Sign the installation binaries

Currently installing the program results in a number of errors due to unsigned binaries. We can improve the experience by signing them.

Threshold for determining bubble fill is static but should be dynamic

Currently, if a scanner that darkens the image is used, extra bubbles (especially the W and M bubbles) will be processed as filled. If a scanner that lightens the image is used, not enough bubbles will be considered. The threshold should either be dynamically created or at least improved per-letter.

Gracefully handle when an image is sideways

The software should either provide a more useful error message (it might be simpler to just say "Image X is invalid" rather than "Image X is rotated" since detecting rotation may be difficult), or simply process the image as if it was not sideways (maybe by re-running with 90deg rotation after failure).

List of images that are bad answer sheets.

I have used the software to check about 200 answer sheets in one go. The software was unable to handle bad answer sheets .

So, I had to physically identify and separate the bad answer sheets.

If its okay, I would like to add a feature where the software will generate a separate output file to show the list of images that were bad-answer-sheets.

bad answer sheets are those that do not have the required corners - it could be due to...

  • bad scans
  • dirty / stained pages
  • images that are not answer sheets at all
  • or any such reason

Add a command line interface

A CLI would be very useful for debugging and when users want to do bulk processing. The CLI should accept all of the UI inputs as arguments and skip the UI prompt.

CLI design guidelines: https://clig.dev/

The UI currently looks like this:
image

For each input, there would need to be a command line option (ie, --output-path = ../output).

Output keys.csv in column form instead of row

This is to make it compatible with existing test analysis software.

Example:

Test Form Code A B
Q1 A A
Q2 C C
Q3 E E
Q4 B B
Q5 E E
Q6 C C
Q7 D D
Q8 E E
Q9 A A
Q10 B B
Q11 C C
Q12 B B
Q13 C C
Q14 A A
Q15 E E
Q16 E E
Q17 E E

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.