Git Product home page Git Product logo

handwrittennumberrecognizer's Introduction

手写数字识别器/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文件,不实用,遂放弃

handwrittennumberrecognizer's People

Contributors

franklindx3906 avatar

Stargazers

 avatar

Watchers

James Cloos avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.