基于深度学习的手写数字识别项目GUI(Deep Learning Project – Handwritten Digit Recognition using Python)

这篇具有很好参考价值的文章主要介绍了基于深度学习的手写数字识别项目GUI(Deep Learning Project – Handwritten Digit Recognition using Python)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一步一步教你建立手写数字识别项目,需要源文件的请可直接跳转下边的链接:All project

本文摘要

在本文中,我们将使用MNIST数据集实现一个手写数字识别应用程序。我们将使用一种特殊类型的深度神经网络,即卷积神经网络。最后,我们将构建一个GUI,您可以在其中绘制数字并立即识别它。
实现效果:
基于深度学习的手写数字识别项目GUI(Deep Learning Project – Handwritten Digit Recognition using Python)

运行项目的需求

这个有趣的Python项目要求你具备Python编程的基本知识,使用Keras库和Tkinter库进行深度学习,以构建GUI。

使用下面的命令为这个项目安装必要的库:

pip install numpy, tensorflow, keras, pillow,

MNIST 数据集

这可能是机器学习和深度学习爱好者中最受欢迎的数据集之一。MNIST数据集包含60,000张从0到9的手写数字的训练图像和10,000张用于测试的图像。MNIST数据集有10个不同的类。手写数字图像表示为28×28矩阵,其中每个单元格包含灰度像素值。

建立基于深度学习的手写数字识别项目

以下是实现手写数字识别项目的步骤:

1、导入库并加载数据集

首先,我们将导入训练模型所需的所有模块。Keras库已经包含了一些数据集,MNIST就是其中之一。所以我们可以很容易地导入数据集并开始使用它。mnist.load_data()方法返回训练数据及其标签以及测试数据及其标签。

import keras
from keras.datasets import mnist
from keras.models import Sequential
from keras.layers import Dense, Dropout, Flatten
from keras.layers import Conv2D, MaxPooling2D
from keras import backend as K

# the data, split between train and test sets
(x_train, y_train), (x_test, y_test) = mnist.load_data()

print(x_train.shape, y_train.shape)

2、处理数据集

图像数据不能直接输入到模型中,所以我们需要对数据进行一些操作和处理,使其为神经网络做好准备。训练数据的维数为(60000,28,28)。CNN模型将需要多一个维度,因此我们将矩阵重塑为形状(60000,28,28,1)。

x_train = x_train.reshape(x_train.shape[0], 28, 28, 1)
x_test = x_test.reshape(x_test.shape[0], 28, 28, 1)
input_shape = (28, 28, 1)

# convert class vectors to binary class matrices
y_train = keras.utils.to_categorical(y_train, num_classes)
y_test = keras.utils.to_categorical(y_test, num_classes)

x_train = x_train.astype('float32')
x_test = x_test.astype('float32')
x_train /= 255
x_test /= 255
print('x_train shape:', x_train.shape)
print(x_train.shape[0], 'train samples')
print(x_test.shape[0], 'test samples')

3、建立模型

现在我们将在Python数据科学项目中创建CNN模型。CNN模型通常由卷积层和池化层组成。它对于表示为网格结构的数据效果更好,这就是为什么CNN在图像分类问题上效果很好的原因。dropout层用于使一些神经元失活,在训练时,它减少了模型的拟合。然后,我们将使用Adadelta优化器编译模型。

batch_size = 128
num_classes = 10
epochs = 10

model = Sequential()
model.add(Conv2D(32, kernel_size=(3, 3),activation='relu',input_shape=input_shape))
model.add(Conv2D(64, (3, 3), activation='relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Dropout(0.25))
model.add(Flatten())
model.add(Dense(256, activation='relu'))
model.add(Dropout(0.5))
model.add(Dense(num_classes, activation='softmax'))

model.compile(loss=keras.losses.categorical_crossentropy,optimizer=keras.optimizers.Adadelta(),metrics=['accuracy'])

4、训练模型

Keras的model.fit()函数将开始模型的训练。它需要训练数据、验证数据、epoch和批大小。

训练模型需要一些时间。训练完成后,我们将权值和模型定义保存在“mnist.h5”文件。

hist = model.fit(x_train, y_train,batch_size=batch_size,epochs=epochs,verbose=1,validation_data=(x_test, y_test))
print("The model has successfully trained")

model.save('mnist.h5')
print("Saving the model as mnist.h5")

5、评估模型

我们的数据集中有10,000张图像,这些图像将用于评估我们的模型工作的好坏。测试数据没有参与数据的训练,因此是我们模型的新数据。MNIST数据集很好地平衡了,所以我们可以得到大约99%的准确率。

score = model.evaluate(x_test, y_test, verbose=0)
print('Test loss:', score[0])
print('Test accuracy:', score[1])

6、建立GUI界面预测数字

现在对于GUI,我们已经创建了一个新文件,我们在其中构建了一个交互式窗口,用于在画布上绘制数字,并且通过一个按钮,我们可以识别数字。Tkinter库包含在Python标准库中。我们已经创建了一个函数predict_digit(),它将图像作为输入,然后使用训练好的模型来预测数字。

然后我们创建App类,它负责为我们的应用程序构建GUI。我们创建一个画布,我们可以通过捕获鼠标事件和按钮来绘制,我们触发predict_digit()函数并显示结果。

下面是我们的gui_digit_recognizer.py文件的完整代码:

from keras.models import load_model
from tkinter import *
import tkinter as tk
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="Thinking..", 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
        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()

截屏结果

基于深度学习的手写数字识别项目GUI(Deep Learning Project – Handwritten Digit Recognition using Python)
基于深度学习的手写数字识别项目GUI(Deep Learning Project – Handwritten Digit Recognition using Python)
基于深度学习的手写数字识别项目GUI(Deep Learning Project – Handwritten Digit Recognition using Python)

总结

在本文中,我们成功地在手写数字识别应用程序上构建了一个Python深度学习项目。我们构建并训练了卷积神经网络,它对于图像分类非常有效。稍后,我们构建GUI,在画布上绘制数字,然后对数字进行分类并显示结果。文章来源地址https://www.toymoban.com/news/detail-504175.html

到了这里,关于基于深度学习的手写数字识别项目GUI(Deep Learning Project – Handwritten Digit Recognition using Python)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • 深度学习实验:Softmax实现手写数字识别

    深度学习实验:Softmax实现手写数字识别

    文章相关知识点:​​​​​​​AI遮天传 DL-回归与分类_老师我作业忘带了的博客-CSDN博客   MNIST数据集   MNIST手写数字数据集是机器学习领域中广泛使用的图像分类数据集。它包含60,000个训练样本和10,000个测试样本。这些数字已进行尺寸规格化,并在固定尺寸的图像中居中

    2023年04月08日
    浏览(6)
  • 【深度学习】2-4 神经网络-手写数字识别

    在实现对手写数字图像的分类,可以先假设学习已经全部结束,我们使用学习到的参数,先实现神经网络的“推理处理”。该处理也称为神经网络的 前向传播 。 和求解机器学习问题的步骤(分成学习和推理两个阶段进行)一样 使用神经网络解决问题时,也需要 首先使用训练数

    2024年02月09日
    浏览(9)
  • python与深度学习(一):ANN和手写数字识别

    python与深度学习(一):ANN和手写数字识别

    神经网络是学者通过对生物神经元的研究,提出了模拟生物神经元机制的人工神经网络的数学模型,生物神经元的模型抽象为如图所示的数学结构。 神经元输入向量𝒙 = [𝑥1,   𝑥2, 𝑥3, … , 𝑥𝑛]T,经过函数映射:𝑓: 𝒙 → 𝑦后得到输出𝑦。 考虑一种简化的情况,

    2024年02月16日
    浏览(7)
  • python与深度学习(六):CNN和手写数字识别二

    python与深度学习(六):CNN和手写数字识别二

    本篇文章是对上篇文章训练的模型进行测试。首先是将训练好的模型进行重新加载,然后采用opencv对图片进行加载,最后将加载好的图片输送给模型并且显示结果。 在这里导入需要的第三方库如cv2,如果没有,则需要自行下载。 把MNIST数据集进行加载,并且把训练好的模型也

    2024年02月15日
    浏览(11)
  • 从手写数字识别入门深度学习丨MNIST数据集详解

    从手写数字识别入门深度学习丨MNIST数据集详解

    就像无数人从敲下“Hello World”开始代码之旅一样,许多研究员从“MNIST数据集”开启了人工智能的探索之路。 MNIST数据集(Mixed National Institute of Standards and Technology database)是一个用来训练各种图像处理系统的二进制图像数据集,广泛应用于机器学习中的训练和测试。 作为一

    2024年02月03日
    浏览(7)
  • 深度学习:使用卷积神经网络CNN实现MNIST手写数字识别

    深度学习:使用卷积神经网络CNN实现MNIST手写数字识别

    本项目基于pytorch构建了一个深度学习神经网络,网络包含卷积层、池化层、全连接层,通过此网络实现对MINST数据集手写数字的识别,通过本项目代码,从原理上理解手写数字识别的全过程,包括反向传播,梯度下降等。 卷积神经网络是一种多层、前馈型神经网络。从功能上

    2024年02月13日
    浏览(8)
  • 基于python的Keras库构建的深度神经网络手写数字识别模型

    基于python的Keras库构建的深度神经网络手写数字识别模型

    目录 模型训练过程 ①导入所需的库 ②加载手写体数据集,将数据集分为训练集和测试集 ③数据预处理 ④构建模型 ⑤编译模型 ⑥训练模型 ⑦使用测试集进行验证 ⑧输出模型准确率和时间消耗 完整代码如下: 模型训练过程 使用到的数据集为IMDB电影评论情感分类数据集,该

    2024年02月09日
    浏览(12)
  • 【10个适合新手的人工智能项目 - 02】手写数字识别:使用Python和机器学习算法,编写一个手写数字识别程序,能够识别手写数字图像并将其转换为数字。

    为了编写一个手写数字识别程序,我们需要使用Python编程语言和一些机器学习算法。在这个项目中,我们将使用深度学习神经网络模型,它被广泛应用于图像识别任务。 以下是手写数字识别程序的基本步骤: 首先,我们需要一个数据集,用于训练和测试我们的模型。一个常

    2024年02月03日
    浏览(38)
  • 机器学习实战 | MNIST手写数字分类项目(深度学习初级)

    机器学习实战 | MNIST手写数字分类项目(深度学习初级)

    准备写个系列博客介绍机器学习实战中的部分公开项目。首先从初级项目开始。 本文为初级项目第二篇:利用MNIST数据集训练手写数字分类。 项目原网址为:Deep Learning Project – Handwritten Digit Recognition using Python。 第一篇为:机器学习实战 | emojify 使用Python创建自己的表情符号

    2024年02月15日
    浏览(14)
  • (九)人工智能应用--深度学习原理与实战--前馈神经网络实现MNST手写数字识别

    (九)人工智能应用--深度学习原理与实战--前馈神经网络实现MNST手写数字识别

    目标: 识别手写体的数字,如图所示: 学习内容: 1、掌握MNIST数据集的加载和查看方法 2、熟练掌握Keras建立前馈神经网络的步骤【重点】 3、掌握模型的编译及拟合方法的使用,理解参数含义【重点】 4、掌握模型的评估方法 5、掌握模型的预测方法 6、掌握自定义图片的处理与

    2024年02月13日
    浏览(14)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包