【导读】本文是专栏《计算机视觉40例简介》的第15个案例《KNN数字识别》。该专栏简要介绍李立宗主编《计算机视觉40例——从入门到深度学习(OpenCV-Python)》一书的40个案例。 目前,该书已经在电子工业出版社出版,大家可以在京东、淘宝、当当等平台购买。 大家可以在公众号“计算机视觉之光”回复关键字【案例15】获取本文案例的源代码及使用的测试图片等资料。 针对本书40个案例的每一个案例,分别录制了介绍视频。如果嫌看文字版麻烦,可以关注公众号“计算机视觉之光”直接观看视频介绍版。 |
本文截取书中部分内容如下:
我们的目标是构建一个使用KNN实现手写数字识别的应用程序。为此,我们需要一些训练数据和测试数据。OpenCV自带一幅包含5000个手写数字的图像digits.png。该图像中,每个手写数字有5行、100列、共计500个(5×100)。其中,每个手写数字的图像大小是20×20像素。如图16- 1所示,是从digits.png左上角截取的一部分。
图1 图像digits.png部分
将图像digits划分为训练集和测试集两部分,使用训练集训练KNN模型,使用测试集测试模型准确率。需要注意的,KNN模型对于数据集的格式有要求,所以我们需要将训练集和测试集处理为符合要求的形式。
划分数据集是使用KNN模型前的预处理过程,具体步骤图2所示。其中:
- Step 1: 初始化。该步骤从磁盘读入图像文件、并将图像文件由彩色图像处理为灰度图像。
- Step 2: 拆分数字。该操作针对的是图像digits,将其中的每个数字拆分为一个个独立的图像,得到大小为20×20像素的单个数字图像。
- Step 3:拆分数据集。将所有的数据划分为两部分,一般为训练集、一半为测试集;具体来说,将每个数字在图像内左侧的250个样本作为训练集,右侧的250个样本作为测试集。
- Step 4: 塑形。将大小为20×20的图像重塑为1*400像素大小的形式;也就是说,将每个20x20大小的单个数字的图像展平为一行400个像素。值得注意的是,在这里我们直接使用了每个数字图像的像素值作为其特征值。
- Step 5: 贴标签。为每个手写数字贴上其对应的标签。该标签是其实际所对应的数字值。
- Step 6: KNN。使用KNN模型完成识别。
- Step 7:验证。计算识别结果的准确率。
图2 预处理
在《计算机视觉40例——从入门到深度学习(OpenCV-Python)》一书中,从算法原理、实现流程等角度系统深入地介绍了该案例的理论基础和实现过程,并对具体的代码实现进行了细致的介绍与解释。欢迎大家阅读第16章《KNN字符识别》获取详细内容。
《计算机视觉40例——从入门到深度学习(OpenCV-Python)》在介绍Python基础、OpenCV基础、计算机视觉理论基础、深度学习理论的基础上,介绍了计算机视觉领域内具有代表性的40个典型案例。这些案例中,既有传统的案例(数字识别、答题卡识别、物体计数、缺陷检测、手势识别、隐身术、以图搜图、车牌识别、图像加密、指纹识别等),也有深度学习案例(图像分类、风格迁移、姿势识别、实例分割等),还有人脸识别方面的案例(表情识别、驾驶员疲劳监测、识别性别与年龄等)。