使用kNN實現手寫字元識別

2022-06-12 05:48:11 字數 1725 閱讀 7096

首先,我們的資料集分為訓練集和測試集,訓練集中含有將近2000個資料文件(在這個文件中將乙個32*32的向量圖),故為了在計算機中進行處理,我們需要先開啟檔案,迴圈讀出檔案前32行,並將每行的頭32個字元值儲存在numpy陣列中,最後返回陣列,**如下:

def

img2vector(filename):

returnvect=zeros((1,1024))

fr=open(filename)

for i in range(32):

linestr=fr.readline()

for j in range(32):

returnvect[0,32*i+j]=int(linestr[j])

return returnvect

實現這一步後,我們只需在實現測試**即可

def

handwritingclasstest():

hwlabels=

trainingfilelist=os.listdir('

trainingdigits

')#get 1

print

trainingfilelist

m=len(trainingfilelist)

print

m trainingmat=zeros((m,1024))

for i in

range(m):

filenamestr=trainingfilelist[i]

filestr=filenamestr.split('.'

)[0]

classnumstr=int(filestr.split('_'

)[0])

trainingmat[i,:]=img2vector('

trainingdigits/%s

' %filenamestr)

testfilelist=os.listdir('

testdigits')

errorcount=0.0mtest=len(testfilelist)

for i in

range(mtest):

filenamestr=testfilelist[i]

filestr=filenamestr.split('.'

)[0]

classnumstr=int(filestr.split('_'

)[0])

vectorundertest=img2vector('

testdigits/%s

' %filenamestr)

classifierresult=classify0(vectorundertest,trainingmat,hwlabels,3)

print

"the classifier came back with:%d,the real answer is:%d

" %(classifierresult,classnumstr)

if(classifierresult!=classnumstr):errorcount+=1.0

print

"\nthe total number of errors is:%d

" %errorcount

print

"\nthe total error rate od:%f:

" %(errorcount/float(mtest))

結束

手寫字元識別

個人認為,主要原因在於資料的收集較為困難,合成的方式不是很適合手寫字元的生成。第二,手寫字元存在過分和粘連等各種情況,但是現階段的技術而言,只要資料足夠,可以採用lstm ctc的方式去解決,不單獨獲取單個字元,而是直接採用行識別。手寫字元識別要想使用到產品中,關鍵還是要找好具體的業務點,比如,個人...

基於K 近鄰演算法的手寫字元識別

收集資料集,包括trainingdigits和testdigits資料夾,資料夾下是字元影象的二進位制文字檔案,大小為32 32,如下圖所示 首先介紹listdir,它能返回資料夾路徑下的所有子檔案 import os from os import listdir listdir r c users...

開源標準資料集 mnist(手寫字元識別)

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!可以看出,mnist.pkl.gz 分為訓練集,校驗集和測試集 training data,valid data,test data load data training data,valid data,test data 均是二元 tuple t...