计算机视觉: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、源码获取方式

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

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

相关推荐
Gu Gu Study28 分钟前
ScoutLoop开放域深度研究引擎(agent的初步设计想法)
人工智能·python
卷无止境1 小时前
写代码这件事,到底该讲究点什么?
后端·python
卷无止境1 小时前
循环复杂度到底在算什么,Python 代码怎么才能写得让人一看就懂
后端·python
lpfasd1231 小时前
MediaCrawler 项目深度分析
chrome·python·chrome devtools
江畔柳前堤2 小时前
系统的本质——从LTI系统到神经网络
人工智能·深度学习·神经网络·机器学习·计算机视觉·数据挖掘·语音识别
Dxy12393102162 小时前
Python项目打包成EXE完整教程(PyInstaller实战避坑)
开发语言·python
bamb002 小时前
一个项目带你入门AI应用开发01
python
0566463 小时前
Python康复训练——常用标准库
开发语言·python·学习
昆曲之源_娄江河畔3 小时前
Python如何安装flask, pymssql
开发语言·python·flask·pymssql
0566463 小时前
Python康复训练——控制流与函数
开发语言·python·学习