返回顶部
首页 > 资讯 > 后端开发 > Python >Python如何实现带GUI界面的手写数字识别
  • 203
分享到

Python如何实现带GUI界面的手写数字识别

2023-06-22 08:06:11 203人浏览 泡泡鱼

Python 官方文档:入门教程 => 点击学习

摘要

这篇文章给大家分享的是有关python如何实现带GUI界面的手写数字识别的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。1.效果图有点low,轻喷点击选择图片会优先从当前目录查找2.数据集这部分我是对MNIST数据

这篇文章给大家分享的是有关python如何实现带GUI界面的手写数字识别的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。

1.效果图

有点low,轻喷

Python如何实现带GUI界面的手写数字识别

Python如何实现带GUI界面的手写数字识别

点击选择图片会优先从当前目录查找

Python如何实现带GUI界面的手写数字识别

2.数据集

这部分我是对MNIST数据集进行处理保存

对应代码:

import Tensorflow as tfimport matplotlib.pyplot as pltimport cv2from PIL import Imageimport numpy as npfrom scipy import misc(x_train_all,y_train_all),(x_test,y_test) = tf.keras.datasets.mnist.load_data()x_valid,x_train = x_train_all[:5000],x_train_all[5000:]y_valid,y_train = y_train_all[:5000],y_train_all[5000:]print(x_valid.shape,y_valid.shape)print(x_train.shape,y_train.shape)print(x_test.shape,y_test.shape)#读取单张图片def show_single_img(img_arr,len=100,path='/Users/zhanGCaihui/Desktop/case/jpg/'):    for i in range(len):#我这种写法会进行覆盖,只能保存10张照片,想保存更多的数据自己看着改        new_im = Image.fromarray(img_arr[i])  # 调用Image库,数组归一化        #new_im.show()        #plt.imshow(img_arr)  # 显示新图片        label=y_train[i]        new_im.save(path+str(label)+'.jpg')  # 保存图片到本地#显示多张图片def show_imgs(n_rows,n_cols,x_data,y_data):    assert len(x_data) == len(y_data)    assert n_rows * n_cols < len(x_data)    plt.figure(figsize=(n_cols*1.4,n_rows*1.6))    for row in range(n_rows):        for col in range(n_cols):            index = n_cols * row + col            plt.subplot(n_rows,n_cols,index+1)            plt.imshow(x_data[index],cmap="binary",interpolation="nearest")            plt.axis("off")    plt.show()#show_imgs(2,2,x_train,y_train)show_single_img(x_train)

3.关于模型

我保存了了之前训练好的模型,用来加载预测

关于tensorflow下训练神经网络模型:手把手教你,MNIST手写数字识别

训练好的模型model.save(path)即可

4.关于GUI设计

1)排版

#ui_openimage.py# -*- coding: utf-8 -*-# from PyQt5 import QtCore, QtGui, QtWidgets# from PyQt5.QtCore import Qtimport sys,timefrom PyQt5 import QtGui, QtCore, QtWidgetsfrom PyQt5.QtWidgets import *from PyQt5.QtCore import *from PyQt5.QtGui import *class Ui_FORM(object):    def setupUi(self, Form):        Form.setObjectName("Form")        Form.resize(1144, 750)        self.label_1 = QtWidgets.QLabel(Form)        self.label_1.setGeometry(QtCore.QRect(170, 130, 351, 251))        self.label_1.setObjectName("label_1")        self.label_2 = QtWidgets.QLabel(Form)        self.label_2.setGeometry(QtCore.QRect(680, 140, 351, 251))        self.label_2.setObjectName("label_2")        self.btn_image = QtWidgets.QPushButton(Form)        self.btn_image.setGeometry(QtCore.QRect(270, 560, 93, 28))        self.btn_image.setObjectName("btn_image")        self.btn_recognition = QtWidgets.QPushButton(Form)        self.btn_recognition.setGeometry(QtCore.QRect(680,560,93,28))        self.btn_recognition.setObjectName("bnt_recognition")        #显示时间按钮        self.bnt_timeshow = QtWidgets.QPushButton(Form)        self.bnt_timeshow.setGeometry(QtCore.QRect(900,0,200,50))        self.bnt_timeshow.setObjectName("bnt_timeshow")        self.retranslateUi(Form)        self.btn_image.clicked.connect(self.slot_open_image)        self.btn_recognition.clicked.connect(self.slot_output_digital)        self.bnt_timeshow.clicked.connect(self.buttonClicked)        self.center()        QtCore.QMetaObject.connectSlotsByName(Form)    def retranslateUi(self, Form): #设置文本填充label、button        _translate = QtCore.QCoreApplication.translate        Form.setWindowTitle(_translate("Form", "数字识别系统"))        self.label_1.setText(_translate("Form", "点击下方按钮"))        self.label_1.setStyleSheet('font:50px;')        self.label_2.setText(_translate("Form", "0~9"))        self.label_2.setStyleSheet('font:50px;')        self.btn_image.setText(_translate("Form", "选择图片"))        self.btn_recognition.setText(_translate("From","识别结果"))        self.bnt_timeshow.setText(_translate("Form","当前时间"))    # 状态条显示时间模块    def buttonClicked(self):  # 动态显示时间        timer = QTimer(self)        timer.timeout.connect(self.showtime)        timer.start()    def showtime(self):        datetime = QDateTime.currentDateTime()        time_now = time.strftime('%Y-%m-%d %H:%M:%S', time.localtime())        #self.statusBar().showMessage(time_now)        #self.bnt_timeshow.setFont(QtGui.QFont().setPointSize(100))        self.bnt_timeshow.setText(time_now)    def center(self):#窗口放置中央        screen = QDesktopWidget().screenGeometry()        size = self.geometry()        self.move((screen.width() - size.width()) / 2,                    (screen.height() - size.height()) / 2)    def keyPressEvent(self, e):        if e.key() == Qt.Key_Escape:            self.close()

