基於最近鄰法手寫數字識別 內附python原始碼

2022-06-30 15:24:12 字數 2899 閱讀 6017

本實驗皆在運用opencv、python等工具採用適當的演算法對手寫體數字進行識別與檢測,可以提供訓練集與測試集進行訓練,並可以輸入手寫字型進行測試檢驗。

通過獨立的完成本實驗,可以極大地提高本人對於python、opencv的理解,掌握手寫數字的特徵提取技術和最近鄰模板匹配法。

系統:window 10

軟體:pycharm community edition 2020.2.2 x64

語言:python 3.6

環境:cv2,numpy,matplotlib.pyplot,time

本資料集為100張,分別為數字0-9,每個數字10張,8張訓練集,2張測試集。如下:

圖 1 數字零

圖 2 數字一

圖 3 數字二

圖 4 數字三

訓練集:可以訓練模型引數,使模型擬合於正確的**函式。

測試集:通過訓練過的模型進行檢驗,評估最終模型泛化能力。

驗證集:用於調超引數,監控模型是否發生過擬合。

\1. 學習利用行列掃瞄的方法獲取手寫數字的上、下、左、右位置的子程式。

\2. 設計手寫數字的特徵提取演算法,並編寫對應特徵提取程式。

\3. 編寫基於最近鄰模板匹配的手寫數字識別程式。

記錄輸入數字0-9各10個,程式執行後相應的識別結果,並對結果進行深入分析。

\1. 記錄每個樣品的特徵提取效果圖。

\2. 記錄該樣品對應的歸一化後的特徵值。

\3. 統計每個數字正確識別率。並對錯誤識別的情況進行深入分析。

img函式名

函式功能簡述

函式介面簡述

imgtonp()

將的路徑匯入到矩陣中。

輸入:無 輸出:路徑矩陣

outfeature()

處理特徵函式並貼標籤。

輸入:路徑矩陣 輸出:訓練矩陣集與標籤集

star()

程式按照預設好的結構進行迴圈測試與輸出。

輸入:訓練矩陣集與標籤集 輸出:訓練結果

testimgtonp()

輸入測試,並轉化為矩陣。

輸入:測試位址。 輸出:測試矩陣。

outfeatureimg()

輸出特徵圖與特徵值。

輸入:訓練矩陣集 輸出:儲存特徵圖與特徵值為檔案。\

執行程式後,程式先行運用imgtonp()函式將img資料夾中0-9資料夾裡的80個樣本轉化為矩陣儲存於變數中並將其返回。

四、實驗結果

\1.   位址以匯入矩陣...... 

\2.   準備提取特徵...... 

\3.   特徵以儲存於feature矩陣...... 

\4.   準備貼標籤...... 

\5.   標籤以貼完...... 

\6.   是否輸出特徵圖與特徵值?y/n: 

輸入y時,程式將輸出80張樣本的特徵值與特徵圖,分別儲存於」./fandimg/」,以及」./fandimg/featurearray/」中。如下圖:

程式繼續執行,輸出框輸出:

1. 3-9.bmp 這張圖判斷錯誤了,系統判斷為:1 最接近的三個結果為:[[3. 7. 1.]]但是正確結果為:3  

2. 4-9.bmp 這張圖判斷錯誤了,系統判斷為:1 最接近的三個結果為:[[1. 1. 1.]]但是正確結果為:4  

3. 5-10.bmp 這張圖判斷錯誤了,系統判斷為:1 最接近的三個結果為:[[5. 1. 1.]]但是正確結果為:5  

4. 6-10.bmp 這張圖判斷錯誤了,系統判斷為:1 最接近的三個結果為:[[1. 1. 1.]]但是正確結果為:6  

5. 7-9.bmp 這張圖判斷錯誤了,系統判斷為:1 最接近的三個結果為:[[1. 1. 1.]]但是正確結果為:7  

6. 8-9.bmp 這張圖判斷錯誤了,系統判斷為:3 最接近的三個結果為:[[8. 9. 3.]]但是正確結果為:8  

7. 8-10.bmp 這張圖判斷錯誤了,系統判斷為:9 最接近的三個結果為:[[8. 9. 9.]]但是正確結果為:8  

8. 9-9.bmp 這張圖判斷錯誤了,系統判斷為:1 最接近的三個結果為:[[9. 7. 1.]]但是正確結果為:9  

OpenCV手寫數字字元識別 基於k近鄰演算法

本程式主要參照 基於opencv的離線手寫字元識別技術 實現了,對於手寫阿拉伯數字的識別工作。識別工作分為三大步驟 預處理,特徵提取,分類識別。預處理過程主要找到影象的roi部分子影象並進行大小的歸一化處理,特徵提取將影象轉化為特徵向量,分類識別採用k 近鄰分類方法進行分類處理,最後根據分類結果完成...

基於KNN的手寫數字識別

from numpy import import operator import os def classify0 inx,dataset,labels,k 構造分類器 knn原理 datasetsize dataset.shape 0 diffmat tile inx,datasetsize,1 ...

基於MNIST的手寫數字識別

1 mnist 資料資料集獲取 方式一 使用 tf.contrib,learn 模組載入 mnist 資料集 棄用 如下 使用 tf.contrib.learn 模組載入 mnist 資料集 deprecated 棄用 import tensorflow as tf from tensorflow....