博主介绍:✌全网粉丝50W+,前互联网大厂软件研发、集结硕博英豪成立软件开发工作室,专注于计算机相关专业项目实战6年之久,累计开发项目作品上万套。凭借丰富的经验与专业实力,已帮助成千上万的学生顺利毕业,选择我们,就是选择放心、选择安心毕业✌
> 🍅想要获取完整文章或者源码,或者代做,拉到文章底部即可与我联系了。🍅
2、大数据、计算机专业选题(Python/Java/大数据/深度学习/机器学习)(建议收藏)✅
1、项目介绍
这是一个使用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,以便在后续使用时直接调用。
技术栈:
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、核心代码
python
from PyQt5.QtWidgets import QWidget
from PyQt5.Qt import QPixmap, QPainter, QPoint, QPaintEvent, QMouseEvent, QPen, \
QColor, QSize
from PyQt5.QtCore import Qt
import os
os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2'
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
from keras.datasets import mnist
import matplotlib.pyplot as plt
from keras import models
from keras import layers
from keras.utils.np_utils import to_categorical
import os
os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2'
# 定义模型
def model_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'])
return model
# 导入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') / 255
x_test = test_data.reshape((10000, 28, 28, 1))
x_test = x_test.astype('float32') / 255
y_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")
class Sketchpad(QWidget):
def __init__(self, Parent=None):
super().__init__(Parent)
self.__InitData() # 先初始化数据,再初始化界面
self.__InitView()
def __InitData(self):
# 私有变量size,画板初始大小为480,460
self.__size = QSize(611, 461)
# 新建QPixmap作为画板,尺寸为__size
# 私有变量__board就是画板实体,大小就是__size
self.__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 # 默认画笔粗细为10px
self.__penColor = QColor("black") # 设置默认画笔颜色为黑色
self.__colorList = QColor.colorNames() # 获取颜色列表
def __InitView(self):
# 设置界面的尺寸为__size
self.setFixedSize(self.__size)
def Clear(self):
# 清空画板
self.__board.fill(Qt.white)
self.update()
self.__IsEmpty = True
def ChangePenColor(self, color="black"):
# 改变画笔颜色
self.__penColor = QColor(color)
def ChangePenThickness(self, thickness=10):
# 改变画笔粗细
self.__thickness = thickness
def IsEmpty(self):
# 返回画板是否为空
return self.__IsEmpty
def GetContentAsQImage(self):
# 获取画板内容(返回QImage)
image = self.__board.toImage()
return image
def paintEvent(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()
def mousePressEvent(self, mouseEvent):
# 鼠标按下时,获取鼠标的当前位置保存为上一次位置
self.__currentPos = mouseEvent.pos()
self.__lastPos = self.__currentPos
def mouseMoveEvent(self, mouseEvent):
# 鼠标移动时,更新当前位置,并在上一个位置和当前位置间画线
self.__currentPos = mouseEvent.pos()
self.__painter.begin(self.__board)
if self.EraserMode == False:
# 非橡皮擦模式
self.__painter.setPen(QPen(self.__penColor, self.__thickness)) # 设置画笔颜色,粗细
else:
# 橡皮擦模式下画笔为纯白色,粗细为10
self.__painter.setPen(QPen(Qt.white, 20))
# 画线
self.__painter.drawLine(self.__lastPos, self.__currentPos)
self.__painter.end()
self.__lastPos = self.__currentPos
self.update() # 更新显示
def mouseReleaseEvent(self, mouseEvent):
self.__IsEmpty = False # 画板不再为空
🍅✌**感兴趣的可以先收藏起来,点赞关注不迷路,想学习更多项目可以查看主页,大家在毕设选题,项目编程以及论文编写等相关问题都可以给我留言咨询,希望可以帮助同学们顺利毕业!**🍅✌
5、源码获取方式
🍅**由于篇幅限制,获取完整文章或源码、代做项目的,拉到文章底部即可看到个人联系方式。**🍅
点赞、收藏、关注,不迷路,下方查看 👇🏻获取联系方式👇🏻