激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

腳本之家,腳本語言編程技術及教程分享平臺!
分類導航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|

服務器之家 - 腳本之家 - Python - opencv python 基于KNN的手寫體識別的實例

opencv python 基于KNN的手寫體識別的實例

2021-03-26 00:03sakurala Python

這篇文章主要介紹了opencv python 基于KNN的手寫體識別的實例,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

OCR of Hand-written Data using kNN

OCR of Hand-written Digits

我們的目標是構建一個可以讀取手寫數字的應用程序, 為此,我們需要一些train_data和test_data. OpenCV附帶一個images digits.png(在文件夾opencv\sources\samples\data\中),它有5000個手寫數字(每個數字500個,每個數字是20x20圖像).所以首先要將圖片切割成5000個不同圖片,每個數字變成一個單行400像素.前面的250個數字作為訓練數據,后250個作為測試數據.

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
import numpy as np
import cv2
import matplotlib.pyplot as plt
 
img = cv2.imread('digits.png')
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
 
# Now we split the image to 5000 cells, each 20x20 size
cells = [np.hsplit(row,100) for row in np.vsplit(gray,50)]
 
# Make it into a Numpy array. It size will be (50,100,20,20)
x = np.array(cells)
 
# Now we prepare train_data and test_data.
train = x[:,:50].reshape(-1,400).astype(np.float32) # Size = (2500,400)
test = x[:,50:100].reshape(-1,400).astype(np.float32) # Size = (2500,400)
 
# Create labels for train and test data
k = np.arange(10)
train_labels = np.repeat(k,250)[:,np.newaxis]
test_labels = train_labels.copy()
 
# Initiate kNN, train the data, then test it with test data for k=1
knn = cv2.ml.KNearest_create()
knn.train(train, cv2.ml.ROW_SAMPLE, train_labels)
ret,result,neighbours,dist = knn.findNearest(test,k=5)
 
# Now we check the accuracy of classification
# For that, compare the result with test_labels and check which are wrong
matches = result==test_labels
correct = np.count_nonzero(matches)
accuracy = correct*100.0/result.size
print( accuracy )

輸出:91.76

進一步提高準確率的方法是增加訓練數據,特別是錯誤的數據.每次訓練時最好是保存訓練數據,以便下次使用.

?
1
2
3
4
5
6
7
8
# save the data
np.savez('knn_data.npz',train=train, train_labels=train_labels)
 
# Now load the data
with np.load('knn_data.npz') as data:
  print( data.files )
  train = data['train']
  train_labels = data['train_labels']

OCR of English Alphabets

在opencv / samples / data /文件夾中附帶一個數據文件letter-recognition.data.在每一行中,第一列是一個字母表,它是我們的標簽. 接下來的16個數字是它的不同特征.

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
import numpy as np
import cv2
import matplotlib.pyplot as plt
 
 
# Load the data, converters convert the letter to a number
data= np.loadtxt('letter-recognition.data', dtype= 'float32', delimiter = ',',
          converters= {0: lambda ch: ord(ch)-ord('A')})
 
# split the data to two, 10000 each for train and test
train, test = np.vsplit(data,2)
 
# split trainData and testData to features and responses
responses, trainData = np.hsplit(train,[1])
labels, testData = np.hsplit(test,[1])
 
# Initiate the kNN, classify, measure accuracy.
knn = cv2.ml.KNearest_create()
knn.train(trainData, cv2.ml.ROW_SAMPLE, responses)
ret, result, neighbours, dist = knn.findNearest(testData, k=5)
 
correct = np.count_nonzero(result == labels)
accuracy = correct*100.0/10000
print( accuracy )

輸出:93.06

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持服務器之家。

原文鏈接:https://segmentfault.com/a/1190000015841285

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 欧美自拍 | 嗯~啊~弄嗯~啊h高潮视频 | 一级做a爱片性色毛片高清 国产精品色在线网站 | 欧美成人精品一区二区三区 | 97视频| 日韩视频不卡 | 精品一区二区亚洲 | 美女毛片在线观看 | 康妮卡特欧美精品一区 | h色网站免费观看 | 久久99精品视频在线观看 | 黄在线观看在线播放720p | av手机在线免费播放 | 欧洲精品久久久久69精品 | 啪啪毛片 | chinese乱子伦xxxx国语对白 | 国产精品久久久久网站 | 日韩精品a在线观看 | 热99在线视频 | 精品人伦一区二区三区蜜桃网站 | 一级黄色影院 | 久久综合九色 | 欧美一级毛片欧美一级成人毛片 | 色猫av| 在线观看免费污视频 | 北京一级毛片 | 天天看天天摸天天操 | 日本一区二区高清不卡 | 欧美a级毛片 | 精品国产一区二区三区在线观看 | 成人午夜高清 | 日本在线一区二区 | 羞羞网站在线看 | 久久精品一级片 | 成人免费在线观看视频 | 91高清视频在线免费观看 | 亚洲成人福利在线观看 | 中文字幕在线观看网址 | 精品国产乱码久久久久久丨区2区 | 91美女福利视频 | 91成人午夜性a一级毛片 |