• 手写数字图片识别实战


    手写数字图片识别实战

    • 通过sklearn的KNN邻近相似度,从而实战识别图片上的数字

    1.数据导入与处理

    import numpy as np
    import matplotlib.pyplot as plt
    from sklearn.neighbors import KNeighborsClassifier
    
    • 先随便展示一张图片
    #展示一张数图。
    img_arr = plt.imread("./data/3/3_140.bmp")
    img_arr.shape
    plt.imshow(img_arr)
    

    • 读取图片并保存在列表中
    feature = []
    target = []
    for file in range(10):
        for img in range(1,501):#./data/3/3_140.bmp
            img_path = "./data/%s/%s_%s.bmp"%(str(file),str(file),str(img))
            img_arr = plt.imread(img_path)
            feature.append(img_arr)
            target.append(file)
    
    • 将列表形式的样本转换成数组形式:
    feature = np.array(feature)
    target = np.array(target)
    
    • 将三维feature变成二维 28*28=784
    feature = feature.reshape((5000,784))
    feature.shape
    
    • 样本数据进行打乱,但target,feature打乱顺序是相同的
    np.random.seed(10)
    np.random.shuffle(feature)
    np.random.seed(10)
    np.random.shuffle(target)
    

    2.训练模型

    #训练集4980,测试集数据20
    x_train = feature[:4980]
    y_train = target[:4980]
    
    x_test = feature[4980:]
    y_test = target[4980:]
    
    • 创建模型并训练
    #创建训练模型
    #n_neighbors可以适当调整
    knn = KNeighborsClassifier(n_neighbors=5)
    knn.fit(x_train,y_train)
    

    3.验证模型

    print('模型分类的结果:',knn.predict(x_test))
    print('真实的分类结果:',y_test)
    """
    模型分类的结果: [6 6 4 4 0 8 5 8 2 2 4 3 3 9 4 1 6 2 9 2]
    真实的分类结果: [6 6 4 4 0 8 5 8 2 2 4 3 3 9 4 2 6 2 9 2]
    """
    #倒数第5个不一样,剩下都一样。
    

    4.测试图片数字

    • 让模型对外部的一张图片进行识别
    ex_img_arr = plt.imread('./数字.jpg')
    plt.imshow(ex_img_arr)
    
    • 将数字6裁剪出来
    img_two_arr = ex_img_arr[80:150,140:190,:]
    plt.imshow(img_two_arr)
    

    img_two_arr.shape
    """
    (70, 50, 3)
    """
    
    • 降维处理
    img_two_arr = img_two_arr.mean(axis=2)
    
    • 对图片进行像素等比例压缩
    import scipy.ndimage as ndimage
    img_two_arr = ndimage.zoom(img_two_arr,zoom=(28/70,28/50))
    
    • 展示等比压缩图片
    plt.imshow(img_two_arr)
    

    img_two_arr.shape#(28, 28)
    img_two_arr = img_two_arr.reshape((1,-1))#(1, 784)
    
    • 结果验证
    knn.predict(img_two_arr)
    """
    array([6])
    """
    

    github源码和数据:点击此处

  • 相关阅读:
    记:关于反演
    记:关于费马平方和定理的证明
    【2021集训队互测一】愚蠢的在线法官 题解
    CSP/NOIP2021 赛前集训
    20220108 省选组 总结
    Atcoder比赛总结
    Python读取execl数据写入到mysql
    大家都可以拖动的web小方块——Node.js摸石头系列之七
    创建一个Mybatis工程
    Spring整合Mybatis
  • 原文地址:https://www.cnblogs.com/xujunkai/p/12130187.html
Copyright © 2020-2023  润新知