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

博主介绍:✌全网粉丝50W+,前互联网大厂软件研发、集结硕博英豪成立软件开发工作室,专注于计算机相关专业项目实战6年之久,累计开发项目作品上万套。凭借丰富的经验与专业实力,已帮助成千上万的学生顺利毕业,选择我们,就是选择放心、选择安心毕业✌
> 🍅想要获取完整文章或者源码,或者代做,拉到文章底部即可与我联系了。🍅

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

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、源码获取方式

🍅**由于篇幅限制,获取完整文章或源码、代做项目的,拉到文章底部即可看到个人联系方式。**🍅

点赞、收藏、关注,不迷路,下方查看 👇🏻获取联系方式👇🏻

相关推荐
wolfseek3 小时前
opencv模版匹配
c++·人工智能·opencv·计算机视觉
TechNomad3 小时前
十六、OpenCV中的图像文件处理
opencv
B站计算机毕业设计之家3 小时前
Python手势识别检测系统 基于MediaPipe的改进SSD算法 opencv+mediapipe 深度学习 大数据 (建议收藏)✅
python·深度学习·opencv·计算机视觉·1024程序员节
犽戾武3 小时前
1. 简单回顾Numpy神经网络
人工智能·神经网络·numpy
Lab4AI大模型实验室3 小时前
【每日Arxiv热文】还在为视频编辑发愁?港科大&蚂蚁集团提出Ditto框架刷新SOTA!
人工智能·计算机视觉·视频编辑·ai agent·智能体学习
分布式存储与RustFS4 小时前
RustFS:MinIO的“平替”还是“乱杀”?
python·rust·对象存储·minio·存储·企业存储·rustfs
爱幻想-hjyp4 小时前
【Python】uv包管理器常用命令
开发语言·python·uv
用什么都重名4 小时前
UV工具安装配置使用教程
python·uv·包管理器
Python×CATIA工业智造4 小时前
Python装饰器解包装技术详解:从原理到高级应用
python·pycharm