Skip to content

手写数字识别器/recognizer for handwritten number.

FranklinDX3906/HandwrittenNumberRecognizer

Repository files navigation

手写数字识别器/recognizer for handwritten numbers

功能

  • 自动识别拍照上传的手写数字图片

环境要求

  • python3.7
  • opencv-python
  • numpy
  • torch_cuda
  • pyqt5

使用方法

  1. 运行mainwindow.py
  2. 点击“打开文件“按钮,选择要处理的图片,此时会显示待处理的图片
  3. 点击”二值化“按钮,生成二值化后的图片
  4. 二值化图片不完美,拖动最左边的”黑白“滚动条,再次点击“二值化”按钮,直到二值化图片尽可能完美
  5. 点击”显示结果“按钮,生成带标签的结果图片
  6. 结果图片可能会将非数字标记,拖动中间的”最小框“滚动条和最右边的”最大框“滚动条,调节标记框的大小,再次点击”显示结果“按钮,知道结果尽可能完美

文件说明

  • mycnn_minist.pth: 存放模型的文件
  • images: 用于测试的图片文件夹
  • make_model: 用于生成模型
  • image_prediction.py: 处理程序
  • mainwindow.py: 主窗口程序

需求

手写数字的识别器

  • 功能要求:
    1. 手写数字之后,拍照上传到电脑
    2. 读入照片,能够进行数字分割并显示
    3. 按照顺序读取每一个数字并识别
    4. 打印数字到固定框内
  • 其他要求
    • 在Windows上运行
    • 可执行文件双击运行
  • 环境
    • python 3.7
    • pytorch_cuda
    • opencv-python

开发思路

总体思路

  1. python实现手写字的图片分割、处理、预测,返回
  2. 训练模型
  3. python实现GUI框架
  4. 打包为exe

实现手写数字的图片分割等

  • 输入:图片路径

  • 过程:

    1. 读取文件
    2. 灰度化
    3. 反转、二值化
    4. 使用opencv框出图片
    5. 处理为28*28手写字图片
    6. 以此使用模型预测数次
  • 输出

    • 二值化之后的图片
    • 框出值之后的图片
    • 预测后框出的图片
    • 数字序列
  • 思路

  • 问题

    • 由于输入的初始图象存在阴影、杂质等各种现象,所以根据不同的初始图片,识别框还有二值化阈值可能需要调整
      • 解决方法:GUI上增加三项调节条,且显示二值化结果,方便随时调整
    • 实际识别率还有一些问题
      • 影响不大,不管了
    • 手写字体非常难以在纸面上进行排序
      • 放弃输出数字序列

训练模型

  • CNN训练即可,保存

GUI框架

  • 简易界面

打包exe

  • 失败,而且就算成功,由于依赖较多,将会有3G文件,不实用,遂放弃

About

手写数字识别器/recognizer for handwritten number.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages