基于stm32f429的手写识别_正点原子【STM32-F407探索者】第五十三章 手写识别实验...

本文介绍了如何在ALIENTEK探索者STM32F4开发板上实现手写识别,利用提供的库实现数字字母的手写识别功能。通过初始化识别器、获取输入点阵、调用手写识别库并输出结果,用户可以轻松实现手写识别。文章还涉及硬件设计和软件设计流程,包括点阵数据获取、识别函数的使用及模式切换。
摘要由CSDN通过智能技术生成

1)资料下载:点击资料即可下载

2)对正点原子Linux感兴趣的同学可以加群讨论:935446741

3)关注正点原子公众号,获取最新资料更新

现在几乎所有带触摸屏的手机都能实现手写识别。本章,我们将利用 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 所示:图 53.1.1 字母数字识别系统示意图。

上图中虚线部分为训练学习过程,该过程首先需要使用设备采集大量数据样本,样本类别

数目为 0~9,a~z,A~Z 总共 62 类,每个类别 5~10 个样本不等(样本越多识别率就越高)。对

这些样本进行传统的把方向特征提取,提取后特征维数为 512 维,这对 STM32 来讲,计算量

和模板库的存储量来说都难以接受,所以需要运行一些方法进行降维,这里采用 LDA 线性判

决分析的方法进行降维,所谓线性判决分析,即是假设所有样本服从高斯分布(正态分布)对

样本进行低维投影,以达到各个样本间的距离最大化。关于 LDA 的更多知识可以阅读

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 维特征,更多八方向特征提取可以参考一下两个文档:

由于训练过程进行了 LDA 降维计算,所以识别过程同样需要对应的 LDA 降维过程得到最

终的 64 维特征。这个计算过程就是在训练模板的过程中可以运算得到一个 512*64 维的矩阵,

那么我们通过矩阵乘运算可以得到 64 维的最终特征值。

最后将这 64 维特征分别与模板中的特征进行求距离运算。得到最小的距离为该输入的最佳

识别结果输出。

关于手写识别原理,我们就介绍到这里。如果想自己实现手写识别,那得花很多时间学习

和研究,但是如果只是应用的话,那么就只需要知道怎么用就 OK 了,相对来说,简单的多。

ALIENTEK 提供了一个数字字母识别库,这样我们不需要关心手写识别是如何实现的,只

需要知道这个库怎么用,就能实现手写识别。ALIENTEK 提供的手写识别库由 4 个文件组成:

ATKNCR_M_V2.0.lib、ATKNCR_N_V2.0.lib、atk_ncr.c 和 atk_ncr.h。

ATKNCR_M_V2.0.lib 和 ATKNCR_N_V2.0.lib 是两个识别用的库文件(两个版本),使用

的时候,选择其中之一即可。ATKNCR_M_V2.0.lib 用于使用内存管理的情况,用户必须自己

实现 alientek_ncr_malloc 和 alientek_ncr_free 两个函数。而 ATKNCR_N_V2.0.lib 用于不使用内

存管理的情况,通过全局变量来定义缓存区,缓存区需要提供至少 3K 左右的 RAM。大家根据

自己的需要,选择不同的版本即可。ALIENTEK 手写识别库资源需求:FLASH:52K 左右,RAM:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值