视频剪辑软件 设计模式 jetbrains 自承式光缆 Hibernate wpf testing memory ssis pygame jackson vue版本 oracle无效的列索引 bootstrap文本框 java获取字符串 jquery validate 二分查找python python例子 python用什么数据库 java基础入门 java的继承 java中正则表达式 java对象和类 java文件读写 java中string的方法 java方法调用 java接口规范 ntscan 迷宫解锁 脚本之家 删除数组中的某个元素 隐藏虚拟键 java语言程序设计 idataparameter 模拟人生2夜生活 wow怎么赚钱 pycharm中文版 字符串分割 jsps2寸照片制作 qupzilla
当前位置: 首页 > 学习教程  > 编程语言

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

2020/11/4 14:00:44 文章标签:

__pycache__文件夹是Python自动生成的,详细了解https://blog.csdn.net/yitiaodashu/article/details/79023987 其他各个文件在之后部分会依次介绍 图片识别 版本: python3.6 tensorflow 1.13.1(一定要安装1.几版本,不要安装2.几…


__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免费学习资料以及群交流解答点击即可加入

 


本文链接: http://www.dtmao.cc/news_show_350059.shtml

附件下载

相关教程

    暂无相关的数据...

共有条评论 网友评论

验证码: 看不清楚?