__pycache__文件夹是Python自动生成的,详细了解https://blog.csdn.net/yitiaodashu/article/details/79023987
其他各个文件在之后部分会依次介绍

图片识别

版本:
python3.6
tensorflow 1.13.1(一定要安装1.几版本,不要安装2.几)
运行时可能有很多warning,不影响运行结果
此部分大多程序参考《TensorFlow实战Google深度学习框架》

这里使用的是基于全连接层网络结构的神经网络,对数字识别已经有了不错的效果,但使用卷积神经网络还可以提高正确率(大约99.2%),比如LeNet-5模型(https://blog.csdn.net/louishao/article/details/60867339)

在开始正式做之前,先看几篇博客大致了解一下MNIST数据集:
https://blog.csdn.net/qq_38269418/article/details/78991649
https://blog.csdn.net/wspba/article/details/54311566
MNIST是深度学习的经典入门demo,他是由6万张训练图片和1万张测试图片构成的,每张图片都是28*28的灰度图,像素取值为0~1。这些图片是采集的不同的人手写从0到9的数字。TensorFlow将这个数据集和相关操作封装到了库中,每一张图片是一个长度为784的一维数组。
下面展示一些 内联代码片。

from tensorflow.examples.tutorials.mnist import input_data
1

会自动下载封装好的数据集。但是我自己引入minst数据集会报各种各样的错误,印象最深刻的是

我以为是自己tensorflow和python版本的问题,因为我同学就很顺利就成功了,说真的浪费了好多时间在这个问题上,最后终于发现是数据集的原因,都快高兴哭了https://blog.csdn.net/weixin_30699955/article/details/98091451
MNIST_data就是我根据这篇博客下载的tensorflow_mnist数据集
接下来是数字图片识别相关的文件:
mnist_inference.py文件定义了前向传播过程以及神经网络的参数。三层全连接网络结构,通过加入隐藏层实现了多层网络结构。
mnist_train.py定义了神经网络的训练过程。运行mnist_train.py文件便会开始训练模型,MNIST_model文件已经有训练好的模型,你也可以删掉或修改然后重新训练。
MNIST_model文件夹保存了已经训练30000次的模型
mnist_eval.py文件定义了测试过程。运行mnist_eval.py文件就是计算在mnist数据集上测试1万张图片的正确率。比如在MNIST数据集10000张测试图片上的正确率

picture文件夹存放的是自己手写数字的图片
app.py文件实现了测试自己手写数字的图片。运行后直接识别picture文件夹里的所有图片。

遇到的困难

  • 不知道模型训练好了怎么测试自己手写的图片
    mnist_inference.py、mnist_train.py 和 mnist_eval.py这三个文件已经可以实现训练模型和测试正确率。之后怎么测试自己的图片呢?
    输入节点是长度为784的数组,所以得把自己的图片转化为长度是784的数组,才能输入到模型里,才能得到结果。
    代码在app.py里的image_prepare()函数,通过使用图像处理库PIL把图片转化为灰度图并且修改尺寸为28*28,然后转化为数组。
  • 测试自己手写图片的正确率太低
    在mnist测试数据集上的正确率有98%以上,而测试自己手写数字的正确率太低了,大部分数字都被识别成8。

    这部分我参考了https://blog.csdn.net/qq_43479622/article/details/90906094,从这里我们可以看出找到几个原因

  • mnist数据集图片是黑底白字,而我们平时都是白底黑字,所以要对测试图片灰度反转。
    修改后已经可以识别几个数字了,但还是很多被识别成了8。原因是自己拍的图片有很多噪点,直接输入给模型就因为噪点太多,被误认为是8。
  • 二值化来降噪

    使用opencv二值化图像cv2.threshold(img,127,255,cv2.THRESH_BINARY)
    虽然还有少量噪点,但已经有很好的识别效果了。(还可以再调整阈值)

  • 对自己手写图片的选取可以参考:
    https://blog.csdn.net/qq_38269418/article/details/78991649

Gui界面

run1.py是界面文件
timg是界面背景图,你也可以自己选

利用PyQt画界面按钮和文本框的介绍网上有很多。直接拿过来用就好。这部分的关键是怎么把app.py的思路搬进run1.py。如果你的app.py运行顺利的话,这部分也不会很难。
这部分我有两个错误:

  • 代码顺序引起的问题
    错误代码:
evaluate(pic)
def evaluate(pic):。。。
123

改正代码:

def evaluate(pic):。。。
evaluate(pic)
123
  • 图片名称输出错误
    pic_name是函数参数,在app.py的时候设置了,但是在run1.py里我并没有设置这个参数,即使设置也会出现别的错误。于是我先把pic_name设置成100行的“x”看输出是否有错误。最终控制面板输出是 x is 4。由此可见其他程序都没有问题
    经别人介绍用了如图第99行的函数来进行图片名称的调用。

画板数字识别

思路:在画板上画数字,之后截图输出,再通过GUI界面选择这张图片进行识别。
as.png截图画板输出的图片。
导出.png是画板左上角的图标,点击后生成as.png。
now.py运行后,出现画板界面。

画板:https://www.jb51.net/article/126189.htm
需要一个列表来保存所有移动过的点,然后把所有相邻两个点之间都画一条线,就能断断续续连成鼠标的痕迹了。当鼠标按住移动然后松开的时候,往保存所有移动过的点的列表中添加一个断点(-1, -1)。然后在每次画线的时候,都判断一下是不是断点,如果是断点的话就想办法跳过去,并且不连续的开始接着画线。

截图:https://blog.csdn.net/mxdzchallpp/article/details/79097951?utm_source=blogxgwz4&utm_medium=distribute.pc_relevant.none-task-blog-utm_term-3&spm=1001.2101.3001.4242
最终结果:

注意:
画板中使用的是drawline函数,如果画笔线条很细,识别率特别低,除非通过不断描绘,人为加粗线条,最终识别率还挺高的。但是最简单的方法还是设置画笔粗细。
https://blog.csdn.net/La_vie_est_belle/article/details/84930977?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522160429169019724822515101%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.%2522%257D&request_id=160429169019724822515101&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2allfirst_rank_v2~rank_v28-1-84930977.first_rank_ecpm_v3_pc_rank_v2&utm_term=PYQT++绘图%2B打印&spm=1018.2118.3001.4449

PS:如有需要Python学习资料的小伙伴可以加点击下方链接自行获取

python免费学习资料以及群交流解答点击即可加入

Python实现手写体数字图片识别+GUI界面+画板数字识别相关推荐

  1. Python+TensorFlow+PyQt实现手写体数字图片识别+GUI界面+画板数字识别

    __pycache__文件夹是Python自动生成的,详细了解https://blog.csdn.net/yitiaodashu/article/details/79023987 其他各个文件在之后部 ...

  2. MATLAB实现基于BP神经网络的手写数字识别+GUI界面+mnist数据集测试

    文章目录 MATLAB实现基于BP神经网络的手写数字识别+GUI界面+mnist数据集测试 一.题目要求 二.完整的目录结构说明 三.Mnist数据集及数据格式转换 四.BP神经网络相关知识 4.1 ...

  3. 【开源分享】基于Python+OpenCV+PyQt5车牌识别(GUI界面)

    亲测无错:基于Python+OpenCV+PyQt5车牌识别(GUI界面)绝对可以用的!!!!! 基于Python+OpenCV+PyQt5车牌识别(GUI界面) 参考文档

  4. 图片处理GUI界面(手把手带你创建)

    图片处理GUI界面 在写过五子棋和围棋这两个小项目之后,我写了图片处理这一GUI界面,并现在把教程分享出来 先上几张成品效果图: 写在前面的: 这个项目我十分重视代码的结构和规范性,全程不用静态方法, ...

  5. 【新手向】Python做一个简易登录注册GUI界面(无事件绑定)

    Python做一个简易登录注册GUI界面 一,效果展示 (1)运行结果: (2)点击登录: 注:只有用户名:123 密码123456 会提示登录成功. 登录成功示范: 登录失败示范: (3)点击注册 ...

  6. 基于MATLAB的数字图像处理系统GUI界面设计

    基于MATLAB的数字图像处理系统GUI界面设计 图像读入 从图形文件中读入图像 imread Syntax: A = imread(filename, fmt) filename:指定的灰度或彩色图 ...

  7. Python手写数字识别+GUI界面+手写板设计

    摘要 手写数字识别是模式识别中一个非常重要和活跃的研究领域,数字识别也不是一项孤立的技术,他涉及的问题是模式识别的其他领域都无法回避的:应用上,作为一种信息处理手段,字符识别有广阔的应用背景和巨大的市 ...

  8. 如何用python在excel中画画(含GUI界面)

    一.引言 最近看B站视频,有大佬徒手用excel一个格子一个格子填充,撸出了钢铁侠的图片,惊奇的同时,我思考,用python是否可以更快速的完成呢? ps:由于最近重构了下代码,因此想看最新效果图以及 ...

  9. 一文带你读懂PyQt:用Python做出与C++一样的GUI界面应用程序

    一.简介 Python标准库更多的适合处理后台任务,唯一的图形库tkinter使用起来很不方便,所以后来出现了针对Python图形界面开发的扩展库,今天老猿要介绍的是主流Python图形界面扩展库之一 ...

最新文章

  1. 【整理】SAP货币汇率转换
  2. python常见错误及基本技巧
  3. Unity3D调用摄像头显示当前拍摄画面
  4. dubbo实现原理之SPI简介
  5. 前端入门 前端实战项目 JS
  6. 基于单片机的电子密码锁设计
  7. 为酒店设计一套计算机网络管理系统,酒店管理系统方案设计和对策.doc
  8. 阿里内部信公开,月饼事件“神秘第五人”被开除,他是谁?
  9. 中国目前拥有的物种和人造卫星的作用
  10. 第29课:来自未来的简历
  11. BeyondCompare密钥过期怎么办?不用再找新的密钥,一招帮你搞定!
  12. MT1308芯片原厂
  13. 几十个恶毒网站,不怕死的朋友请进
  14. 浅谈umi router
  15. MySQL高级2-优化分析
  16. 塔木德分财产,有图,快速过关
  17. 数模每日小练习——数据处理——插值
  18. [微信] 微信网页版扫码登录的实现
  19. TiDB 高并发写入常见热点问题及规避方法
  20. 都有哪些应用程序可以在M1 Mac上运行?

热门文章

  1. python snownlp情感分析_SnowNLP情感分析+生成词云
  2. Vertica 常用语法
  3. 人工智能英文缩写怎么读,人工智能英文缩写大全
  4. golang学习之negroni对于第三方中间件的使用分析
  5. 【JAVA_POI】解析PPT文档(ppt和pptx)4.1.2版本
  6. 关于微信引流的几种方法
  7. SM敏捷实践经验总结
  8. 变分不等式matlab,变分不等式
  9. 15 个 Python 开源项目,使用 PyQt 做小型桌面应用!
  10. android2.3 微信,Android新版微信2.3支持周边朋友查找