Python实现KNN算法实例之手写体识别

from PIL import Image
from numpy import *
import operator
def out_p(filename):
    im=Image.open("E:/test/pic/"+filename+".bmp")
    f=open("E:/test/text/"+filename+".txt","a",encoding='utf-8')
    w=im.size[0]
    h=im.size[1]
    #print(w,h)
    for i in range(0,w):
        for j in range(0,h):
            cl=cl=im.getpixel((j,i))
            clall=cl[0]+cl[1]+cl[2]
            if(clall==0):
                f.write('1')
            else:
                f.write('0')
        f.write("\n")
    f.close()
def train():
    for k in range(0,4):
        for l in range(0,10):
            filename=str(k)+'_'+str(l)
            out_p(filename)
    print("输出完毕")
train()  

以上代码为把0-3的数字测试图片转化为文本

from os import listdir
import numpy as np
from PIL import Image
from numpy import *
import operator
def out_p(filename):
    im=Image.open("E:/test/pic/"+filename+".bmp")
    f=open("E:/test/text/"+filename+".txt","a",encoding='utf-8')
    w=im.size[0]
    h=im.size[1]
    #print(w,h)
    for i in range(0,w):
        for j in range(0,h):
            cl=cl=im.getpixel((j,i))
            clall=cl[0]+cl[1]+cl[2]
            if(clall==0):
                f.write('1')
            else:
                f.write('0')
        f.write("\n")
    f.close()
def knn(k,testdata,traindata,labels):
    l=[]
    size=traindata.shape[0]
    temp=tile(testdata,(size,1))-traindata
    temp=temp**2
    mtemp=temp.sum(axis=1)
    d=mtemp**0.5
    sort=d.argsort()
    print(sort)
    for i in range(0,k):
        l.append(labels[sort[i]])
    vote=max(set(l), key=l.count)
    #su=dd.argsort()
    #print(su[0],su[1],su[2])
    return vote
def datatoarray(fname):
    arr=[]
    f=open("E:/test/text/"+fname,"r",encoding="utf-8")
    for i in range(0,120):
        thisline=f.readline()
        for j in range(0,120):
            arr.append(int(thisline[j]))
    return arr
#print(datatoarray('1_3.txt'))
def tr():
    trainfile=listdir("E:/test/text/")
    num=len(trainfile)
    trainarr=zeros((num,14400))
    l=[]
    for i in range(0,num):
        trainarr[i]=datatoarray(trainfile[i])
        l.append(int(trainfile[i][0]))
    return trainarr,l
traindata,labels=tr()
filename='tt'
out_p(filename)
testdata=datatoarray(filename+'.txt')
print(knn(3,testdata,traindata,labels))

猜你喜欢

转载自blog.csdn.net/u012865864/article/details/85780392