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设置tmpfs来加速项目的教程
Apr 17 Python
python计算圆周率pi的方法
Jul 11 Python
python3.6 +tkinter GUI编程 实现界面化的文本处理工具(推荐)
Dec 20 Python
基于Python实现的ID3决策树功能示例
Jan 02 Python
TensorFlow实现卷积神经网络
May 24 Python
解决Django migrate No changes detected 不能创建表的问题
May 27 Python
Flask框架各种常见装饰器示例
Jul 17 Python
将Python字符串生成PDF的实例代码详解
May 17 Python
pyqt5让图片自适应QLabel大小上以及移除已显示的图片方法
Jun 21 Python
利用python实现汉字转拼音的2种方法
Aug 12 Python
python开发实时可视化仪表盘的示例
May 07 Python
python处理json数据文件
Apr 11 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
php 购物车实例(申精)
2009/05/11 PHP
php文件上传表单摘自drupal的代码
2011/02/15 PHP
php下安装配置fckeditor编辑器的方法
2011/03/02 PHP
php根据数据id自动生成编号的实现方法
2016/10/16 PHP
Javascript 篱式条件判断
2008/08/22 Javascript
在IE上直接编辑网页内容的js代码(IE地址栏js)
2009/04/27 Javascript
JavaScript 学习笔记(十一)
2010/01/19 Javascript
javaScript call 函数的用法说明
2010/04/09 Javascript
在IE 浏览器中使用 jquery的fadeIn() 效果 英文字符字体加粗
2011/06/02 Javascript
jsp+javascript打造级连菜单的实例代码
2013/06/14 Javascript
javascript中的Base64、UTF8编码与解码详解
2015/03/18 Javascript
AngularJS 实现JavaScript 动画效果详解
2016/09/08 Javascript
基于AngularJS前端云组件最佳实践
2016/10/20 Javascript
基于vue的换肤功能的示例代码
2017/10/10 Javascript
js实现购物车商品数量加减
2020/09/21 Javascript
python实现支持目录FTP上传下载文件的方法
2015/06/03 Python
python利用paramiko连接远程服务器执行命令的方法
2017/10/16 Python
Python探索之修改Python搜索路径
2017/10/25 Python
如何用python整理附件
2018/05/13 Python
pandas数据清洗,排序,索引设置,数据选取方法
2018/05/18 Python
解决Python运行文件出现out of memory框的问题
2018/12/03 Python
python实现机器人卡牌
2019/10/06 Python
pandas 中对特征进行硬编码和onehot编码的实现
2019/12/20 Python
python3爬虫中多线程的优势总结
2020/11/24 Python
伦敦所有西区剧院演出官方票务代理:Theatre Tickets Direct
2017/05/26 全球购物
波兰多品牌运动商店:StreetStyle24.pl
2020/09/22 全球购物
安全生产汇报材料
2014/02/17 职场文书
《逃家小兔》教学反思
2014/02/23 职场文书
《小池塘》教学反思
2014/02/28 职场文书
ktv好的活动方案
2014/08/15 职场文书
国际政治学专业推荐信
2014/09/26 职场文书
机关作风建设剖析材料
2014/10/11 职场文书
中学生逃课检讨书
2015/02/17 职场文书
2015年银行员工工作总结
2015/04/24 职场文书
小学五年级班主任工作经验交流材料
2015/11/02 职场文书
高中美术教学反思
2016/02/17 职场文书