from numpy import *
import operator
from os import listdir
def knn(k,testdata,traindata,labels):
traindatasize=traindata.shape[0]
dif=tile(testdata,(traindatasize,1))-traindata
sqdif=dif**2
sumsqdif=sqdif.sum(axis=1)
distance=sumsqdif**0.5
distancesort=distance.argsort()
count={}
for i in range(0,k):
vote=labels[distancesort[i]]
count[vote]=count.get(vote,0)+1
sortcount=sorted(count.items(),key=operator.itemgetter(1),reverse=True)
return sortcount[0][0]
#图片处理,先将图片保存为等高等宽的格式,然后转为文本
from PIL import Image
im=Image.open("C:/Users/lenovo/Desktop/微信图片_20180306100312.jpg")
fh=open("C:/Users/lenovo/Desktop/text1.txt","a")
width=im.size[0]
height=im.size[1]
for i in range(0,width):
for j in range(0,height):
cl=im.getpixel((i,j))
clall=cl[0]+cl[1]+cl[2]
if(clall==0):
fh.write("1")
else:
fh.write("0")
fh.write("\n")
fh.close()
#加载数据,使一个文件变成一行
def datatoarray(fname):
fh=open(fname)
arr=[]
for i in range(0,32):
thisline=fh.readline()
for j in range(0,32):
arr.append(int(thisline[j]))
return arr
arr1=datatoarray("G:/python 安装/数据分析及挖掘/testandtraindata/traindata/0_89.txt")
#建立一个函数取文件名前缀
def seplabel(fname):
filestr=fname.split(".")[0]
label=int(filestr.split("_")[0])
return label
#建立训练数据
def traindata():
labels=[]
trainfile=listdir("G:/python 安装/数据分析及挖掘/testandtraindata/traindata")
num=len(trainfile)
#列长度为1024,每一行储存一个文件
#用一个数组储存所有的训练文件,行为文件数量,列为1024
trainarr=zeros((num,1024))
for i in range(0,num):
thisfname=trainfile[i]
thislabel=seplabel(thisfname)
labels.append(thislabel)
trainarr[i,:]=datatoarray("G:/python 安装/数据分析及挖掘/testandtraindata/traindata/"+thisfname)
return trainarr,labels
#用测试数据调用KNN算法测试,看是否能够准确识别
def datatest():
trainarr,labels=traindata()
testlist=listdir("G:/python 安装/数据分析及挖掘/testandtraindata/testdata")
testnum=len(testlist)
for i in range(0,testnum):
thisfile=testlist[i]
testarr=datatoarray("G:/python 安装/数据分析及挖掘/testandtraindata/testdata/"+thisfile)
rknn=knn(3,testarr,trainarr,labels)
print(rknn)
#datatest()
#抽某个文件测试
trainarr,labels=traindata()
thisfile="8_8.txt"
testarr=datatoarray("G:/python 安装/数据分析及挖掘/testandtraindata/testdata/"+thisfile)
rknn=knn(3,testarr,trainarr,labels)
print(rknn)
import operator
from os import listdir
def knn(k,testdata,traindata,labels):
traindatasize=traindata.shape[0]
dif=tile(testdata,(traindatasize,1))-traindata
sqdif=dif**2
sumsqdif=sqdif.sum(axis=1)
distance=sumsqdif**0.5
distancesort=distance.argsort()
count={}
for i in range(0,k):
vote=labels[distancesort[i]]
count[vote]=count.get(vote,0)+1
sortcount=sorted(count.items(),key=operator.itemgetter(1),reverse=True)
return sortcount[0][0]
#图片处理,先将图片保存为等高等宽的格式,然后转为文本
from PIL import Image
im=Image.open("C:/Users/lenovo/Desktop/微信图片_20180306100312.jpg")
fh=open("C:/Users/lenovo/Desktop/text1.txt","a")
width=im.size[0]
height=im.size[1]
for i in range(0,width):
for j in range(0,height):
cl=im.getpixel((i,j))
clall=cl[0]+cl[1]+cl[2]
if(clall==0):
fh.write("1")
else:
fh.write("0")
fh.write("\n")
fh.close()
#加载数据,使一个文件变成一行
def datatoarray(fname):
fh=open(fname)
arr=[]
for i in range(0,32):
thisline=fh.readline()
for j in range(0,32):
arr.append(int(thisline[j]))
return arr
arr1=datatoarray("G:/python 安装/数据分析及挖掘/testandtraindata/traindata/0_89.txt")
#建立一个函数取文件名前缀
def seplabel(fname):
filestr=fname.split(".")[0]
label=int(filestr.split("_")[0])
return label
#建立训练数据
def traindata():
labels=[]
trainfile=listdir("G:/python 安装/数据分析及挖掘/testandtraindata/traindata")
num=len(trainfile)
#列长度为1024,每一行储存一个文件
#用一个数组储存所有的训练文件,行为文件数量,列为1024
trainarr=zeros((num,1024))
for i in range(0,num):
thisfname=trainfile[i]
thislabel=seplabel(thisfname)
labels.append(thislabel)
trainarr[i,:]=datatoarray("G:/python 安装/数据分析及挖掘/testandtraindata/traindata/"+thisfname)
return trainarr,labels
#用测试数据调用KNN算法测试,看是否能够准确识别
def datatest():
trainarr,labels=traindata()
testlist=listdir("G:/python 安装/数据分析及挖掘/testandtraindata/testdata")
testnum=len(testlist)
for i in range(0,testnum):
thisfile=testlist[i]
testarr=datatoarray("G:/python 安装/数据分析及挖掘/testandtraindata/testdata/"+thisfile)
rknn=knn(3,testarr,trainarr,labels)
print(rknn)
#datatest()
#抽某个文件测试
trainarr,labels=traindata()
thisfile="8_8.txt"
testarr=datatoarray("G:/python 安装/数据分析及挖掘/testandtraindata/testdata/"+thisfile)
rknn=knn(3,testarr,trainarr,labels)
print(rknn)