Created
September 11, 2025 07:01
-
-
Save cyrusmeh/8f9a84824b002ae80eff9cd204e49128 to your computer and use it in GitHub Desktop.
In this comprehensive deep learning tutorial, we will guide you through the process of building a complete Handwritten Digit Recognition system from scratch using Python! Perfect for beginners, this project is your gateway to the fascinating world of Artificial Intelligence and Convolutional Neural Networks (CNNs).
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| from keras.models import load_model | |
| from tkinter import * | |
| import tkinter as tk | |
| from win32 import win32gui | |
| from PIL import ImageGrab, Image | |
| import numpy as np | |
| model = load_model('mnist.h5') | |
| def predict_digit(img): | |
| #resize image to 28x28 pixels | |
| img = img.resize((28,28)) | |
| #convert rgb to grayscale | |
| img = img.convert('L') | |
| img = np.array(img) | |
| #reshaping to support our model input and normalizing | |
| img = img.reshape(1,28,28,1) | |
| img = img/255.0 | |
| #predicting the class | |
| res = model.predict([img])[0] | |
| return np.argmax(res), max(res) | |
| class App(tk.Tk): | |
| def __init__(self): | |
| tk.Tk.__init__(self) | |
| self.x = self.y = 0 | |
| # Creating elements | |
| self.canvas = tk.Canvas(self, width=300, height=300, bg = "white", cursor="cross") | |
| self.label = tk.Label(self, text="Draw..", font=("Helvetica", 48)) | |
| self.classify_btn = tk.Button(self, text = "Recognise", command = self.classify_handwriting) | |
| self.button_clear = tk.Button(self, text = "Clear", command = self.clear_all) | |
| # Grid structure | |
| self.canvas.grid(row=0, column=0, pady=2, sticky=W, ) | |
| self.label.grid(row=0, column=1,pady=2, padx=2) | |
| self.classify_btn.grid(row=1, column=1, pady=2, padx=2) | |
| self.button_clear.grid(row=1, column=0, pady=2) | |
| #self.canvas.bind("<Motion>", self.start_pos) | |
| self.canvas.bind("<B1-Motion>", self.draw_lines) | |
| def clear_all(self): | |
| self.canvas.delete("all") | |
| def classify_handwriting(self): | |
| HWND = self.canvas.winfo_id() # get the handle of the canvas | |
| rect = win32gui.GetWindowRect(HWND) # get the coordinate of the canvas | |
| a,b,c,d = rect | |
| rect=(a+4,b+4,c-4,d-4) | |
| im = ImageGrab.grab(rect) | |
| digit, acc = predict_digit(im) | |
| self.label.configure(text= str(digit)+', '+ str(int(acc*100))+'%') | |
| def draw_lines(self, event): | |
| self.x = event.x | |
| self.y = event.y | |
| r=8 | |
| self.canvas.create_oval(self.x-r, self.y-r, self.x + r, self.y + r, fill='black') | |
| app = App() | |
| mainloop() |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment