当前位置: 首页 > news >正文

深度学习:python手写数字识别系统 CNN算法 卷积神经网络 OpenCV和Keras模型 计算机视觉 毕业设计(建议收藏)

博主介绍:✌全网粉丝10W+,前互联网大厂软件研发、集结硕博英豪成立工作室。专注于计算机相关专业项目实战6年之久,选择我们就是选择放心、选择安心毕业✌
> 🍅想要获取完整文章或者源码,或者代做,拉到文章底部即可与我联系了。🍅

点击查看作者主页,了解更多项目!

🍅感兴趣的可以先收藏起来,点赞、关注不迷路,大家在毕设选题,项目以及论文编写等相关问题都可以给我留言咨询,希望帮助同学们顺利毕业 。🍅

1、毕业设计:2026年计算机专业毕业设计选题汇总(建议收藏)✅

2、大数据毕业设计:2026年选题大全 深度学习 python语言 JAVA语言 hadoop和spark(建议收藏)✅

🍅感兴趣的可以先收藏起来,点赞、关注不迷路,大家在毕设选题,项目以及论文编写等相关问题都可以给我留言咨询,希望帮助同学们顺利毕业 。🍅

1、项目介绍

技术栈:
python语言、Keras模型、CNN算法 、PyQt5图形界面、OpenCV

手写数字识别系统
创建启动程序CallWindows.py ,用于启动图形界面程序PaintBoard.py

用PyQt5制作的数字识别桌面软件,可实现:
(1)能够读取和存储图像,对图像进行去噪和对比度增强;
(2)对图像中的不同数字进行分割;
(3)识别出图像中数字的真实值;
(4)设计软件界面。

python手写数字识别系统 深度学习 PyQt5图形界面+Keras+OpenCV手写数字识别

2、项目界面

(1)手写数字识别检测

(2)橡皮擦功能

(3)上传图片检测识别

(4)手写数字识别检测

(5)界面效果

3、项目说明

这是一个使用Keras框架训练模型的代码,用于识别MNIST手写数字数据集中的数字图像。

首先,通过导入MNIST数据集并使用matplotlib库显示其中一个图像来加载数据。
MNIST 数据集是一个常用的手写数字识别数据集,包含了 60,000 张训练图像和 10,000 张测试图像。
程序首先使用 keras.datasets 中的 mnist.load_data 函数导入 MNIST 数据集。
然后使用 matplotlib.pyplot 库中的 imshow 函数将一张训练图像和对应的标签显示出来。

接着,程序对训练和测试数据进行预处理。首先使用 numpy.reshape 函数将图像数据转换为 (28, 28, 1) 的形状,然后使用 numpy.astype 函数将图像数据转换为浮点类型,并将图像像素值除以 255 归一化。最后,使用 keras.utils.np_utils 中的 to_categorical 函数将标签转换为 one-hot 编码。

程序中的 model_conv 函数定义了一个卷积神经网络模型。该模型包含三个卷积层和两个全连接层,使用 ReLU 激活函数。最后,使用交叉熵损失函数和 RMSProp 优化器编译模型。

接下来,程序使用训练数据训练模型,并使用测试数据评估模型的性能。
最后,使用 model.save 函数将模型保存为文件 my_mnist_model.h5。
这个程序的目的是构建一个可以在 MNIST 数据集上进行手写数字识别的模型。
程序使用卷积神经网络构建模型,并在训练过程中,使用 model.fit 函数对模型进行训练。
该函数接收训练数据和标签以及训练的轮数(这里为 5 轮)、批量大小(这里为 64)和验证数据的比例(这里为 10%)作为参数。

训练过程中,模型会在训练数据上进行训练,并在验证数据上进行评估,以验证模型的性能是否有所提高。

在训练结束后,使用 model.evaluate 函数对模型在测试数据上的性能进行评估。该函数返回损失值和准确率,并打印。

最后,使用 model.save 函数将训练好的模型保存为文件 my_mnist_model.h5,以便在后续使用时直接调用。

4、核心代码

fromPyQt5.QtWidgetsimportQWidgetfromPyQt5.QtimportQPixmap,QPainter,QPoint,QPaintEvent,QMouseEvent,QPen,\ QColor,QSizefromPyQt5.QtCoreimportQtimportos os.environ['TF_CPP_MIN_LOG_LEVEL']='2'#!/usr/bin/env python3# -*- coding: utf-8 -*-fromkeras.datasetsimportmnistimportmatplotlib.pyplotaspltfromkerasimportmodelsfromkerasimportlayersfromkeras.utils.np_utilsimportto_categoricalimportos os.environ['TF_CPP_MIN_LOG_LEVEL']='2'# 定义模型defmodel_conv():model=models.Sequential()model.add(layers.Conv2D(32,(3,3),activation='relu',input_shape=(28,28,1)))model.add(layers.MaxPooling2D((2,2)))model.add(layers.Conv2D(64,(3,3),activation='relu'))model.add(layers.MaxPooling2D((2,2)))model.add(layers.Conv2D(64,(3,3),activation='relu'))model.add(layers.Flatten())model.add(layers.Dense(64,activation='relu'))model.add(layers.Dense(10,activation='softmax'))model.compile(optimizer='rmsprop',loss='categorical_crossentropy',metrics=['acc'])returnmodel# 导入MNIST数据集(train_data,train_labels),(test_data,test_labels)=mnist.load_data()print('train_shape {} {}'.format(train_data.shape,train_labels.shape))print('test_shape {} {}'.format(test_data.shape,test_labels.shape))plt.imshow(train_data[0])plt.title('number {}'.format(train_labels[0]))plt.show()# 数据预处理x_train=train_data.reshape((60000,28,28,1))x_train=x_train.astype('float32')/255x_test=test_data.reshape((10000,28,28,1))x_test=x_test.astype('float32')/255y_train=to_categorical(train_labels)y_test=to_categorical(test_labels)print(x_train.shape,y_train.shape)# 定义模型model=model_conv()print(model.summary())# 开始训练his=model.fit(x_train,y_train,epochs=5,batch_size=64,validation_split=0.1)# 计算准确度loss,acc=model.evaluate(x_test,y_test)print('loss {}, acc {}'.format(loss,acc))# 保存模型model.save("my_mnist_model.h5")classSketchpad(QWidget):def__init__(self,Parent=None):super().__init__(Parent)self.__InitData()# 先初始化数据,再初始化界面self.__InitView()def__InitData(self):# 私有变量size,画板初始大小为480,460self.__size=QSize(611,461)# 新建QPixmap作为画板,尺寸为__size# 私有变量__board就是画板实体,大小就是__sizeself.__board=QPixmap(self.__size)self.__board.fill(Qt.white)# 用白色填充画板self.__IsEmpty=True# 默认为空画板self.EraserMode=False# 默认为禁用橡皮擦模式self.__lastPos=QPoint(0,0)# 上一次鼠标位置self.__currentPos=QPoint(0,0)# 当前的鼠标位置self.__painter=QPainter()# 新建绘图工具:画笔self.__thickness=10# 默认画笔粗细为10pxself.__penColor=QColor("black")# 设置默认画笔颜色为黑色self.__colorList=QColor.colorNames()# 获取颜色列表def__InitView(self):# 设置界面的尺寸为__sizeself.setFixedSize(self.__size)defClear(self):# 清空画板self.__board.fill(Qt.white)self.update()self.__IsEmpty=TruedefChangePenColor(self,color="black"):# 改变画笔颜色self.__penColor=QColor(color)defChangePenThickness(self,thickness=10):# 改变画笔粗细self.__thickness=thicknessdefIsEmpty(self):# 返回画板是否为空returnself.__IsEmptydefGetContentAsQImage(self):# 获取画板内容(返回QImage)image=self.__board.toImage()returnimagedefpaintEvent(self,paintEvent):# 绘图事件# 绘图时必须使用QPainter的实例,此处为__painter# 绘图在begin()函数与end()函数间进行# begin(param)的参数要指定绘图设备,即把图画在哪里# drawPixmap用于绘制QPixmap类型的对象self.__painter.begin(self)# 0,0为绘图的左上角起点的坐标,__board即要绘制的图self.__painter.drawPixmap(0,0,self.__board)self.__painter.end()defmousePressEvent(self,mouseEvent):# 鼠标按下时,获取鼠标的当前位置保存为上一次位置self.__currentPos=mouseEvent.pos()self.__lastPos=self.__currentPosdefmouseMoveEvent(self,mouseEvent):# 鼠标移动时,更新当前位置,并在上一个位置和当前位置间画线self.__currentPos=mouseEvent.pos()self.__painter.begin(self.__board)ifself.EraserMode==False:# 非橡皮擦模式self.__painter.setPen(QPen(self.__penColor,self.__thickness))# 设置画笔颜色,粗细else:# 橡皮擦模式下画笔为纯白色,粗细为10self.__painter.setPen(QPen(Qt.white,20))# 画线self.__painter.drawLine(self.__lastPos,self.__currentPos)self.__painter.end()self.__lastPos=self.__currentPos self.update()# 更新显示defmouseReleaseEvent(self,mouseEvent):self.__IsEmpty=False# 画板不再为空

