Handwritten Equation Solver in Python Last Updated : 22 May, 2024 Comments Improve Suggest changes Like Article Like Report Acquiring Training Data Downloading Dataset Download the dataset from Kaggle.. Extract the zip file. There will be different folders containing images for different maths symbol. For simplicity, use 0–9 digits, +, ?-?and, times images in our equation solver. On observing the dataset, we can see that it is biased for some of the digits/symbols, as it contains 12000 images for some symbol and 3000 images for others. To remove this bias, reduce the number of images in each folder to approx. 4000.Extracting Features We can use contour extraction to obtain features. Invert the image and then convert it to a binary image because contour extraction gives the best result when the object is white, and surrounding is black.To find contours use 'findContour' function. For features, obtain the bounding rectangle of contour using 'boundingRect' function (Bounding rectangle is the smallest horizontal rectangle enclosing the entire contour).Since each image in our dataset contains only one symbol/digit, we only need the bounding rectangle of maximum size. For this purpose, we calculate the area of the bounding rectangle of each contour and select the rectangle with maximum area.Now, resize the maximum area bounding rectangle to 28 by 28. Reshape it to 784 by 1. So there will be now 784-pixel values or features. Now, give the corresponding label to it (For e.g., for 0–9 images same label as their digit, for - assign label 10, for + assign label 11, for times assign label 12). So now our dataset contains 784 features column and one label column. After extracting features, save the data to a CSV file.Training Data using Convolutional Neural Network Since convolutional neural network works on two-dimensional data and our dataset is in the form of 785 by 1. Therefore, we need to reshape it. Firstly, assign the labels column in our dataset to variable y_train. Then drop the labels column from the dataset and then reshape the dataset to 28 by 28. Now, our dataset is ready for CNN.Building Convolutional Neural Network For making CNN, import all the necessary libraries. Python import pandas as pd import numpy as np import pickle np.random.seed(1212) import keras from keras.models import Model from keras.layers import * from keras import optimizers from keras.layers import Input, Dense from keras.models import Sequential from keras.layers import Dense from keras.layers import Dropout from keras.layers import Flatten from keras.layers.convolutional import Conv2D from keras.layers.convolutional import MaxPooling2D from keras.utils import np_utils from keras import backend as K K.set_image_dim_ordering('th') from keras.utils.np_utils import to_categorical from keras.models import model_from_json Convert the y_train data to categorical data using 'to_categorical' function. For making model, use the following line of code. Python model = Sequential() model.add(Conv2D(30, (5, 5), input_shape =(1, 28, 28), activation ='relu')) model.add(MaxPooling2D(pool_size =(2, 2))) model.add(Conv2D(15, (3, 3), activation ='relu')) model.add(MaxPooling2D(pool_size =(2, 2))) model.add(Dropout(0.2)) model.add(Flatten()) model.add(Dense(128, activation ='relu')) model.add(Dense(50, activation ='relu')) model.add(Dense(13, activation ='softmax')) # Compile model model.compile(loss ='categorical_crossentropy', optimizer ='adam', metrics =['accuracy']) Fitting Model to Data For fitting CNN to data use the following lines of code. Python model.fit(np.array(l), cat, epochs = 10, batch_size = 200, shuffle = True, verbose = 1) It will take around three hours to train our model with an accuracy of 98.46%. After training, we can save our model as json file for future use, So that we don't have to train our model and wait for three hours every time. To save our model, we can use the following line of codes. Python model_json = model.to_json() with open("model_final.json", "w") as json_file: json_file.write(model_json) # serialize weights to HDF5 model.save_weights("model_final.h5") Testing our Model or Solving Equation using it Firstly, import our saved model using the following line of codes. Python json_file = open('model_final.json', 'r') loaded_model_json = json_file.read() json_file.close() loaded_model = model_from_json(loaded_model_json) # load weights into new model loaded_model.load_weights("model_final.h5") Now, input an image containing a handwritten equation. Convert the image to a binary image and then invert the image(if digits/symbols are in black).Now obtain contours of the image, by default, it will obtain contours from left to right.Obtain bounding rectangle for each contour.Sometimes, it will result in two or more contours for the same digit/symbol. To avoid that, check if the bounding rectangle of those two contours overlaps or not. If they overlap, then discard the smaller rectangle.Now, resize all the remaining bounding rectangle to 28 by 28.Using the model, predict the corresponding digit/symbol for each bounding rectangle and store it in a string.After that use 'eval' function on the string to solve the equation. Download the full code for Handwritten equation solver from here Comment More infoAdvertise with us Next Article Solve Complex Equations in Python V vipul73921 Follow Improve Article Tags : Project Articles Python Programs Machine Learning python +1 More Practice Tags : Machine Learningpython Similar Reads Solve Complex Equations in Python Complex numbers seem scary, but Python can help you understand and solve equations with them. This article explores the concept of solving complex equations in Python and various approaches to solve complex equations. Solve Complex Equations in PythonBelow, are the approaches for solving complex equ 4 min read Python | Finding Solutions of a Polynomial Equation Given a quadratic equation, the task is to find the possible solutions to it. Examples: Input : enter the coef of x2 : 1 enter the coef of x : 2 enter the constant : 1 Output : the value for x is -1.0 Input : enter the coef of x2 : 2 enter the coef of x : 3 enter the constant : 2 Output : x1 = -3+5. 2 min read Solve Two Linear Equations Using Python Sympy We are given two linear equations and our task is to solve them by using Python Sympy library. In this article, we will cover different approaches to solve two linear equations using Sympy. Solve Two Linear Equations Using SympyBelow are some of the approaches by which we can solve two linear equati 2 min read Python program to solve quadratic equation A quadratic equation is a polynomial equation of degree 2, which means it contains a term with a variable raised to the power of 2. It takes the form: ax2 + bx + c = 0where,a, b, and c are coefficient and real numbers and also a â 0.If a is equal to 0 that equation is not valid quadratic equation. E 3 min read Smart calculator in Python Problem - This smart calculator works on the text statement also. The user need not provide algebraic expression always. It fetches the word form the command (given by the user) and then formulates the expression.Examples: Input : Hi calculator plz find the lcm of 4 and 8. Output : 8 Input : Hi smar 2 min read Make a Simple Calculator - Python In this article, we will create a simple calculator that can perform basic arithmetic operations like addition, subtraction, multiplication and division. We will explore two implementations for the same:Command-Line CalculatorGUI-Based Calculator using TkinterCommand-Line CalculatorThis version of t 2 min read Like