2025/12/24 21:11:16
网站建设
项目流程
农产品网站建设策划书范文,社群营销与运营,本地服务网站开发,和县网站制作博主介绍#xff1a;✌全网粉丝10W,前互联网大厂软件研发、集结硕博英豪成立工作室。专注于计算机相关专业项目实战6年之久#xff0c;选择我们就是选择放心、选择安心毕业✌ #x1f345;想要获取完整文章或者源码#xff0c;或者代做#xff0c;拉到文章底部即可与…博主介绍✌全网粉丝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图形界面KerasOpenCV手写数字识别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():modelmodels.Sequential()model.add(layers.Conv2D(32,(3,3),activationrelu,input_shape(28,28,1)))model.add(layers.MaxPooling2D((2,2)))model.add(layers.Conv2D(64,(3,3),activationrelu))model.add(layers.MaxPooling2D((2,2)))model.add(layers.Conv2D(64,(3,3),activationrelu))model.add(layers.Flatten())model.add(layers.Dense(64,activationrelu))model.add(layers.Dense(10,activationsoftmax))model.compile(optimizerrmsprop,losscategorical_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_traintrain_data.reshape((60000,28,28,1))x_trainx_train.astype(float32)/255x_testtest_data.reshape((10000,28,28,1))x_testx_test.astype(float32)/255y_trainto_categorical(train_labels)y_testto_categorical(test_labels)print(x_train.shape,y_train.shape)# 定义模型modelmodel_conv()print(model.summary())# 开始训练hismodel.fit(x_train,y_train,epochs5,batch_size64,validation_split0.1)# 计算准确度loss,accmodel.evaluate(x_test,y_test)print(loss {}, acc {}.format(loss,acc))# 保存模型model.save(my_mnist_model.h5)classSketchpad(QWidget):def__init__(self,ParentNone):super().__init__(Parent)self.__InitData()# 先初始化数据再初始化界面self.__InitView()def__InitData(self):# 私有变量size画板初始大小为480460self.__sizeQSize(611,461)# 新建QPixmap作为画板尺寸为__size# 私有变量__board就是画板实体大小就是__sizeself.__boardQPixmap(self.__size)self.__board.fill(Qt.white)# 用白色填充画板self.__IsEmptyTrue# 默认为空画板self.EraserModeFalse# 默认为禁用橡皮擦模式self.__lastPosQPoint(0,0)# 上一次鼠标位置self.__currentPosQPoint(0,0)# 当前的鼠标位置self.__painterQPainter()# 新建绘图工具:画笔self.__thickness10# 默认画笔粗细为10pxself.__penColorQColor(black)# 设置默认画笔颜色为黑色self.__colorListQColor.colorNames()# 获取颜色列表def__InitView(self):# 设置界面的尺寸为__sizeself.setFixedSize(self.__size)defClear(self):# 清空画板self.__board.fill(Qt.white)self.update()self.__IsEmptyTruedefChangePenColor(self,colorblack):# 改变画笔颜色self.__penColorQColor(color)defChangePenThickness(self,thickness10):# 改变画笔粗细self.__thicknessthicknessdefIsEmpty(self):# 返回画板是否为空returnself.__IsEmptydefGetContentAsQImage(self):# 获取画板内容返回QImageimageself.__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.__currentPosmouseEvent.pos()self.__lastPosself.__currentPosdefmouseMoveEvent(self,mouseEvent):# 鼠标移动时更新当前位置并在上一个位置和当前位置间画线self.__currentPosmouseEvent.pos()self.__painter.begin(self.__board)ifself.EraserModeFalse:# 非橡皮擦模式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.__lastPosself.__currentPos self.update()# 更新显示defmouseReleaseEvent(self,mouseEvent):self.__IsEmptyFalse# 画板不再为空5、源码获取方式由于篇幅限制获取完整文章或源码、代做项目的查看【用户名】、【专栏名称】就可以找到我啦感兴趣的可以先收藏起来点赞、关注不迷路下方查看获取联系方式