2)直接运行这个文件(调用1)

#ui_main.pyimport randomfrom PyQt5.QtWidgets import QFileDialogfrom PyQt5.QtGui import QPixmapfrom ui_openimage import Ui_Formimport sysfrom PyQt5 import QtWidgets, QtGuifrom PyQt5.QtWidgets import QMainWindow, QTextEdit, QAction, QApplicationimport os,sysfrom PyQt5.QtCore import Qtimport tensorflowfrom tensorflow.keras.models import load_modelfrom tensorflow.keras.datasets import mnistfrom tensorflow.keras import modelsfrom tensorflow.keras import layersfrom tensorflow.keras.utils import to_cateGoricalimport tensorflow.keras.preprocessing.image as imageimport matplotlib.pyplot as pltimport numpy as npimport cv2import warningswarnings.filterwarnings("ignore")class window(QtWidgets.QMainWindow,Ui_Form):    def __init__(self):        super(window, self).__init__()        self.cwd = os.getcwd()        self.setupUi(self)        self.labels = self.label_1        self.img=None    def slot_open_image(self):        file, filetype = QFileDialog.getOpenFileName(self, '打开多个图片', self.cwd, "*.jpg, *.png, *.JPG, *.JPEG, All Files(*)")        jpg = QtGui.QPixmap(file).scaled(self.labels.width(), self.labels.height())        self.labels.setPixmap(jpg)        self.img=file    def slot_output_digital(self):    '''path为之前保存的模型路径'''        path='/Users/zhangcaihui/PyCharmProjects/py38_tf/DL_book_keras/save_the_model.h6'        model= load_model(path)        #防止不上传数字照片而直接点击识别        if self.img==None:            self.label_2.setText('请上传照片!')            return        img = image.load_img(self.img, target_size=(28, 28))        img = img.convert('L')#转灰度图像        x = image.img_to_array(img)        #x = abs(255 - x)        x = np.expand_dims(x, axis=0)        print(x.shape)        x = x / 255.0        prediction = model.predict(x)        print(prediction)        output = np.argmax(prediction, axis=1)        print("手写数字识别为:" + str(output[0]))        self.label_2.setText(str(output[0]))if __name__ == "__main__":  app = QtWidgets.QApplication(sys.argv)  my = window()  my.show()  sys.exit(app.exec_())

5.缺点

界面low

只能识别单个数字

其实可以将多数字图片进行裁剪分割,这就涉及到制作数据集了

6.遗留问题

我自己手写的数据照片处理成28281送入网络预测,识别结果紊乱。

反思:自己写的数据是RGB,且一张几KB,图片预处理后,按28*28读入失真太严重了,谁有好的方法可以联系我!!!

其他的水果识别系统,手势识别系统啊,改改直接套!

感谢各位的阅读!关于“Python如何实现带GUI界面的手写数字识别”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!

--结束END--

本文标题: Python如何实现带GUI界面的手写数字识别

