Working Web Version

If you would like to see a working web version of this app, please check out this website: and you can upload this file: It works great on mobile too!


While taking an exam, I shouldn't have to worry about filling in some bubbles properly. I should be spending my time working on the exam. If I could write the letter answer down it would save me a whole lot of time, but then the professor would still have to grade it. Unless we built an image classifier and program to go with it to grade the handwritten test. Win win!

What it does

My program grades handwritten multiple choice tests. It takes in an image of the exam and the answers and automatically grades it using machine learning and computer vision. No need to fill in tiny bubbles and the professor doesn't have to look at my exam to grade it.

How I built it

I first started with the model. I found a large image dataset of handwritten letters and created some models with that data. Once I had a classifier I liked, I saved it to use in my program. Next, I used OpenCV to help create a doc scanner so I could pic out the individual answers on the page. Once I had images for each answer, I was able to run it through my saved model to grade the exam. I utilized OpenCV, Keras, and Tensorflow to build this application.

Challenges I ran into

I wanted to make this a mobile app. Since I used python for all of the code, I thought I would use Kivy, a library for cross platform python apps, to port my project to mobile. I was able to successfully build a desktop app that utilized the camera on the computer a picture of the exam and grade it, all in once place. However, when I ported this to mobile it wouldn't run. When this happened I looked into how I could debug the app, with no success so I decided to try react native, because I knew the popular Hotdog not Hotdog app from Silicon Valley used Tensorflow with react native. With no react native experience and only a few days left, I quick abandoned that approach to a mobile design. I decided to stick with a command line app and touch that up.

Accomplishments that I'm proud of

I am extremely excited to have an command line program that does what I intended. Although I was not able to port it to mobile, I am thrilled with what I have started. I wasn't sure how hard this project would be but I am super proud of the progress I've made so far.

What I learned

Building mobile apps is hard and it takes time to learn new technologies, especially if you want it done right.

What's next for Machine Learning Grader

I am still looking into porting the app to mobile. I am still researching my options and seeing what I can do to make this application better.

Built With

Share this project: