淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com 《手把手教你学STM32》 主讲人 :正点原子团队 硬件平台:正点原子STM32开发板 版权所有:广州市星翼电子科技有限公司 淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com 开源电子 网 公众平台:“正点原子” 官方网站:www.alientek.com 联系电话:13922348612 ddddd ALIENTEK 淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com
淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com 《手把手教你学STM32》 手写识别实验 适用平台 STM32F1xx 开发板 (正点原子) STM32F4xx 开发板 (正点原子) ddddd 对STM32F103RCT6(mini)我们是放在扩展实验里面 淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com
淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com 手写识别实验 参考资料: 战舰STM32F1开发板 《STM32F1开发指南-库函数版本》-第50章 手写识别实验 精英STM32F1开发板 《STM32F1开发指南-库函数版本》-第45章 手写识别实验 miniSTM32F1开发板 《手写识别_AN1404.pdf》 探索者STM32F4开发板 《STM32F4开发指南-库函数版本》 -第53章 手写识别实验 淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com
淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com 目录 手写识别原理入门 1 实验讲解 2 淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com
淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com 手写识别入门 手写识别 手写识别,是指对在手写设备上书写时产生的有序轨迹信息进行识别的过程,是人际交互最自然、最方便的手段之一。随着智能手机和平板电脑等移动设备的普及,手写识别的应用也被越来越多的设备采用。 手写识别能够使用户按照最自然、最方便的输入方式进行文字输入,易学易用,可取代键盘或者鼠标。用于手写输入的设备有许多种,比如电磁感应手写板、压感式手写板、触摸屏、触控板、超声波笔等。 淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com
淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com 手写识别入门 手写识别过程:训练学习过程 和 识别过程 虚线部分为训练学习过程。 ①首先需要使用设备采集大量数据样本,样本类别数目为0~9,a~z,A~Z总共62类,每个类别5~10个样本不等(样本越多识别率就越高) ②对这些样本进行传统的把方向特征提取,提取后特征维数为512维。 ③LDA线性判决分析的方法进行降维,将维度降到64维 ④然后针对各个样本类别进行平均计算得到该类别的样本模板。 淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com
淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com 手写识别入门 ALIENTEK手写识别库 4个组成文件: ATKNCR_M_V2.0.lib ATKNCR_N_V2.0.lib atk_ncr.c atk_ncr.h ALIENTEK手写识别库主要供学习或者DIY之用。 ATKNCR_M_V2.0.lib使用内存管理,需要实现alientek_ncr_malloc和alientek_ncr_free两个函数。 ATKNCR_N_V2.0.lib不需要使用内存管理,通过全局变量来定义缓存区,缓存区需要提供至少3K左右的RAM。 ALIENTEK手写识别库资源需求:FLASH:52K左右,RAM:6K左右。 淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com
淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com 手写识别入门 atk_ncr.h :识别库文件同外部函数的接口函数声明 #define ATK_NCR_TRACEBUF1_SIZE 500*4 #define ATK_NCR_TRACEBUF2_SIZE 250*4 __packed typedef struct _atk_ncr_point { short x; //x轴坐标 short y; //y轴坐标 }atk_ncr_point; unsigned char alientek_ncr_init(void); //初始化识别器。在.lib文件实现。在识别开始之前,我们应该调用该函数。 void alientek_ncr_stop(void); //停止识别器 。在.lib文件实现。在识别完成之后(不需要再识别),我们调用该函数。 //识别器识别 //track:输入轨迹点的坐标集(最好200以内) //potnum:坐标集点坐标的个数 //charnum:期望输出的结果数,就是你希望输出多少个匹配结果。识别器按匹配程度排序输出(最佳匹配排第一) //mode:识别模式 //1,仅识别数字 2,进识别大写字母 3,仅识别小写字母 4,混合识别(全部识别) //result:结果缓存区(至少为:charnum+1个字节)。结果是ASCII码格式 void alientek_ncr(atk_ncr_point * track,int potnum,int charnum,unsigned char mode,char*result); void alientek_ncr_memset(char *p,char c,unsigned long len); //内存设置函数 void *alientek_ncr_malloc(unsigned int size); void alientek_ncr_free(void *ptr); 淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com
淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com 手写识别入门 atk_ncr.c代码如下: #include "atk_ncr.h" #include "malloc.h" //内存设置函数 void alientek_ncr_memset(char *p,char c,unsigned long len) { mymemset((u8*)p,(u8)c,(u32)len); } //内存申请函数 void *alientek_ncr_malloc(unsigned int size) return mymalloc(SRAMIN,size); //内存清空函数 void alientek_ncr_free(void *ptr) myfree(SRAMIN,ptr); 淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com
淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com 手写识别入门 手写识别步骤: 调用alientek_ncr_init函数,初始化识别程序 该函数用来初始化识别器,在手写识别进行之前,必须调用该函数。 ② 获取输入的点阵数据 此步,我们通过触摸屏获取输入轨迹点阵坐标,然后存放到一个缓存区里 面,注意至少要输入2个不同坐标的点阵数据,才能正常识别。输入点数 越多,需要内存越大,我们推荐的输入点数范围:100~200点。 ③ 调用alientek_ncr函数,得到识别结果. 通过调用alientek_ncr函数,我们可以得到输入点阵的识别结果,结果将保 存在result参数里面,采用ASCII码格式存储 ④调用alientek_ncr_stop函数,终止识别. 如果不需要继续识别,则调用alientek_ncr_stop函数,终止识别器。如果 还需要继续识别,重复步骤2和步骤3即可。 淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com
淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com 手写识别入门 代码讲解 淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com
淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com 谢谢您对“正点原子”团队的支持 硬件平台:正点原子STM32开发板 版权所有:广州市星翼电子科技有限公司 淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com 淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com