本文链接: https://lsjlt.com/news/303564.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Python如何实现带GUI界面的手写数字识别
    这篇文章给大家分享的是有关Python如何实现带GUI界面的手写数字识别的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。1.效果图有点low,轻喷点击选择图片会优先从当前目录查找2.数据集这部分我是对MNIST数据...
    99+
    2023-06-22
  • Python实现带GUI界面的手写数字识别
    目录1.效果图2.数据集3.关于模型4.关于GUI设计5.缺点6.遗留问题1.效果图 有点low,轻喷 点击选择图片会优先从当前目录查找 2.数据集 这部分我是对MNIST数据...
    99+
    2024-04-02
  • Python中如何实现MNIST手写数字识别功能
    这篇文章主要为大家展示了“Python中如何实现MNIST手写数字识别功能”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Python中如何实现MNIST手写数字识别功能”这篇文章吧。数据集介绍M...
    99+
    2023-06-22
  • pytorch如何实现手写数字图片识别
    这篇文章给大家分享的是有关pytorch如何实现手写数字图片识别的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。具体内容如下数据集:MNIST数据集,代码中会自动下载,不用自己手动下载。数据集很小,不需要GPU设备...
    99+
    2023-06-15
  • pytorch实现手写数字图片识别
    本文实例为大家分享了pytorch实现手写数字图片识别的具体代码,供大家参考,具体内容如下 数据集:MNIST数据集,代码中会自动下载,不用自己手动下载。数据集很小,不需要GPU设备...
    99+
    2024-04-02
  • Python利用SVM算法实现识别手写数字
    目录前言使用 SVM 进行手写数字识别参数 C 和 γ 对识别手写数字精确度的影响完整代码前言 支持向量机 (Support Vector Machine, SVM) 是一种监督学习...
    99+
    2024-04-02
  • Python中如何实现MNIST手写体识别
    这篇文章主要介绍Python中如何实现MNIST手写体识别,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!1.实验内容简述1.1 实验环境本实验采用的软硬件实验环境如表所示:在Windows操作系统下,采用基于Tens...
    99+
    2023-06-25
  • 基于tensorflow实现Android手写数字识别
    前段时间训练了mnist手写数字识别的模型,学习后将其移植到Android端 我是参考的大佬https://puke3615.github.io...
    99+
    2022-06-06
    tensorflow Android
  • pytorch实现mnist手写彩色数字识别
    目录前言一 前期工作1.设置GPU或者cpu2.导入数据二 数据预处理1.加载数据2.可视化数据3.再次检查数据三 搭建网络四 训练模型1.设置学习率2.模型训练五 模型评估1.Lo...
    99+
    2024-04-02
  • Python实战之MNIST手写数字识别详解
    目录数据集介绍1.数据预处理2.网络搭建3.网络配置关于优化器关于损失函数关于指标4.网络训练与测试5.绘制loss和accuracy随着epochs的变化图6.完整代码数据集介绍 ...
    99+
    2024-04-02
  • 使用python svm实现直接可用的手写数字识别
    目录python svm实现手写数字识别——直接可用1、训练1.1、训练数据集下载——已转化成csv文件1.2 、训练源码2、预测单张图片2.1、待预测图像2.2、预测源码2.3、预测结果python svm实现手写...
    99+
    2022-06-02
    python svm手写数字识别 python svm数字识别 python svm
  • PyTorch实现手写数字识别的示例代码
    目录加载手写数字的数据数据加载器(分批加载)建立模型模型训练测试集抽取数据,查看预测结果计算模型精度自己手写数字进行预测加载手写数字的数据 组成训练集和测试集,这里已经下载好了,所以...
    99+
    2024-04-02
  • PyTorch简单手写数字识别的实现过程
    目录一、包导入及所需数据的下载关于数据集引入的改动二、进行数据处理变换操作三、数据预览测试和数据装载四、模型搭建和参数优化关于模型搭建的改动总代码:测试总结具体流程: ① 导入相应...
    99+
    2024-04-02
  • caffe的python接口之手写数字识别mnist实例
    目录引言一、数据准备二、导入caffe库,并设定文件路径二、生成配置文件三、生成参数文件solver四、开始训练模型五、完成的python文件引言 深度学习的第一个实例一般都是mni...
    99+
    2024-04-02
  • 机器学习python实战之手写数字识别
    看了上一篇内容之后,相信对K近邻算法有了一个清晰的认识,今天的内容——手写数字识别是对上一篇内容的延续,这里也是为了自己能更熟练的掌握k-NN算法。 我们有大约2000个训练样本和1000个左右测试样本,训...
    99+
    2022-06-04
    实战 机器 数字
  • Python实战小项目之Mnist手写数字识别
    目录程序流程分析图:传播过程:代码展示:创建环境准备数据集下载数据集下载测试集绘制图像搭建神经网络训练模型测试模型保存训练模型运行结果展示:程序流程分析图: 传播过程: 代码展...
    99+
    2024-04-02
  • 纯numpy数值微分法实现手写数字识别
    手写数字识别作为深度学习入门经典的识别案例,各种深度学习框架都有这个例子的实现方法。我这里将不用任何深度学习现有框架,例如TensorFlow、Keras、pytorch,直接使用P...
    99+
    2024-04-02
  • PyTorch实现MNIST数据集手写数字识别详情
    目录一、PyTorch是什么?二、程序示例1.引入必要库2.下载数据集3.加载数据集4.搭建CNN模型并实例化5.交叉熵损失函数损失函数及SGD算法优化器6.训练函数7.测试函数8....
    99+
    2024-04-02
  • Python-OpenCV中如何利用 KNN 算法识别手写数字
    手写数字数据集 MNIST 介绍为了保证完整性,从算法所用的训练数据讲起,训练数据是由 MNIST 手写数字组成的,MNIST 数据集来自美国国家标准与技术研究所,由来自 250 个不同人手写的数字构成,其中训练集包含 60000 张图片,...
    99+
    2023-06-22
  • 如何使用Python识别手势数字
    这篇文章主要介绍如何使用Python识别手势数字,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!前言谷歌出了一个开源的、跨平台的、可定制化的机器学习解决方案工具包,给在线流媒体(当然也可以用于普通的视频、图像等)提供了...
    99+
    2023-06-15
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作