本實驗代碼已上傳麪包多,請點擊購買,或者關注[全都是碼農]公衆號,回覆[最近鄰],限時免費獲取!python
本實驗皆在運用OpenCV、Python等工具採用適當的算法對手寫體數字進行識別與檢測,能夠提供訓練集與測試集進行訓練,並能夠輸入手寫字體進行測試檢驗。web
經過獨立的完成本實驗,能夠極大地提升本人對於Python、OpenCV的理解,掌握手寫數字的特徵提取技術和最近鄰模板匹配法。算法
系統:window 10app
軟件:PyCharm Community Edition 2020.2.2 x64編輯器
語言:python 3.6函數
環境:cv2,numpy,matplotlib.pyplot,time工具
本數據集爲100張圖片,分別爲數字0-9,每一個數字10張圖片,8張訓練集,2張測試集。以下:學習
![]() |
![]() |
---|---|
![]() |
![]() |
訓練集:能夠訓練模型參數,使模型擬合於正確的預測函數。測試
測試集:經過訓練過的模型進行檢驗,評估最終模型泛化能力。字體
驗證集:用於調超參數,監控模型是否發生過擬合。
\1. 學習利用行列掃描的方法獲取手寫數字的上、下、左、右位置的子程序。
\2. 設計手寫數字的特徵提取算法,並編寫對應特徵提取程序。
\3. 編寫基於最近鄰模板匹配的手寫數字識別程序。
記錄輸入數字0-9各10個,程序運行後相應的識別結果,並對結果進行深刻分析。
\1. 記錄每一個樣品的特徵提取效果圖。
\2. 記錄該樣品對應的歸一化後的特徵值。
\3. 統計每一個數字正確識別率。並對錯誤識別的狀況進行深刻分析。
函數名 | 函數功能簡述 | 函數接口簡述 |
---|---|---|
ImgToNp() | 將圖片的路徑導入到矩陣中。 | 輸入:無 輸出:圖片路徑矩陣 |
outFeature() | 處理特徵函數並貼標籤。 | 輸入:圖片路徑矩陣 輸出:訓練圖片矩陣集與標籤集 |
star() | 程序按照預設好的結構進行循環測試與輸出。 | 輸入:訓練圖片矩陣集與標籤集 輸出:訓練結果 |
TestImgToNp() | 輸入測試圖片,並轉化爲矩陣。 | 輸入:測試圖片地址。 輸出:測試圖片矩陣。 |
outfeatureImg() | 輸出特徵圖與特徵值。 | 輸入:訓練圖片矩陣集 輸出:保存特徵圖與特徵值爲文件。\ |
mainapp.py爲主程序,表1函數清單中的函數均包含於其中。
運行程序後,程序先行運用ImgToNp()函數將img文件夾中0-9文件夾裏的80個樣本圖片轉化爲矩陣保存於變量中並將其返回。
4、實驗結果
運行mainapp.py後,輸出框以下所示:
\1. 圖片地址以導入矩陣......
\2. 準備提取特徵......
\3. 特徵以存儲於feature矩陣......
\4. 準備貼標籤......
\5. 標籤以貼完......
\6. 是否輸出特徵圖與特徵值?y/n:
輸入y時,程序將輸出80張樣本的特徵值與特徵圖,分別存儲於」./fandimg/{0-9}」,以及」./fandimg/featureArray/{0-9}」中。以下圖:
程序繼續運行,輸出框輸出:
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
f