首页 > 编程知识 正文

txt文件手写数字python,python识别图片中数字

时间:2023-05-05 08:43:12 阅读:25600 作者:3516

手写数字识别(魅力鸽子入门)今天早上刚上实验课,因为在谈论逻辑回归,手稍微一刺就想发博客了。 作为一只刚入门的迷人的鸽子,看到代码运行得很好会有点兴奋。 这个实验不含钱,所以请停止路过的实用期待。 我怕你们吐哈哈。

实验结果:

手写数字识别(魅力鸽子入门)1.数据预处理2 .训练模型3 .测试模型,保存4 .调用模型5 .完整代码

1 .数据预处理

实际上,原理很简单,就是使用多元逻辑回归将训练的28*28图像的灰度值转换为一维矩阵。 这将成为求解784个特征向量一个标签的逻辑回归问题。 代码如下。

#数据预处理train data=NP.load txt (open (digits _ training.CSV )、' r )、delimiter='、'、'、skiprows=1) #数据m trrtrows 1: n train ] xtrain _ col _ avg=NP.mean ) x train,axis=0) xtrain=(xtrain-xtrain_col_avg )为每一列求平均值具体参数的意思随便搜索就到处都是,但我没有摆弄斧头。 每次看到算法,除了头晕,什么都感觉不到。

模型=逻辑注册(solver=' lbf GS ',multi_class='multinomial ',max_iter=500 ) model.fit ) yTrain

为了方便起见,必须保存模型,在运行一次之前进行一次训练。

#测试模型test data=NP.load txt (open (digits _ testing.CSV )、' r )、delimiter='、'、skiprows=1) MTest、ntest nt 1:ntest ) xtest=) xtest-xtrain_col_avg )/255 # )使用训练数据的列平均值处理的ytest=testdata(355 0) ypredict=moddict=错误:“,errors,“条件”) print (测试数据正确率: ),(mtest-errors(/mtest ) ) (=============) dirs(/model.pkl ) ) print )“模型已保存”) https://download.csdn.net/download/QQ _ 45874897/12297

4 .既然调用了模型进行训练,那就放几个图像来调用模型吧

读取要测试的图像,将大小调整为28*28,对图像进行二值化以减小误差。

为了使结果看起来有逼格,最后用同一个体显示图像和识别数字。

import c v2 importnumpyasnpfromsklearn.externalsimportjoblibmap=cv2.im read (r ' c : (users (联想(桌面) ) ) grayimage=cv2.cvtcolor(map,cv2.COLOR_BGR2GRAY ) ret,thresh2=cv2 )。 cv2.thresh _ binary _ inv (image=cv2.resize ) thresh2,(28,28 ) ) img _ array=NP.as array (image ) z=img ) -1) ) (==================================

p",map)cv2.waitKey(0) 5.完整代码

test1.py

import numpy as npfrom sklearn.linear_model import LogisticRegressionimport osfrom sklearn.externals import joblib#数据预处理trainData = np.loadtxt(open('digits_training.csv', 'r'), delimiter=",",skiprows=1)#装载数据MTrain, NTrain = np.shape(trainData) #行列数print("训练集:",MTrain,NTrain)xTrain = trainData[:,1:NTrain]xTrain_col_avg = np.mean(xTrain, axis=0) #对各列求均值xTrain =(xTrain- xTrain_col_avg)/255 #归一化yTrain = trainData[:,0]'''================================='''#训练模型model = LogisticRegression(solver='lbfgs', multi_class='multinomial', max_iter=500)model.fit(xTrain, yTrain)print("训练完毕")'''================================='''#测试模型testData = np.loadtxt(open('digits_testing.csv', 'r'), delimiter=",",skiprows=1)MTest,NTest = np.shape(testData)print("测试集:",MTest,NTest)xTest = testData[:,1:NTest]xTest = (xTest-xTrain_col_avg) /255 # 使用训练数据的列均值进行处理yTest = testData[:,0]yPredict = model.predict(xTest)errors = np.count_nonzero(yTest - yPredict) #返回非零项个数print("预测完毕。错误:", errors, "条")print("测试数据正确率:", (MTest - errors) / MTest)'''================================='''#保存模型# 创建文件目录dirs = 'testModel'if not os.path.exists(dirs): os.makedirs(dirs)joblib.dump(model, dirs+'/model.pkl')print("模型已保存")

运行结果

test2.py

import cv2import numpy as npfrom sklearn.externals import joblibmap=cv2.imread(r"C:UserslenovoDesktop[DX6@[C$%@2RS0R2KPE[W@V.png")GrayImage = cv2.cvtColor(map, cv2.COLOR_BGR2GRAY)ret,thresh2=cv2.threshold(GrayImage,127,255,cv2.THRESH_BINARY_INV)Image=cv2.resize(thresh2,(28,28))img_array = np.asarray(Image)z=img_array.reshape(1,-1)'''================================================'''model = joblib.load('testModel'+'/model.pkl')yPredict = model.predict(z)print(yPredict)y=str(yPredict)cv2.putText(map,y, (10,20), cv2.FONT_HERSHEY_SIMPLEX,0.7,(0,0,255), 2, cv2.LINE_AA)cv2.imshow("map",map)cv2.waitKey(0)

提供几张样本用来测试:

实验中还有很多地方需要优化,比如数据集太少,泛化能力太差,用样本的数据测试正确率挺高,但是用我自己手写的字正确率就太低了,可能我字写的太丑,哎,还是自己太菜了,以后得多学学算法了。

训练好的模型放在了上面。最后我也把数据集放到这儿。链接:https://pan.baidu.com/s/1PfQ5Jp3A8eN4SxFnA12-1Q
提取码:tpy6

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。