时间:2021-05-23
1.前言
版本:Python3.6.1 + PyQt5 + SQL Server 2012
以前一直觉得,机器学习、手写体识别这种程序都是很高大上很难的,直到偶然看到了这个视频,听了老师讲的思路后,瞬间觉得原来这个并不是那么的难,原来我还是有可能做到的。
于是我开始顺着思路打算用Python、PyQt、SQLServer做一个出来,看看能不能行。然而中间遇到了太多的问题,数据库方面的问题有十几个,PyQt方面的问题有接近一百个,还有数十个Python基础语法的问题。但好在,通过不断的Google,终于凑出了这么一个成品来。
最终还是把都凑在一个函数里的代码重构了一下,改写成了4个模块:
main.py、Learning.py、LearningDB.py、LearningUI.py
其中LearningDB实现python与数据库的交互,LearningUI实现界面的交互,Learning继承LearningUI类添加上了与LearningDB数据库类的交互,最后通过main主函数模块运行程序。
其中涉及数据库的知识可参考之前的文章:Python3操作SQL Server数据库(实例讲解),
涉及PyQt的知识可参考:Python3使用PyQt5制作简单的画板/手写板
手写体识别的主要思路是将手写的字,用一个列表记录其所经过的点,划分为一个九宫格,然后数每个格子中点的数目,将数目转化为所占总点数的百分比。然后两两保存的九维数,求他们之间的距离,距离越近代表越接近。
2.通过pymssql与数据库的交互
因为使用程序之前先需要建表,建表我就直接使用SQL语句执行了:
LearningDB.py程序如下:
''' LearningDB类 功能:定义数据库类,包含一个学习函数learn_data和一个识别函数identify_data 作者:PyLearn 博客: http://bo_table.currentIndex() #弹出确认对话框 qbox = QMessageBox() qbox.setIcon(QMessageBox.Information) qbox.setWindowTitle("请确认") qbox.setText("学习数字 %d ?" % learn_num) qbox.setStandardButtons(QMessageBox.Yes | QMessageBox.No) qbox.setDefaultButton(QMessageBox.No) qbox.button(QMessageBox.Yes).setText("是") qbox.button(QMessageBox.No).setText("否") reply = qbox.exec() #判断对话框结果,执行程序 if reply == QMessageBox.Yes: learn_result = False learn_dim = self.get_pos_xy() if learn_dim: learn_result = self.learn_db.learn_data(learn_num, learn_dim) else: print('get_pos_xy()函数返回空值') return None if learn_result: QMessageBox.about(self, "提示", "学习成功!") else: QMessageBox.about(self, "提示", "学习失败!") else: return None def btn_recognize_on_clicked(self): #如果没有进行绘画,警告后退出 if not self.pos_xy: QMessageBox.critical(self, "注意", "请先写入您要识别的数字!") return None else: recognize_num = 0 recognize_dim = self.get_pos_xy() if recognize_dim: recognize_num = self.learn_db.identify_data(recognize_dim) else: print('recognize_dim为空') return None self.label_output.setText('%d' % recognize_num)5.最后的main主函数
''' 主函数main 功能:生成Learning对象,进入主循环 作者:PyLearn 最后修改日期: 2017/10/18'''import sysfrom PyQt5.QtWidgets import QApplicationfrom Learning import Learningif __name__ == '__main__': app = QApplication(sys.argv) py_learning = Learning() py_learning.show() sys.exit(app.exec_())将以上4个程序放在同一个目录下,直接执行main.py就行了。
运行界面如下:
学习数字4:
第一次运行需要全部学习至少一次才能有一点正确率。
识别3:
以上这篇Python3实现简单可学习的手写体识别(实例讲解)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
本文实例为大家分享了pytorch实现MNIST手写体识别的具体代码,供大家参考,具体内容如下实验环境pytorch1.4Windows10python3.7c
0.引言 平时上网干啥的基本上都会接触验证码,或者在机器学习学习过程中,大家或许会接触过手写体识别/验证码识别之类问题,会用到手写体的数据集; 自己尝试写了
本文实例为大家分享了用KNN算法手写体识别的具体代码,供大家参考,具体内容如下#!/usr/bin/python#coding:utf-8importnumpy
本文学习NeuralNetworksandDeepLearning在线免费书籍,用python构建神经网络识别手写体的一个总结。代码主要包括两三部分:1)、数据
在前几天写的一篇博文《如何从TensorFlow的mnist数据集导出手写体数字图片》中,我们介绍了如何通过TensorFlow将mnist手写体数字集导出到本