1)实验平台:alientek 阿波罗 STM32F767 开发板
2)摘自《STM32F7 开发指南(HAL 库版)》关注官方微信号公众号,获取更多资料:正点原子
![7b9b6192c4205a8a74976795b1908f67.png](https://i-blog.csdnimg.cn/blog_migrate/f684903101f1a1ed1bfd82873a6e9487.jpeg)
第五十三章 手写识别实验
现在几乎所有带触摸屏的手机都能实现手写识别。本章,我们将利用 ALIENTEK 提供的手
写识别库,在 ALIENTEK 探索者 STM32F4 开发板上实现一个简单的数字字母手写识别。本章
分为如下几个部:
53.1 手写识别简介
53.2 硬件设计
53.3 软件设计
53.4 下载验证
53.1 手写识别简介
手写识别,是指对在手写设备上书写时产生的有序轨迹信息进行识别的过程,是人际交互
最自然、最方便的手段之一。随着智能手机和平板电脑等移动设备的普及,手写识别的应用也
被越来越多的设备采用。
手写识别能够使用户按照最自然、最方便的输入方式进行文字输入,易学易用,可取代键
盘或者鼠标。用于手写输入的设备有许多种,比如电磁感应手写板、压感式手写板、触摸屏、
触控板、超声波笔等。ALIENTEK 探索者 STM32F4 开发板自带的 TFTLCD 触摸屏(2.8/3.5/4.3
寸),可以用来作为手写识别的输入设备。接下来,我们将给大家简单介绍下手写识别的实现过
程。
手写识别与其他识别系统如语音识别图像识别一样分为两个过程:训练学习过程;识别过
程。如图 53.1.1 所示:
![7b40ae7ea8765e07e8ce8848fb16795c.png](https://i-blog.csdnimg.cn/blog_migrate/645b773dbeb9053dd76624004cae9c69.jpeg)
图 53.1.1 字母数字识别系统示意图。
上图中虚线部分为训练学习过程,该过程首先需要使用设备采集大量数据样本,样本类别
数目为 0~9,a~z,A~Z 总共 62 类,每个类别 5~10 个样本不等(样本越多识别率就越高)。对
这些样本进行传统的把方向特征提取,提取后特征维数为 512 维,这对 STM32 来讲,计算量
和模板库的存储量来说都难以接受,所以需要运行一些方法进行降维,这里采用 LDA 线性判
决分析的方法进行降维,所谓线性判决分析,即是假设所有样本服从高斯分布(正态分布)对
样本进行低维投影,以达到各个样本间的距离最大化。关于 LDA 的更多知识可以阅读
(http://wenku.baidu.com/view/f05c731452d380eb62946d39.html)等参考文档。这里将维度降到
64 维,然后针对各个样本类别进行平均计算得到该类别的样本模板。
而对于识别过程,首先得到触屏输入的有序轨迹,然后进行一些预处理,预处理主要包括
重采样,归一化处理。重采样主要是因为不同的输入设备不同的输入处理方式产生的有序轨迹
序列有所不同,为了达到更好的识别结果我们需要对训练样本和识别输入的样本进行重采样处
理,这里主要应用隔点重采样的方法对输入的序列进行重采样;而归一化就是因为不同的书写
风格采样分辨率的差异会导致字体太小不同,因此需要对输入轨迹进行归一化。这里把样本进
行线性缩放的方法归一化为 64*64 像素。
接下来进行同样的八方向特征提取操作。所谓八方向特征就是首相将经过预处理后的
64*64 输入进行切分成 8*8 的小方格,每个方格 8*8 个像素;然后对每个 8*8 个小格进行各个
方向的点数统计。如某个方格内一共有 10 个点,其中八个方向的点分别为:1、3、5、2、3、4、
3、2 那么这个格子得到的八个特征向量为[0.1, 0.3, 0.5,0.2, 0.3, 0.4, 0.3, 0.2]。总共有 64
个格子于是一个样本最终能得到 64*8=512 维特征,更多八方向特征提取可以参考一下两个文档:
1,http://wenku.baidu.com/view/d37e5a49e518964bcf847ca5.html;
2,http://wenku.baidu.com/view/3e7506254b35eefdc8d333a1.html;
由于训练过程进行了 LDA 降维