5、源码获取方式

🍅由于篇幅限制,获取完整文章或源码、代做项目的,查看【用户名】、【专栏名称】就可以找到我啦🍅

感兴趣的可以先收藏起来,点赞、关注不迷路,下方查看👇🏻获取联系方式👇🏻

http://www.cnnetsun.cn/news/189311.html

相关文章:

  • 9 个降AI率工具推荐,专科生高效避坑指南
  • 如何快速掌握波特律动串口助手:新手完整教程
  • 终极指南:如何在ComfyUI中部署BiRefNet实现专业级背景移除
  • 5个让你爱上TTS-Vue的真实使用场景:告别机器音的时代来了!
  • openpilot车道检测终极指南:从暴雨到逆光的全天候解决方案
  • GetBox-PyMOL-Plugin:分子对接盒子计算神器
  • 如何快速掌握图表数据提取:WebPlotDigitizer完全指南
  • 从零配置:VS Code 开发环境中 NumPy 的安装与代码提示
  • 基于python岗位招聘推荐系统 基于用户协同过滤算法 Django框架 数据分析 可视化 大数据
  • 微博图片溯源终极教程:三步快速定位图片原始发布者
  • 5分钟搞定Steam创意工坊跨平台下载:模组玩家的终极解决方案
  • Thorium浏览器完整指南:快速上手的Chromium高性能替代品
  • WorkshopDL:轻松获取Steam创意工坊模组的终极解决方案
  • CTF-NetA流量分析工具:从零开始掌握网络安全取证
  • WorkshopDL终极指南:跨平台模组下载完整教程
  • Python通达信数据获取终极指南:三步搞定金融数据分析难题
  • 苦熬三个月没能秋招上岸!只怪我技术太菜!春招必靠它成功上岸!阿里Java面试题真的太牛了!
  • Thorium浏览器:如何让网页加载速度提升50%的终极指南
  • 如何快速掌握pysnowball:雪球股票数据获取的终极指南
  • Steam工坊下载终极指南:跨平台模组完全攻略
  • 3天快速上手:openpilot自动驾驶系统完整搭建指南
  • Windows 11终极绕过指南:5步完成旧设备完美升级方案
  • MooTDX实战宝典:5大高效技巧解锁通达信数据全能力
  • Windows 11硬件限制完全绕过终极方案
  • DigitalOcean推出AI智能体开发套件(ADK),让你的 AI Agent 从原型走向可用
  • 高效直播弹幕抓取实战:3步搭建智能数据监控系统
  • OpenCore Legacy Patcher终极指南:轻松让老旧Mac运行最新系统
  • Windows AirPods电量管理终极方案:告别盲猜,精准掌控每一格电
  • DeTikZify:3分钟让手绘草图变身高品质LaTeX图表
  • WorkshopDL终极指南:3步轻松获取1000+款游戏模组