Skip to content

A calculator that uses handwritten Kannada digits and operators to calculate the result, using contour detection and CNN model predictions. Made using PyTorch, OpenCV, PIL and CustomTkinter.

Notifications You must be signed in to change notification settings

shettysach/Kannada-Handwriting-Calculator

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Kannada-Handwriting-Calculator

Demo

Contour boxes (green), predicted classes (blue) and prediction probabilities (red)

Contours

A calculator that uses handwritten ಕನ್ನಡ (Kannada) digits and operators to calculate the result, using contour detection and ConvNet (Convolutional Neural Network) model prediction.

  • PyTorch is used to create, train and load the state of the neural network model used for predictions.
  • OpenCV and Pillow (PIL) are used to read input from the GUI canvas and to obtain contours for individual digits/operators.
  • CustomTKinter is used to provide the GUI.
  • The individual digits/operators are detected and their most probable target classes are predicted. The predictions are combined into a string and evaluated to get the result.
  • src/ConvNet.ipynb consists of processing the data, creating the CNN model architecture and then training the model.
  • src/Main.ipynb consists of loading the trained model state and using it to make predictions for the calculator app.

Requirements -

For Linux

conda create --name <env> --file requirements.txt
conda activate <env>
pip install customtkinter

For Linux / others

conda create -c conda-forge -c pytorch --name <env> --file reqs.txt
conda activate <env>
pip install customtkinter
  • python 3.9.18
  • pytorch 2.3.1
  • opencv 4.10.0
  • numpy 2.0.0
  • pillow 10.3.0
  • customtkinter 5.2.2
  • pandas 2.2.2 [ Training only ]
  • torchvision 0.18.1 [ Training only ]

Instructions -

  • Clone the repo and run the Jupyter Notebook, src/Main.ipynb, or run src/Main.py.

  • You can use Kannada digits ೦ ೧ ೨ ೩ ೪ ೫ ೬ ೭ ೮ ೯, operators + - × /, decimal point . and parentheses ().

  • You can also use ×× for exponentiation and // for floor division.

  • To train the model yourself, download the data, unzip, move it into the datasets directory, and then run the Jupyter Notebook src/ConvNet.ipynb.

    NOTE: Depending on your screen resolution, you may need to change canvas size, brush delta/displacement and brush thickness to get more accurate results.

Data