三. 開始訓練資料集 。**如下
import cv2
import os
import numpy as np
from sklearn import neighbors
import struct
print("now start,please wait...")
def getimages():#處理訓練
imgs = np.zeros([60000,784],int)#建立乙個60000*784的0矩陣
def getlabels():#解析訓練標籤(解析出來的標籤和順序是一一對應的)
def gettestlabels():#處理測試標籤,和處理訓練標籤是一樣的
f1=open("e:",'rb')
buf1=f1.read()
f1.close()
index=0
magic,num=struct.unpack_from(">ii",buf1,0)
index+=struct.calcsize('>ii')
labs=
labs=struct.unpack_from('>'+str(num)+'b',buf1,index)
return labs
if __name__=="__main__":#主函式
print("getting train_imgs...")
train_imgs = getimages()
print("getting train_labels...")
train_labels=getlabels()
print("creating knn classifier...")
knn = neighbors.kneighborsclassifier(algorithm='kd_tree',n_neighbors=3)
print("training...")
knn.fit(train_imgs,train_labels)#讀入訓練和標籤進行訓練
print("getting test_images...")
test_imgs = gettestimages()
print("getting test_labels...")
test_labels = gettestlabels()
print("predicting...")
result = knn.predict(test_imgs)#對測試進行**
wrongnum = np.sum(result!=test_labels)#得出錯誤個數
num = len(test_imgs)#訓練的總數
print("total number:",num)
print("wrong number:",wrongnum)
print("rightrate:",1-wrongnum/float(num))#得出正確率
def getimages():#處理訓練
imgs = np.zeros([60000,784],int)#建立乙個60000*784的0矩陣
for i in range(60000):
img1=cv2.imread("e:"+str(i)+".jpg",0)#讀取每一張(路徑自定義)
for rows in range(28):
for cols in range(28):#訪問每張的每個畫素,這種方法簡單易懂但是效率比較低
if img1[rows,cols] >= 127: #二值化處理,把一整張的畫素處理成只有0和1
img1[rows,cols]=1
else:
img1[rows,cols]=0 #這裡選擇的臨界點是127,正好是0-255的中間值
imgs[i,rows*28+cols]=img1[rows,cols]#把每張(28*28)展開成一行(1*784),
#然後把每張的畫素逐行放到(60000*784)的大矩陣中
return imgs#返回所有的畫素重構的矩陣
if __name__=="__main__":#主函式
print("getting train_imgs...") #print的目的就是知道進度
train_imgs = getimages() #train_imgs儲存60000*784的大矩陣
print("getting train_labels...")
train_labels=getlabels()#train_labels儲存60000個訓練標籤
print("creating knn classifier...")
knn = neighbors.kneighborsclassifier(algorithm='kd_tree',n_neighbors=3)#重點來了,這裡就是載入knn分類器,具體的用法可以上網搜尋
print("training...")
knn.fit(train_imgs,train_labels)#讀入訓練和標籤進行訓練
print("getting test_images...")
test_imgs = gettestimages()#test_imgs儲存10000*784的大矩陣
print("getting test_labels...")
test_labels = gettestlabels()#test_labels儲存10000個訓練標籤
print("predicting...")
result = knn.predict(test_imgs)#對測試進行**
wrongnum = np.sum(result!=test_labels)#得出錯誤個數
num = len(test_imgs)#訓練的總數
print("total number:",num)
print("wrong number:",wrongnum)
print("rightrate:",1-wrongnum/float(num))#得出正確率
最後!我要非常感謝我的一位csdn上的朋友,從他那裡學到了很多,也是他陪著我修改**,其實大部分都是從他那借鑑的。有機會可以詢問他,在此就不公布他的資訊了!非常感謝! 好玩的計算機視覺 KNN演算法手寫數字識別
ocr應用非常廣泛,而且有許多方法,今天用knn演算法實現簡單的0 9手寫數字識別。本程式使用opencv 3.0和python 3。knn演算法是k近鄰分類演算法,屬於機器學習中的監督學習,需要一定量的帶標籤的輸入樣本資料進行 訓練 然後就可以識別。我給 訓練 打引號是因為其實knn沒有明顯的前期...
計算機視覺 opencv人臉識別
import cv2 步驟1 載入影象 gray cv2.cvtcolor img cv2.color bgr2gray 將影象轉換成灰度模式 opencv載入影象的方式是bgr cv2.imshow test gray cv2.waitkey 0 為什麼不直接在載入影象的時候指定灰度影象?而是要轉...
計算機視覺之人臉識別學習(六)
一.人臉業務場景綜述 1 生物資訊識別 人臉是生物資訊識別鄰域重要研究方向之一,生物資訊識別領域主要包括兩大方面 生物特徵和行為特徵。人臉識別是屬於生物特徵非常重要的研究內容。行為特徵主要包括了姿態的識別,手勢的識別,步態的識別等和人的行為模式的識別。生物特徵有手形,指紋,臉型,虹膜,視網膜,脈搏,...