計算機視覺 機器學習 (一)識別手寫數字 (3)

2021-10-02 22:47:33 字數 4132 閱讀 1348

三. 開始訓練資料集 。**如下

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 生物資訊識別 人臉是生物資訊識別鄰域重要研究方向之一,生物資訊識別領域主要包括兩大方面 生物特徵和行為特徵。人臉識別是屬於生物特徵非常重要的研究內容。行為特徵主要包括了姿態的識別,手勢的識別,步態的識別等和人的行為模式的識別。生物特徵有手形,指紋,臉型,虹膜,視網膜,脈搏,...