手写体数字识别

 

1、图像处理0-1

from PIL import Image                                                                               
im=Image.open("E:\AWorkStation01\数据挖掘\codes\identity.jpg")        #读取本地文件
fh=open("E:/AWorkStation01/数据挖掘/codes/result.txt","a")            #打开写入的txt文件
width=im.size[0]                                                     #获取图像信息                                                                                  
height=im.size[1]
for i in range(0, width):
        for j in range(0, height):
            cl = im.getpixel((j, i))                                  #获取像素点                                                                     
            cl_rgb = cl[0] + cl[1] + cl[2]                            #rgb值相加                                                        
            if (cl_rgb <400):  
                fh.write("1")
            else:
                fh.write("0")
        fh.write("\n")
fh.close()                                                            #关闭文件                                                                                                   

结果:

2、手写体数字识别

数据训练集链接: https://pan.baidu.com/s/1l6ZS1qieYKiqJuSESj5zEw 提取码: my96 


from numpy import *
from os import listdir
lists1=listdir("E:\\AWorkStation01\\数据挖掘\\codes")               #读取当前路径文件夹中所有的文件,可用用来读取训练数据集合
b.sum(axis=0)    #每一行各列求和
b.sum(axis=1)    #每一列各行求和
c=array([12,2,7,9])
c.argsort()
array([1,2,3,0])    #得到的结果是原数组从小到大数排列的下标

def knn(k,testdata,traindata,labels):                               #k表示取的个数、labels
    traindatasize=traindata.shape[0]                                         #shape用来取规格 [n,m]   n表示行m表示列
    dif = tile(testdata,(traindatasize,1)).astype(int32)-traindata           #测试的数据可能与训练集规格不一样要进行拓展  dif最终求的是差值
                                                                    #tile(testdata,(n,m))  n表示行拓展次数、m表示列拓展次数
    sqdif = dif**2                                                  #dif是一个矩阵   矩阵相乘得到一个新的矩阵
    sumsqdif= sqdif.sum(axis=1)                                     #axis=1按行运算
    distance=sumsqdif**0.5                                          #开方
    sortdistance = distance.argsort()                               #按大小排序(排序的是元素的下标而不是元素本身)
    count={}                                                        #空字典
    for i in range(0,k):
        vote=labels[sortdistance[i]]                                #找出前top(k)小元素的下标
        count[vote]=count.get(vote,0)+1

    # sortcount=sorted(count.items(),key = operator.itemgetter(1),reverse = True)
    # return sortcount[0][0]
    return count






#加载数据
def datatoarray(fname):
    arr=[]
    fh=open(fname, encoding='utf-8')           #打开文本
    for i in range(0,32):
        thisline=fh.readline()                 #读取每一行一共32行 (32视具体情况而定)
        for j in range(0,32):
            arr.append(thisline[j])            #将该行中的元素逐渐加入到arr数组中
    return arr


arr1 = datatoarray("E:\\AWorkStation01\\数据挖掘\\codes\\result.txt")


#建立一个函数取文件名前缀
def setlabel(fname):
    filestr=fname.split(".")[0]    #取文件类型前面部分
    label=int(filestr.split("_")[0])    #取文件名中"_"前一部分
    return label


#建立训练数据
def traindata():
    labels=[]
    trainfile=listdir("E:\\AWorkStation01\\数据挖掘\\codes\\训练集\\digits\\trainingDigits")    #获取文件列表
    num = len(trainfile)     #文件个数
    #假设文件大小为 32*32 每一行存储一个文件长度为1024
    #用一个二维数组存储所有训练数据,行:文件总数,列:1024
    trainarr = zeros((num, 1024))  # 申请一个 num*1024  的二维数组    前提是要引用numpy库
    for i in range(0, num):
        thisfname = trainfile[i]  # 获取第i个文件名
        thislabel=setlabel(thisfname)    #获取当前文件所对应的数字
        labels.append(thislabel)
        trainarr[i,:]=datatoarray("E:\\AWorkStation01\\数据挖掘\\codes\\训练集\\digits\\trainingDigits\\"+thisfname)         #将文件夹traindata中的thisfname文件写入到trainarr[i,:]中
    return trainarr,labels



#用测试数据调用KNN算法去测试
def datatest():
    trainarr,labels = traindata()                  #获取训练集数据及labels
    testlist=listdir("E:\\AWorkStation01\\数据挖掘\\codes\\训练集\\digits\\testDigits")                   #获取testdata文件夹中的所有测试文件
    tnum=len(testlist)                             #测试组数
    for i in range(0,tnum):
        thistestfile=testlist[i]                   #选择当前测试文件
        testarr = datatoarray("E:\\AWorkStation01\\数据挖掘\\codes\\训练集\\digits\\testDigits\\"+thistestfile)
        result = knn(3,testarr,trainarr,labels)         #调用knn算法
        print(result)


traindata=traindata()[0]
labels=traindata()[1]
traindatasize=traindata.shape[0]
testdata=datatoarray("E:\\AWorkStation01\\数据挖掘\\codes\\训练集\\digits\\testDigits\\1_28.txt")

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值