手寫數字圖片識別實戰


手寫數字圖片識別實戰

  • 通過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源碼和數據:點擊此處


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM