/OCR

Handwritten recognition

Primary LanguagePython

Handwriting Recognition

Software to recognize handwriting.

Stats (Digit)

Dataset used - MNIST
Algorithm - Support Vector Machines (kernel = linear)
Training time - 1,036.442 seconds
Prediction time - 1,636.704 seconds
Accuracy - 96.92%

Stats (Letter)

Dataset used - NIST
Algorithm - k-Nearest Neighbours (k = 165)
Training time - 8 seconds
Testing time - 1,340 seconds
Accuracy - 74.13%

Checklist

  • Recognize digit
  • Recognize letter
  • Recognize multiple digits
  • Recognize multiple letters
  • Recognize handwriting
  • Recognize different languages
  • Android app support

How to run

For digit - python digit_recognition.py
For letter - python letter_recognition.py
For Android - python hr_py.py then install app_debug.apk in your phone, open app, draw digit and click Predict

Files info

android_rec.py - Helper script. Receives as input the image from hr_py.py and returns the predicted digit

digit_recognition.py - The main script to interact with the user. Gives the option of recognizing a digit, training the model, testing the model and visualizing the dataset. Linear SVM is used to train the model and the model is saved in a pickle file that can be called again to test the model without having to train the model again and again. Selecting the “Recognise digit” option opens up a Tkinter window where the user can draw multiple digits and get the predicted value.

letter_recognition.py - The main script to interact with the user. Gives the option of recognizing a letter and testing the model. k-Nearest Neighbors with neighbors = 165 is used to train the model and the model is saved in a pickle file that can be called again to test the model without having to train the model again and again. Calling the “Recognise letter” option opens up a Tkinter window where the user can draw multiple letters and get the predicted value.

extract_font (NIST).py - Script to extract raw images of the NIST dataset and convert them to comply with the MNIST dataset configuration.

extract_font (TTF).py - Script to extract raw images from the font dataset and convert them to comply with the MNIST dataset configuration.

hr_py.py - Python script that creates a local server. The Android app when run on the phone sends the user drawn digit to the server and the server downloads it. The image is then passed to the ​android_rec.py ​which converts it to a 28x28 pixel image and returns back the result.

painte.py - Helper class involved with setting up the UI. Setups the Tkinter window, waits for user to draw the digit or letter, converts the image and returns it.

MainActivity.java - The single Java file of the Android app that creates the UI, waits for user to draw the image, connects with the server, sends the image to the server.