# CNN_Handwritten_Digit_Recognizer (CNN手写数字识别)
A CNN handwritten digit recognizer with graphical UI, implemented with Python (tensorflow, kivy).
一个带界面的CNN手写数字识别,使用Python(tensorflow, kivy)实现。
![UI](UI_pic.jpg)
## Introduction (简介)
This is a simple handwritten digit recognizer application, implemented with only Python language. Basically, I use Tensorflow to build the CNN classifier as the recognizer, and use Kivy to realize the UI. This program supports mouse or touch screen, and can recognize 0-9 altogether 10 numbers. The keypoint is as follows:
- Use Tensorflow (as well as its Estimator API) to build the CNN model. Use MNIST dataset to train the model.
- Use Kivy to build the UI.
- After drawing digit on the Kivy App window, the app export the digit as a image, which, after being processed with PIL, is feeded to the CNN model. The recognition result is displayed on the window later.
这是一个简单的手写数字识别小应用,全部使用Python语言实现,主要使用Tensorflow搭建CNN分类器作为后台识别器,使用Kivy框架编写前端界面,支持鼠标或触控操作,能够识别0-9这10个数字。实现的技术要点如下:
- 使用Tensorflow(和其Estimator API)构建CNN模型,使用MNIST数据集训练模型;
- 使用Kivy框架构建前端界面;
- 在Kivy界面上写字后,将界面导出成图片,使用PIL处理后喂给后端的CNN进行识别,识别结果显示在界面上。
## Dependencies (依赖环境)
- Python 3
- Tensorflow
- Kivy
- Numpy
- PIL
## Run (运行方法)
Run the main app:
```python
python main.py
```
Train the model (trained model is included, so the main app can work immediately)
```python
python trainer.py
```
You can also modify some hyperparams in ``trainer.py``.
使用以下命令启动主程序:
```python
python main.py
```
使用一下命令进行模型的训练(已有训练好的模型,可以直接使用):
```python
python trainer.py
```
可以在``trainer.py``文件中更改各种模型的超参数。
## Existing Problems (存在的问题)
Some existing problems, which I will try to find out the reasons and fix in the future when I'm free. There we have:
- When drawing digit at the first time after the app runs, the response time is quite long. I guess it's about the loading of tf, and multi-thread may help.
- The effectiveness of the recognition is not very good. The classifer is easy to mix some digits (like 2 & 7, 2 & 3, 0 & 6 etc.).
- If I modify the x in MNIST dataset, changing values not equal to 0 into 1, the training speed will be much slower. I don't know why.
**If you know how to handle these existing problem, or any other problems, feel free to let me know. Thank you!**
现在已知存在的问题,之后有时间再找原因修复。问题有:
- 启动程序后,第一次写字,响应速度慢,猜想是第一次要加载tf相关的东西,拖慢了速度,估计可以用多线程解决;
- 识别效果一般,有几个数字(如2和7,2和3,0和6)经常混淆;
- 若将MNIST数据集进行处理,将x中所有非0值改为1,训练速度会极大的下降,不知道是为什么。
**存在的这些问题或其他问题,若有大神知道原因或解决方法,求告知。**
## Finally (最后)
I wrote it just for fun, btw learn the use of Tensorflow and git. I'm new to TF and DL. Any seggestions is welcomed. Thank you!
这个小程序就是自己写着玩,顺便学学Tensorflow和git的使用。TF和深度学习新手,请多包涵,请多指导。
## Reference (参考资料)
- [使用tensorflow实现CNN](https://blog.csdn.net/skullFang/article/details/80434973)
- [Tensorflow-Example](https://github.com/aymericdamien/TensorFlow-Examples)
- [Tensorflow-Estimator-自定义估算器](https://www.jianshu.com/p/5495f87107e7)
程序员张小妍
- 粉丝: 1w+
- 资源: 3691
最新资源
- XVIDEO_6.6.6.zip
- 利用粒子群算法求解电力系统无功优化的MATLAB代码,以网损和电压偏差为目标函数,有注释和相关的参考文献
- C# opc ua da通信源代码示例,应用简单直接可使用 工业上位机必备代码
- 基于类别增量的极端随机森林(ERF)数据分类预测 matlab代码
- 堆垛机程序,硬件配置:PLC:1500SP F-1PN HMI:KTP700 Basic PN X轴:S120,Y轴:G120,Z轴:G120 程序主要以SCL语言编写,注释清晰,和上位WCS通讯是通
- Matlab代码-基于拉格朗日电力系统参数辨识 对电力系统中存在多个不良参数进行辨识,以IEEE14节点系统进行仿真验证
- 自建dq坐标系永磁同步电机pmsm模型 不是库里的模块,适用于新手入门学习 赠参考资料
- NPC整流器,三电平,中点钳位 PWM整流器三电平模型
- 料箱输送线程序,带目的地跟踪,提供设备布局图和电气图纸以及博途程序 程序语言较多使用了STL,程序仅供学习参考 硬件配置:PLC:1515-2 PN HMI:TP700 Confort 主要设备有
- 步进伺服控制程序 用三菱plc和威纶触摸屏编写 新手学习最佳选择 此程序已经实际设备上批量应用,程序成熟可靠,借鉴价值高,程序有注释
- 变频器源码、图纸、生产方案 伺服驱动器和变频器源码、图纸、生产方案 此文件包涵盖 1、迈信EP100交流伺服驱动器C源码,PCB原理图 2、英威腾GD300变频器C源码,PCB原理图、生产方案 3、
- 多约束的MPC ACC模型预测ACC设计 自适应巡航 考虑经济性,安全性,动力行等多因素的 不是单纯的速度跟踪 参考硕士biyelunwen 不是mpc工具箱 carsim与simuli
- comsol的土壤源热泵模型
- starccm+电池包热管理-新能源汽车电池包共轭传热仿真 可查學習模型如何搭建,几何清理网格划分,學習重要分析参数如何设置 内容: 0.电池包热管理基础知识讲解,电芯发热机理,电池热管理系统介绍
- Three-Phase-SPWM-THIPWM-Inverter:基于MATLAB Simulink的三相SPWM逆变器和三相THIPWM逆变器仿真模型 仿真条件:MATLAB Simulink R
- 项目:基于Python的人脸识别 算法:LBPH算法 环境:Windows或linux或mac、pycharm 技术:opencv、PyQt5 库文件:numpy、opencv-contrib-pyt
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
- 1
- 2
前往页