opencv python 基于KNN的手写体识别的实例


Posted in Python onAugust 03, 2018

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个作为测试数据.

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

进一步提高准确率的方法是增加训练数据,特别是错误的数据.每次训练时最好是保存训练数据,以便下次使用.

# 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个数字是它的不同特征.

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

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python中为feedparser设置超时时间避免堵塞
Sep 28 Python
Python 使用requests模块发送GET和POST请求的实现代码
Sep 21 Python
python 中random模块的常用方法总结
Jul 08 Python
python中subprocess批量执行linux命令
Apr 27 Python
TensorFlow实现卷积神经网络
May 24 Python
对Pandas DataFrame缺失值的查找与填充示例讲解
Nov 06 Python
使用pandas读取文件的实现
Jul 31 Python
python3 dict ndarray 存成json,并保留原数据精度的实例
Dec 06 Python
Python 3.8 新功能来一波(大部分人都不知道)
Mar 11 Python
树莓派4B安装Tensorflow的方法步骤
Jul 16 Python
python 中[0]*2与0*2的区别说明
May 10 Python
利用Matlab绘制各类特殊图形的实例代码
Jul 16 Python
Flask实现图片的上传、下载及展示示例代码
Aug 03 #Python
python使用opencv驱动摄像头的方法
Aug 03 #Python
python 简单照相机调用系统摄像头实现方法 pygame
Aug 03 #Python
Python判断字符串是否为字母或者数字(浮点数)的多种方法
Aug 03 #Python
OpenCV2从摄像头获取帧并写入视频文件的方法
Aug 03 #Python
python中copy()与deepcopy()的区别小结
Aug 03 #Python
Python爬取个人微信朋友信息操作示例
Aug 03 #Python
You might like
玩转虚拟域名◎+ .
2006/10/09 PHP
PHP实现图片裁剪、添加水印效果代码
2014/10/01 PHP
PHP输出九九乘法表代码实例
2015/03/27 PHP
PHP批斗大会之缺失的异常详解
2019/07/09 PHP
jQuery中add实现同时选择两个id对象
2010/10/22 Javascript
JavaScript全局函数使用简单说明
2011/03/11 Javascript
缓动函数requestAnimationFrame 更好的实现浏览器经动画
2012/12/07 Javascript
Bootstrap每天必学之表单
2015/11/23 Javascript
BootStrap制作导航条实例代码
2016/05/06 Javascript
详解Node.Js如何处理post数据
2016/09/19 Javascript
jQuery选择器实例应用
2017/01/05 Javascript
微信小程序 密码输入(源码下载)
2017/06/27 Javascript
TypeScript之调用栈的实现
2019/12/31 Javascript
如何在vue项目中嵌入jsp页面的方法(2种)
2020/02/06 Javascript
python僵尸进程产生的原因
2017/07/21 Python
Python使用Turtle模块绘制五星红旗代码示例
2017/12/11 Python
python 产生token及token验证的方法
2018/12/26 Python
numpy实现神经网络反向传播算法的步骤
2019/12/24 Python
python opencv根据颜色进行目标检测的方法示例
2020/01/15 Python
python库skimage给灰度图像染色的方法示例
2020/04/27 Python
python名片管理系统开发
2020/06/18 Python
纯CSS3制作漂亮带动画效果的主机价格表
2015/04/25 HTML / CSS
Mamas & Papas沙特阿拉伯:英国最受欢迎的婴儿品牌
2017/11/20 全球购物
餐厅考勤管理制度
2014/01/28 职场文书
《姥姥的剪纸》教学反思
2014/02/25 职场文书
大学班级文化建设方案
2014/05/06 职场文书
环卫工人先进事迹材料
2014/06/02 职场文书
2014年店长工作总结
2014/11/17 职场文书
2015年安全生产工作总结范文
2015/04/02 职场文书
试用期旷工辞退通知书
2015/04/17 职场文书
热血教师观后感
2015/06/10 职场文书
女性健康知识讲座主持词
2015/07/04 职场文书
《祁黄羊》教学反思
2016/02/20 职场文书
三八红旗手先进事迹材料(2016推荐版)
2016/02/25 职场文书
员工给公司的建议书
2019/06/24 职场文书
Python 多线程之threading 模块的使用
2021/04/14 Python