一种手写输入的识别方法及系统
技术领域
本发明涉及字符识别技术领域,特别涉及一种手写输入的字符的识别方法及系统。
背景技术
随着科学技术的不断发展,带有手写输入功能的智能终端设备(如PDA、手机或掌上电脑) 在生活中得到了广泛应用。这种智能终端设备通常集成有电阻式、电容式或电磁式手写输入系统,用户可以利用手指或手写笔等通过接触或非接触方式在手写输入系统上输入字符并由智能终端设备的处理器进行识别或直接显示在显示屏幕上。这种手写输入系统取代了传统的键盘输入,使用户可以在无需掌握各种复杂输入法的情况下更便捷地输入字符。
但是,现有技术中,因个人书写习惯不同,手写输入的字符千变万化,因此手写输入字符的识别难度会比较大,导致识别速度和识别效率比较低,并且手写输入字符的识别正确率也不高。
发明内容
为了克服上述现有技术中的不足,本发明提供了一种手写输入的识别方法及系统,其通过对手写输入的笔迹流进行微码描述,进而对微码特征比较后输出识别结果,能够快速精确的识别出用户的手写内容,识别正确率高、识别速度快。
本发明解决其技术问题所采用的技术方案为:
一种手写输入的识别方法,包括如下步骤:
每隔预设时间间隔采样触屏位置,获取输入的滑动轨迹数据;
基于所述滑动轨迹数据将手写输入的滑动轨迹分解为多个弧段;
对每一个弧段分别通过起点至终点的方向特征、起点和终点的位置特征以及终点的压力特征进行微码描述;其中,所述起点至终点的方向特征通过角度量化值、上下方向量化值、左右方向量化值以及象限量化值进行表征;所述起点和终点的位置特征分别通过横坐标和纵坐标在预设空域的量化值进行表征;
将所述滑动轨迹的微码流与词库中的单词轨迹提取的微码流进行动态规划计算微码流之间的相似度;
通过模式匹配算法匹配检索,输出检索结果。
可选地,在将滑动轨迹分解为多个弧段之前,还包括对所述滑动轨迹数据进行预处理,包括:提取所述滑动轨迹数据中坐标变化量符号发生变化的点、起点和终点、以及抬笔点中的部分或全部作为初级特征点,并筛选所述初级特征点。
可选地,在提取所述初级特征点之前,还包括步骤:预处理所述滑动轨迹数据;其中,预处理所述滑动轨迹数据包括:去掉所述滑动轨迹数据中重复的数据、将所述滑动轨迹数据的坐标位置对齐、平滑所述滑动轨迹数据的滤波、以及将所述滑动轨迹数据归一化至统一的高度和宽度中的部分或全部。
可选地,筛选所述初级特征点包括如下步骤:
去掉所述初级特征点中重复的点,并按照从小到大排序;
判断相邻初级特征点之间的距离是否小于第一距离阈值,并且相应横纵坐标差的绝对值与所述滑动轨迹数据最大横纵坐标比的和是否小于第二距离阈值,如是,在两点之间所有的点选择一个角度最小的点作为候选特征点;如否,直接执行下一步骤;
去掉相邻三点之间夹角大于第一角度阈值的点;
去掉夹角在第二角度阈值和第三角度阈值之间的点;
计算相邻两个特征点之间横纵坐标差的绝对值与所述滑动轨迹数据最大横纵坐标比的和是否小于第三距离阈值,如是,假设去掉所述两个特征点,重新计算去掉所述两个特征点之后的相邻特征点之间的夹角,如夹角变大并小于第四距离阈值,或者夹角变小,则在所述两个特征点之间选择一个夹角最小的点。
可选地,在去掉夹角在第二角度阈值和第三角度阈值之间的点之后,还包括步骤:重新计算相邻点之间的夹角,若夹角变小,则去掉该点。
可选地,若手写输入的数据为字符串,还包括如下字符串匹配步骤:
将所述手写字符串表征为矩阵;其中,所述矩阵的行与数字和/或字母编码为数字的编码数相对应,所述矩阵的列与所述手写字符串的长度相对应,所述矩阵中的第i行第j列元素表示所述手写字符串中第j个手写字符识别成编号为i的字符的匹配度百分数;
基于所述匹配度计算所述手写字符串与词库中字符串的最长公共子串;其中,若所述匹配度大于第一预设阈值,则认为匹配,否则,认为不匹配;
基于所述匹配度和第二预设阈值的差值计算匹配误差,其中,若所述匹配度大于第一预设阈值,所述匹配度以第二预设阈值进行表征;若所述匹配度小于第一预设阈值,所述匹配度以真实值表征;
计算所述手写字符串与词库中的字符串的总体匹配代价,将所述手写字符串的微码流与词库中的字符串提取的微码流进行动态规划求微码流之间的相似度;
通过模式匹配算法匹配检索,输出字符串匹配的检索结果。
可选地,若手写输入的数据为叠写或连写数据,在字符串匹配步骤之前,还包括如下拆分步骤:
从所述滑动轨迹数据的起点开始选择滑动窗口,其中,所述滑动窗口的长度为识别一个数字或字母的最大抬笔数;
对所述滑动窗口中的笔画进行识别,基于所述笔画的识别代价选择候选拆分点;其中,若所述滑动窗口中笔画的识别代价小于第三预设阈值,在所述识别代价中选择前两种代价最小的识别结果作为候选拆分点;若所述滑动窗口中笔画的识别代价均高于第三预设阈值,只选择代价最小的识别结果作为候选拆分点;
所述滑动窗口顺序后移,继续对下一个滑动窗口中的笔画进行识别,基于所述笔画的识别代价选择候选拆分点;
所有滑动窗口的候选拆分点构建形成多条路径,在所述多条路径中选择一条总代价最小的路径,所述路径对应的识别结果就是所述叠写或连写数据对应的字符串。
可选地,在对所述滑动窗口中的笔画进行识别之前,还包括步骤:排除所述滑动窗口中,不可能为一个字的结束笔的抬笔。
可选地,在对所述滑动窗口中的笔画进行识别时,若拆分点的置信度高于第四预设阈值,直接跳出滑动窗口。
本发明还提出了一种手写输入的识别系统,包括:
数据采集模块,用于每隔预设时间间隔采样触屏位置,获取输入的滑动轨迹数据;
分解模块,用于基于所述滑动轨迹数据将手写输入的滑动轨迹分解为多个弧段;
特征描述模块,用于对每一个弧段分别通过起点至终点的方向特征、起点和终点的位置特征以及终点的压力特征进行微码描述;其中,所述起点至终点的方向特征通过角度量化值、上下方向量化值、左右方向量化值以及象限量化值进行表征;所述起点和终点的位置特征分别通过横坐标和纵坐标在预设空域的量化值进行表征;
微码流匹配模块,用于将所述微码流与词库中的单词轨迹提取的微码流进行动态规划求微码流之间的相似度,并通过模式匹配算法匹配检索,输出检索结果。
可选地,所述识别系统还包括特征提取及筛选模块,用于提取所述滑动轨迹数据中坐标变化量符号发生变化的点、起点和终点、以及抬笔点中的部分或全部作为初级特征点,并筛选所述初级特征点。
可选地,所述识别系统还包括预处理模块,用于对获取的滑动轨迹数据进行预处理。
可选地,所述识别系统还包括字符串匹配模块,用于将所述手写字符串的微码流与词库中的字符串提取的微码流进行动态规划求微码流之间的相似度,并通过模式匹配算法匹配检索,输出检索结果。
可选地,所述识别系统还包括叠写或连写拆分模块,用于将用户手写输入的叠写或连写数据拆分为对应的手写字符串。
本发明的有益效果:
本发明所提出的手写输入方法及系统,通过对手写输入的笔迹流进行微码描述,进而对微码特征比较后输出识别结果,能够快速精确的识别出用户的手写内容,识别正确率高、识别速度快。
附图说明
附图1为本发明手写输入方法的单字识别流程示意图;
附图2为本发明方向特征的量化示意图;
附图3为本发明手写输入方法的滑动轨迹数据筛选流程示意图;
附图4为本发明第一实施例手写输入单字的初始滑动轨迹数据示意图;
附图5为本发明第一实施例中滑动轨迹数据的第一筛选结果示意图;
附图6为本发明第一实施例中滑动轨迹数据的第二筛选结果示意图;
附图7为本发明第一实施例中坐标特征的量化示意图;
附图8为本发明第一实施例中微码编码结果示意图;
附图9为本发明手写输入方法的字符串识别流程示意图;
附图10为本发明第二实施例手写输入字符串的初始数据示意图;
附图11为本发明第二实施例中将手写输入字符串表征为矩阵的示意图;
附图12为本发明手写输入方法的叠写或连写数据拆分流程示意图;
附图13为本发明第三实施例手写输入叠字的初始数据示意图;
附图14为本发明第三实施例中叠字拆分示意图;
附图15为本发明第三实施例中拆分路径构建示意图;
附图16为本发明第三实施例中基于手写模式剪枝示意图;以及
附图17为本发明手写输入系统的结构框架流程示意图。
具体实施方式
本发明通过如下实施方式对本发明进行详细说明。但本领域技术人员应了解,下述实施方式不是对本发明保护范围的限制,任何在本发明基础上做出的改进和变化,都在本发明的保护范围之内。
下面结合附图和实施例对本发明作进一步说明。
参照附图1所示,为本发明手写输入方法的单字识别流程示意图,具体包括如下步骤:
S101,每隔预设时间间隔采样触屏位置,获取输入的滑动轨迹数据。
具体地,本发明基于手写输入的方式实现,其目标输入硬件设备一般是电阻式、电容式或电磁式触摸输入屏,根据触摸输入屏的硬件特性,其每隔一段时间(如500ms)对当前滑动位置进行采样,记录当前手指的移动位置(X,Y,P),其分别为该位置的横坐标,纵坐标和压力值,其中P压力值代表该位置有无抬笔。当完成一个输入滑动轨迹,数据采集模块将滑动轨迹数据的结果上传到手写输入的识别系统,由系统对该滑动轨迹数据进行处理及识别。
S102,基于滑动轨迹数据将手写输入的滑动轨迹分解为多个弧段。
具体地,将手写输入所记录的位置点即滑动轨迹数据点连接成线,形成手写输入的笔迹,称之为手写输入的滑动轨迹。任意一种手写输入的滑动轨迹,都可以分解成由弧段构成,弧是滑动轨迹的最小单位。本发明中,基于滑动轨迹数据将滑动轨迹分解为多个弧段,弧段的数量根据滑动轨迹数据的数量来确定,一般而言,若滑动轨迹数据为N个,则可以将滑动轨迹分解为N-1个弧段。
S103,对每一个弧段分别通过起点至终点的方向特征、起点和终点的位置特征以及终点的压力特征进行微码描述。
具体地,可以对每一个弧段通过定义一些属性对其进行描述,这些属性的集合,称之为一段弧的微码描述,简称微码。本发明中,主要通过起点至终点的方向特征、位置特征以及终点的压力特征这几个属性对每一个弧段进行微码描述。
更具体地,方向特征是指该段弧由起始位置至终点位置所确定的方向。本发明中,将方向特征通过角度进行量化。
首先,通过算式θ = atan2(△Y,△X) 计算角度θ,其中,△X = X(start) –X(end),△Y = Y(start) –Y(end) ,即△X为起点与终点横坐标的差值,△Y为起点与终点纵坐标的差值。计算求得的角度为-π ~ π之间,为了便于显示用角度数表示(即-180 ~ 180度)。
其次,对θ量化成8个方向,每个方向45度,分别用0~7表示,如附图2所示,为本发明方向特征的量化示意图,其中,虚线为两个角度之间的量化分界线。对应的角度范围如下:当量化值为0时,角度范围为[-22.5~22.5),当量化值为1时,角度范围为[22.5~67.5),当量化值为2时,角度范围为[67.5~112.5),当量化值为3时,角度范围为[112.5~157.5),当量化值为4时,角度范围为[157.5~-157.5),当量化值为5时,角度范围为[-157.5~-112.5),当量化值为6时,角度范围为[-112.5~-67.5),当量化值为7时,角度范围为[-67.5~-22.5)。
由于将方向特征仅通过角度量化会带来量化误差,为了消除部分误差并且获取更多的方向信息,优选地,本发明还进一步对方向特征进行多尺度量化。具体实施时,将方向特征的8个量化值在直角坐标系中又可以具体量化为:上下方向、左右方向以及4个直角坐标象限方向这三种特征,这些特征也均可以分别用量化值表示,例如可以将上下左右方向特征以及象限量化特征分别用0~3四个量化值表示。在将方向特征分别通过角度量化值、上下方向量化值、左右方向量化值以及象限量化值进行表征后,就可以将这些量化值在计算机中以二进制进行表示,如角度量化的8个量化值可以以3位二进制表示,上下左右方向特征以及象限量化特征的4个量化值分别可以以2位二进制表示。优选地,上下左右,以及四个象限特征可通过8个方向特征简单解析求得,因此可以将这几种特征隐藏于8个方向特征中,不需要对它们分别存储。
更具体地,起点和终点的位置特征分别通过横坐标和纵坐标在预设空域的量化值进行表征。其中,空域的大小可根据需要设定,例如可以为4x4空域,或者5x5空域等,本发明通过空域对位置特征进行量化,具体实施时,根据预设的空域大小不同,坐标量化值也有所不同。本发明优选采用4x4空域实现,在4x4空域中,将起点和终点坐标分别量化成4个量化值,即起点的横坐标X、纵坐标Y各自分别用0~3四个量化值表示,终点的横坐标X、纵坐标Y也各自分别用0~3四个量化值表示。因此,在4x4空域中,起点有4x4=16种可能位置,同样终点也有16种可能位置。在忽略微码曲度的情况下,一个微码由起点和终点位置唯一确定,那么起点到终点就有16x16=256种可能,需要8位二进制表示。
为了降低量化误差,以及获取更多空域信息,本发明采用多尺度描述的方式。例如将4x4空域中间的横向、纵向按相对位置又可以分成3个2x2量化空域,它们也可以作为一种位置特征对位置关系进行更详细的描述。同理,每一种2x2空域划分中从起点到终点有2x2x2x2=16种可能,需要4位二进制表示。优选地,每一种2x2空域划分特征可以根据4x4空域的坐标量化特征解析求得,因此,也无需对它们分别存储。
更具体地,终点的压力特征代表在该终点位置有无抬笔,其压力值可以在获取笔迹流的时候获取得到。本发明中,抬笔用0表示,压笔用1表示,即终点的压力特征可以用1位二进制表示。
综上所述,三种微码特征中,起点至终点的方向特征为8个量化值,需要3bit,终点压力值为2个量化值,需要1个bit,起点坐标特征为4个量化值,需要2个bit,终点坐标特征为4个量化值,需要2个bit,因此,一共有8x2x4x4=256个微码,需要一个字节的存储空间。其中,每一个微码由17维的整数值表示,其中起点到终点方向占4维,分别为8个方向量化特征fo、上下方向量化特征fo1、左右方向量化特征fo2和象限量化特征fq共4维,终点压力值fp占1维,坐标起始点与终点位置占12维,分别为起点量化值fpos、终点量化值fpoe、起点到终点量化值fse11、1:1二分量化值(fs2、fe2、fse22)、1:2二分量化值(fs3、fe3、fse33),2:1二分量化值(fs4、fe4、fse44),共计12维。其中,所有坐标量化特征都可以由fpos,fpoe简单解析得到。如fse11=fpos+4*fpoe,fse22=fs2+2*fe2,fse33=fs3+2*fe3,fse44=fs4+2*fe4,其中,当fpos为0时,fs2,fs3,fs4均为0,当fpos为1时,fs3为1,fs2,fs4分别为0,当fpos为2时,fs2,fs3为1,fs4为0,当fpos为3时,fs2,fs3,fs4均为1。同理,当fpoe为0时,fe2,fe3,fe4均为0,当fpoe为1时,fe3为1,fe2,fe4分别为0,当fpoe为2时,fe2,fe3为1,fe4为0,当fpoe为3时,fe2,fe3,fe4均为1。
S104,将滑动轨迹的微码流与词库中的单词轨迹提取的微码流进行动态规划计算微码流之间的相似度。
由上一步骤可知,将弧段通过微码量化描述后,共计有256个微码。本步骤中,首先对该256个微码进行编码,计算方式如下:codes = fo + (fp<<3) + (fpos<<4) + (fpoe<<6),其中,fo代表微码的方向量化值,fp代表终点压力量化值,fpos代表微码起始位置量化值,fpoe代表终点位置量化值。计算出的微码值在0~255之间,即一个微码可以用0~255之间的整数进行表征。例如:fo = 5,fp = 1,fpos =3,fpoe=2,那么这个微码就用5+8*1+16*3+64*2=189表示。
在将微码进行编码后,就可以通过定义两个微码之间的距离,实现对两个微码之间的相似度度量。在定义两个微码之间的距离时,如果两个微码相同则距离d = 0,如果不相同,他们之间的距离代价并不是都一样,可自定义,例如都取1,或都取2。17维特征中,每一维的特征对微码之间的区分度不一样,用一个代价向量W=[w0 w1 w2 w3…..w14 w15w16]表示。而对于任两个微码之间的每一维之间的距离代价记为D=[d0 d1d2d3…..d14d15d16],任意两个子维度之间的距离代价d可以独自定义。例如两个微码:179=[3 011 1 0 1 3 2 1 1 3 1 1 3 1 0 1],238=[6 1 14 3 1 0 2 3 1 1 3 1 1 3 0 1 2],d0表示两个第一维的距离代价,一个是处于第三个量化角,一个处于第六个量化角,如果定义处理相同量化角的代价为0,相差一个量化值的代价为1,相差大于1个量化值代价为2,那么这里,6-3的绝对值为3,所以d0=2。而第二维代表是否压笔,微码179中的第二维为0代表抬笔,表示一个书写过程的自然断开,微码238中的第二维值为1,代表在终点处没有自然抬笔,而是人为断开。这个距离代价例如定为4,那么d1=4。因此最后两个微码的距离总代价由Cost=<W,D>内积得到。由于微码空间只有256个,每一个特征都可以穷举,因此可以离线计算好任意两个微码之间的代价,或者也可以在程序初始化时提前计算,在匹配微码流的时候,比较两个微码相似度时可以直接查表,减少计算开销。
在计算出两个微码之间的距离代价即相似度之后,即可以实现对两个微码流之间的相似度度量。由于每一段手写笔迹流,能拆分成的微码流不一定一样长,在度量两个不一样长的序列中,DTW算法以及其改进算法常应用于这些场合中。本发明通过DTW算法计算待识别的笔迹流提取的微码流,与词库中的笔迹流提取的微码流进行DTW距离计算。对于两段笔迹流提取的微码流code1,code2,其DTW匹配代价dist=DTW(code1,code2),一般相同的手写字其拆分成的微码流个数相差不大,因此再加上微码流长度的惩罚项,最终两个微码流的距离总代价表示为:Dist = DTW(code1,code2) + λ*abs(n1-n2),其中λ为惩罚因子,n1,n2分别为两个笔迹流的微码个数(微码流长度),特别地,n1,n2不消耗存储空间。本发明中DTW算法属于一种常见的距离计算方法,此处不再详述。
S105,通过模式匹配算法匹配检索,输出检索结果。
通过上一步骤计算出微码流的距离总代价之后,对于词库中的匹配结果,进一步可以通过模式匹配算法找到与词库中笔迹流最相似的匹配结果。该模式匹配算法可以是kNN算法或者KNN算法的改进算法。如采用KNN算法具体实施时,如果找到的结果距离都比较大,且最小的距离Dist>n,就用最近邻代替k近邻,其中,n为待匹配的微码流长度。本发明中模式匹配算法或者KNN算法及其改进算法也属于常规的匹配计算方法,此处不再详述。
本发明优选地,在将滑动轨迹分解为多个弧段之前,还包括对滑动轨迹数据进行预处理,包括:提取滑动轨迹数据中坐标变化量符号发生变化的点、起点和终点、以及抬笔点中的部分或全部作为初级特征点,并筛选该初级特征点。
具体地,滑动轨迹数据中坐标变化量符号发生变化的点,是指X坐标或Y坐标变化量符号发生变化的点,即X、Y坐标应分别满足如下条件:
△X1 = Xt(p) – Xt-1(p);△X2 = Xt+1(p) – Xt(p);△X1*△X2<=0;abs(△X1)+abs(△X2)>0;
△Y1 = Yt(p) – Xt-1(p); △Y2 = Yt+1(p) – Yt(p);△Y1*△X2<=0; abs(△Y1) +abs(△Y2)>0;
滑动轨迹数据的起点和终点分别指滑动轨迹数据的起笔点和终笔点的位置,可通过检测第一个采样数据和最后一个采样数据获取。滑动轨迹数据中的抬笔点,是指滑动轨迹数据压力值发生变化的点,可通过检测压力值的变化获取,例如正在手写时,表示有压笔,压力值为1,当手写完成后抬笔,此时压力值变为0,因此压力值变为0的这个点即是抬笔点的位置。值得注意的是,滑动轨迹数据的抬笔点和终点有可能会产生重合,即当抬笔发生在手写完成时,抬笔点就是终点。
基于上述方式提取出的数据点,能够有针对性的代表手写输入的滑动轨迹。具体实施时,可提取这三种方式中的部分或全部作为初级特征点,例如只提取X坐标或Y坐标变化量符号发生变化的点作为初级特征点,本发明优选地,提取这三种方式中的全部作为初级特征点,进而可以依据提取出的初级特征点将滑动轨迹分为多个弧段。
在基于上述方式提取到初级特征点以后,本发明优选地,还对所提取到的初级特征点进行筛选。具体地,参照附图3所示,筛选初级特征点时包括如下步骤:
S301,去掉初级特征点中重复的点,并按照从小到大排序。
通过上述方式提取出来的初级特征点,有可能存在重复的现象,因此,应先将这些重复的点去除,并将这些提取出来的初级特征点按照从小到大的顺序排序。
S302,判断相邻初级特征点之间的距离是否小于第一距离阈值,并且相应横纵坐标差的绝对值与滑动轨迹数据最大横纵坐标比的和是否小于第二距离阈值,如是,执行步骤S303;如否,直接执行步骤S304。
其中,第一距离阈值和第二距离阈值的值可根据筛选的要求灵活设定,例如,可设定第一距离阈值为3,设定第二距离阈值为0.2。再以一组具体的数据为例,假设按照上一步骤筛选掉重复点后的初级特征点为pxy=[12 17 24 26 34 41 44],其中第三个候选点P3=24,代表笔迹流中的第24个点为候选点,下一个候选点p4=26,代表笔迹流中的第26个点为候选点。计算它们之间的位置距离为26-24=2<3,而且abs(X(26)-X(24))/Xmax+abs(Y(26)-Y(24))/Ymax=0.15<0.2,其中,Xmax,Ymax为最大x,y坐标。即这两个初级特征点满足位置距离小于第一距离阈值并且横纵坐标差的绝对值与滑动轨迹数据最大横纵坐标比的和小于第二距离阈值的条件,因此,可执行下一步骤S303。
需要说明的是,假设这两个条件中的任一条件不满足,即直接执行步骤S304。
S303,在两点之间所有的点选择一个角度最小的点作为候选特征点。
具体地,选择依据为,在这两个点之间所有的点之中,与第一个点的前一个点,和最后一个点的下一个点坐标夹角小的点。
例如,满足上一步骤条件的初级特征点24和26,它们之间所有的点为24,25,26,因此,在24,25,26,三点之间只选择一点为候选点。分别计算它们之中与第一个点的前一个点(即17),和最后一个点的下一个点(即34)坐标夹角小的点,比如夹角为别为120.1,115.5,130.8,那么选择第二个点25。此时pxy=[12 17 25 34 41 44]。
S304,去掉相邻三点之间夹角大于第一角度阈值的点。
具体地,本步骤主要是筛选掉一些组成夹角过大的初级特征点,可分别通过两个矢量之间的夹角来计算。如上一步骤中筛选得到的初级特征点为pxy=[12 17 25 34 4144],则第二个特征点17和前后两个特征点的夹角分别为:vect1x=X(17)-X(12),vect1y=Y(17)-Y(12);vect2x = X(25)-X(17), vect2y=Y(25)-Y(17)。矢量vect1,vect2的夹角即为所需计算的夹角。
需要说明的是,如果要计算第一个候选点的夹角时,将滑动轨迹数据的起点作为第一个点,或是如果要计算最后一个候选点的夹角时,将滑动轨迹数据的最后一个点即终点作为末尾点进行计算。如vect1x=X(1)-X(12),vect1y=Y(1)-Y(12);vect2x = X(17)-X(12), vect2y=Y(17)-Y(12),矢量vect1,vect2的夹角即为第一个候选点分别与前后两个点的夹角。
此外,第一角度阈值的值也可根据筛选的要求灵活设定,例如,可设定第一角度阈值为150度,当计算出来的夹角大于150度时,删除该特征点,否则就保留该特征点。如通过上面的计算方式,可计算得出初级特征点为pxy=[12 17 25 34 41 44]的夹角分别为:51.0563,135.7538,64.2210,66.1339,129.7839,65.2085,角度均小于第一角度阈值,因此都保留pxy=[12 17 25 34 41 44]。
S305,去掉夹角在第二角度阈值和第三角度阈值之间的点。
具体地,第二角度阈值和第三角度阈值之间的点,称为不可靠点,因此,本步骤主要是去除这些不可靠点,保证所筛选得到的初级特征点具有稳定性。第二角度阈值和第三角度阈值的值可根据筛选的要求灵活设定,例如设定第二角度阈值为125度,第三角度阈值为150度,则筛选时,其筛选条件为:去掉角度在125~150之间的点。
优选地,在去掉夹角在第二角度阈值和第三角度阈值之间的点之后,需重新计算相邻点的夹角,若夹角变小,则去掉该点,否则不去掉。例如:上一步骤中的第三个点和第五个点刚好都满足条件,因此被去掉,筛选后的初级特征点为pxy=[12 17 34 44]。
S306,计算相邻两个特征点之间横纵坐标差的绝对值与滑动轨迹数据最大横纵坐标比的和是否小于第三距离阈值,如是,执行步骤S307;如否,筛选结束。
具体地,假设通过上一步骤筛选后的初级特征点为M个,再加上滑动轨迹数据的起点和终点,则一共可以将滑动轨迹数据分解为M+1个微码段,本步骤的主要目标是删除掉一些长度太小的微码,可通过计算特征点横纵坐标差的绝对值与滑动轨迹数据最大横纵坐标比的和进行判断,若其小于第三距离阈值,执行步骤S307进行进一步筛选;若不小于第三距离阈值,则无需再进行筛选,筛选过程结束。
此外,第三距离阈值的值也可根据需要设定,如可设定为0.2,则与步骤S302中第二距离阈值的值相同,或者也可设定为其他数值。
S307,假设去掉两个特征点,重新计算去掉两个特征点之后的相邻特征点之间的夹角,如夹角变大并小于第四距离阈值,或者夹角变小,则在两个特征点之间选择一个夹角最小的点。
具体地,在满足步骤S306的基础上,假设去掉这两个满足条件的特征点,重新计算去掉两个特征点之后的相邻特征点之间的夹角,计算方式同步骤S304。若计算出来的夹角变大,并小于第四距离阈值,或者夹角变小,则在该段的起始点到终点之间只选择一点,选择依据为这两个特征点之间夹角最小的点。此外,第四距离阈值的值也可根据需要设定,如设定为10,因此判断当计算出来的夹角变大,并且小于10时,则在这两个特征点之间选择一个夹角最小的点。
需要说明的是,如果刚好是微码的第一段,则去掉终点,或者刚好是微码的最后一段,去掉起点。例如:如果最后一点44(也即最后一个微码的起点)到末尾50之间距离太短则去掉起点,也就是44那点。
本发明通过对提取的初级特征点进行筛选,依据筛选后的滑动轨迹数据将滑动轨迹分解为多个微码段,这些微码段能够有象征性的代表滑动轨迹,提高了微码的识别速度和正确率。
本发明优选地,在提取初级特征点之前,还包括预处理滑动轨迹数据步骤,包括:去掉滑动轨迹数据中重复的数据、将滑动轨迹数据的坐标位置对齐、平滑滑动轨迹数据的滤波、以及将滑动轨迹数据归一化至统一的高度和宽度中的部分或全部。
具体地,本发明中的对齐操作主要是把滑动轨迹数据的坐标位置对齐,通过下式实现:Xa = X – min(X) ,Ya = Y – min(Y) ,其中,min(X)为滑动轨迹数据中横坐标最小值,min(Y)为滑动轨迹数据中纵坐标最小值。将滑动轨迹数据的坐标位置对齐,即是对滑动轨迹数据进行裁剪(平移)操作,把滑动轨迹数据的区域裁剪为最小区域范围,通过对齐操作可以提高滑动轨迹数据的识别和搜索速度。值得注意的是,在对齐之前,应该先去掉滑动轨迹数据中重复的数据点。
具体地,归一化是指把原来各不相同的滑动轨迹数据统一到统一高度和宽度。由于常见输入的文字都是长高宽矮,因此在归一化过程中,较多地对文字进行横向拉伸处理,使其达到统一高度和宽度。归一化计算的方程如下:Xt = Xa / (max(X)-min(X) + ϵ), Yt= Ya / (max(Y)-min(Y) + ϵ) ,其中,ϵ是一个很小的正数,引入是为了避免分母除0,本发明中取ϵ=le-6,即1×10的-6次方;Xa,Ya分别为对齐操作后的滑动轨迹数据中的每一点坐标,将其除以笔迹流中X,Y的最大值减去最小值的差值,这样就把笔迹流线性归一化到0~1之间。
优选地,将滑动轨迹数据进行对齐归一化之后,为了便于显示,还可以将横纵坐标分别乘以255,以平滑显示滑动轨迹。
将滑动轨迹数据进行对齐并归一化处理后,这些数据均具有相同的大小,有利于所提取的初级特征点具有可比性,减少处理时间,提高了识别的准确率。
优选地,在预处理滑动轨迹数据之前,还包括将滑动轨迹数据进行归一化的步骤,即完成一个手写输入滑动轨迹之后,数据采集模块首先将原始滑动轨迹的位置数据归一化为256x256点阵数据,并将归一化的滑动轨迹数据结果上传到手写输入的识别系统,由系统对该滑动轨迹数据进行处理及识别。将滑动轨迹数据归一化为256x256点阵的数据,能够屏蔽输入设备分辨率的差异,减少系统的数据处理负担,提高系统的处理速度,还能够在满足识别算法需求的基础上,减少数据量的传输。
本发明优选地,还可以对微码特征进行解析式压缩。例如从起点到终点8个方向特征,上下左右,以及四个象限特征中,后两种特征可以通过第一种特征简单解析求得,因此可以将这两种特征隐藏于第一种特征中,不需要对它们分别存储,从而节省存储空间,以及减少微码数量,因此,从起点到终点方向描述只需要3个bit存储,解析过程如下表1所示,其中,量化值可自定义。
表1
起点、终点方向量化值 |
上下 |
左右 |
象限 |
0 |
0 |
0 |
0 |
1 |
0 |
0 |
0 |
2 |
0 |
1 |
1 |
3 |
0 |
1 |
1 |
4 |
1 |
1 |
2 |
5 |
1 |
1 |
2 |
6 |
1 |
0 |
3 |
7 |
1 |
0 |
3 |
同理,为了节省存储空间以及减少微码数量,对微码起点,终点的位置进行有损压缩。把256种位置关系压缩成16种位置关系。通过对原始4x4空域起点、终点位置进行编码。编码方向如下表2所示。假设坐标原点位于左上角,编码方式为:indse= px + 4*py,其中,indse为空域4x4的位置索引,如下表3所示,px,py代表起点或终点的x、y坐标量化值。
表2
12 |
13 |
14 |
15 |
8 |
9 |
10 |
11 |
4 |
5 |
6 |
7 |
0 |
1 |
2 |
3 |
对起点位置按fpos=mod(indse,4)求余进行编码,也就是每一列为一个量化值,对终点按取整fpoe=indse/4进行编码,也就是每一行为一个量化值。得到结果分别如下表3和表4所示。
表3(起点fpos)
0 |
1 |
2 |
3 |
0 |
1 |
2 |
3 |
0 |
1 |
2 |
3 |
0 |
1 |
2 |
3 |
表4(终点fpoe)
0 |
1 |
2 |
3 |
0 |
1 |
2 |
3 |
0 |
1 |
2 |
3 |
0 |
1 |
2 |
3 |
因此从起点到终点就有16种可能,编码方式如下:fse11=fpos+4*fpoe:0~15,其中,fse11代表起点到终点量化值,可以用4个bit存储。由前所述,所有在上一节中的空域划分特征都可以由fpos,fpoe简单解析得到。
下面通过一个具体的第一实施例来对本发明单字手写输入的识别方法进行进一步说明。
例如,手写输入数据“8”,数据采集模块每隔500ms采集一次数据,获取手写笔迹流,将其归一化为256x256的数据之后,系统接收到的滑动轨迹数据流如下所示,一共51个数据点:
【X】 【Y】 【P】
32 151 1
48 147 1
60 143 1
73 137 1
93 129 1
108 120 1
126 110 1
143 99 1
176 79 1
190 65 1
203 54 1
210 44 1
205 30 1
196 25 1
187 21 1
172 18 1
136 17 1
119 21 1
96 25 1
80 30 1
66 36 1
55 43 1
48 51 1
47 57 1
54 64 1
63 72 1
73 79 1
90 88 1
104 96 1
126 108 1
139 118 1
149 129 1
163 141 1
174 155 1
178 167 1
174 178 1
164 188 1
154 196 1
135 205 1
118 210 1
94 214 1
76 217 1
55 215 1
43 210 1
38 200 1
41 188 1
63 166 1
86 146 1
114 127 1
133 115 1
140 111 0
所采集到的滑动轨迹数据流在手写输入屏上的显示图像如附图4所示。
在获取到滑动轨迹数据之后,首先对这些数据进行对齐操作,例如以其中的一部分数据为例,如下表5所示,为原始滑动轨迹数据。
表5
X |
32 |
48 |
60 |
73 |
93 |
108 |
126 |
143 |
176 |
190 |
Y |
151 |
147 |
143 |
137 |
129 |
120 |
110 |
99 |
79 |
65 |
根据公式Xa = X – min(X) ,Ya = Y – min(Y)对滑动轨迹数据进行对齐操作,其中,min(X)=32,min(Y)=65,经过对齐计算后输出的结果如下表6所示:
表6
X |
0 |
16 |
28 |
41 |
61 |
76 |
94 |
111 |
144 |
158 |
Y |
86 |
82 |
78 |
72 |
64 |
55 |
45 |
34 |
14 |
0 |
根据公式Xt = Xa / (max(X)-min(X) + ϵ), Yt = Ya / (max(Y)-min(Y) + ϵ),对滑动轨迹数据进行归一化,其中:max(X)=190;min(x)=32;max(Y)=151;min(Y)=65,经过归一化计算输出的结果如下表7所示:
表7
X |
0 |
0.1013 |
0.1772 |
0.2595 |
0.3861 |
0.4810 |
0.5949 |
0.7025 |
0.9114 |
1.0 |
Y |
1.0 |
0.9535 |
0.9070 |
0.8372 |
0.7442 |
0.6395 |
0.5233 |
0.3953 |
0.1628 |
0 |
经过上述预处理之后,从滑动轨迹数据中提取坐标变化量符号发生变化的点、起点和终点、以及抬笔点中的部分或全部作为初级特征点,如上面的“8”字的滑动轨迹数据,去掉重复点后,一共50个点,在将滑动轨迹数据的起点和终点提取为初级特征点后,分别计算横纵坐标变化量符号发生变化的点(其中,起始点和终点默认为必须的特征点,无需计算),例如通过计算X坐标变化量符号发生变化的点,得到初级特征点px=[12 24 34 4144];同样计算Y坐标变化量符号发生变化的点,得到初级特征点py=[17 26 41],其中,p为位置索引。
将得到的初级特征点去掉重复的位置,并按照从小到大排序,得到pxy=[12 17 2426 34 41 44]。 进一步根据前述步骤S302~307对这些初级特征点进行筛选,假设筛选后得到的最终特征点为pxy=[12 17 34 44],这些最终特征点加上滑动轨迹数据的起始点和终点,即为滑动轨迹数据的最终筛选结果,如附图5所示,为本发明第一实施例中滑动轨迹数据的第一筛选结果示意图,其中,星型符号所标示的点即为所筛选出来的滑动轨迹数据即最终特征点,这些最终特征点也是任意一段微码的起始点或终点,箭头代表微码的方向,长度代表微码的弦长。依据这些筛选后的滑动轨迹数据所组成的微码,能够有象征性的代表滑动轨迹,提高了微码的识别速度和正确率。
具体实施时,如果调节微码的长度,或者夹角的阈值,滑动轨迹数据的微码数会有所变化。如附图6所示,为本发明第一实施例中滑动轨迹数据的第二筛选结果示意图,其中,两个正方形的点,即为增加的最终特征点。即如果将微码夹角放宽、长度阈值减小,微码数会增多。因此,具体实施时,微码数的选择比较灵活,可根据需要选择或调节。
将滑动轨迹数据进行筛选后,可基于筛选后的滑动轨迹数据将滑动轨迹分解为多个弧段,如通过上述步骤筛选得到的最终滑动轨迹数据为8个,则可以将滑动轨迹分解为7个弧段,进而对每一个弧段分别通过起点至终点的方向特征、起点和终点的位置特征以及终点的压力特征进行微码描述。
如附图7所示,为本发明第一实施例中坐标特征的4x4空域量化示意图,即先将起点终点坐标归一化到各自0~1,然后分别量化为4个量化值,即分别为起点X、Y坐标量化值,终点X、Y坐标量化值。
将微码通过起点至终点的方向特征、起点和终点的位置特征以及终点的压力特征进行微码描述后,就可以对微码特征进行编码,如附图8所示,为本发明第一实施例中微码编码结果示意图,笔迹流字符“8”被分成7个微码组成一个微码串“201-251-237-15-61-11-129”表示,其中,字母A~G表示分段顺序,数字0~15数字代表微码起始点和终点在笔迹流相对坐标中的位置,X、Y坐标上的0~3分别表示起始位置所处的列数和行数。如图中第一段微码A:起点位置为“4”,终点位置为“15”,从起点到终点的方向与X轴夹角约为45度,属于第1个量化值,第一笔的终点处没有抬笔,所以fp =1,起点“4”在第一行:fpos =4%4求余=0;终点“15”在第三列:fpoe =15/4取整=3。所以微码编码为:code=1+1*8+0*16+3*64=201,其它的微码编码也通过类似方式得到。值得注意的是,即使微码的长度和方向相似,但因位置不一样,所以编码结果也不一样,如附图中8的B段微码与F段微码所示,二者的长度和方向相差不大,但位置不同,所以B段的微码编码结果为251,而F段的微码编码结果为11。
在将微码进行编码后,就可以通过前面描述的方法定义两个微码之间的距离,实现对两个微码之间的相似度度量,在计算出两个微码之间的距离代价即相似度之后,即可以实现对两个微码流之间的相似度度量,进而通过模式匹配算法匹配检索,输出检索结果。
本发明所提出的手写输入的识别方法,除了识别手写输入的单字以外,还可以在基于单字识别的基础上进一步识别手写输入的字符串,该字符串主要为通过数字和/或字母表征的字符串,如附图9所示,为本发明手写输入方法的字符串识别流程示意图,主要包括如下步骤:
S901,将手写字符串表征为矩阵。
具体地,首先对0-9,A-Z进行编码成:0-35(其中0-9编码为:0-9,A-Z编码为:10-35,不区分大小写)。一般来说,手写输入的数字和/或字母的字符有可能被识别为数字,也有可能被识别为字母,因此,为了保证识别的准确率,一般对数字和字母均需进行编码匹配,当然,特殊情况下,例如仅需对数字或仅需对字母进行匹配,则仅需对数字或者仅需对字母编码即可,无需对数字和字母全部进行编码。本发明优选地将数字和字母全部进行编码。
将手写字符串表征为矩阵后,矩阵的行与数字和/或字母编码为数字的编码数相对应,矩阵的列与手写字符串的长度相对应,矩阵中的第i行第j列元素表示手写字符串中第j个手写字符识别成编号为i的字符的匹配度百分数,每列和为100%。
以一个具体的第二实施例为例,如附图10所示,为本发明第二实施例手写输入字符串的初始数据示意图,附图11为本发明第二实施例中将手写输入字符串表征为矩阵M的示意图,该矩阵M为35行4列,每一行分别代表数字和字母编码后的编号,每一列分别代表字符识别成各编号的匹配度百分数,例如矩阵中的第1行第1列表示手写字符串中第1个手写字符识别为第1个编号即L的匹配度百分数,如为70%,矩阵中的第2行第1列表示手写字符串中第1个手写字符识别为第2个编号即C的匹配度百分数,如为20%,第一列所有的匹配度百分数之和为100%,以此类推,可以将每一个手写输入字符串识别为各种数字和/或字母的编号的匹配度百分数通过矩阵M表征出来。
S902,基于匹配度计算手写字符串与词库中字符串的最长公共子串。
具体地,通过上述矩阵表征出来的手写字符串,其中包括匹配度的百分数。本发明中,基于匹配度计算最长公共子串,判断的方法为:当匹配度大于第一预设阈值,则认为匹配,否则,认为不匹配。其中,第一预设阈值的值可根据需要灵活设定,例如本发明将其设置为25。
以附图10中的手写字符串为例,LZJD与库中串CIJP求最长连续公共子串时,先在矩阵中找第一列字符C的编码12,对应该位置的匹配度的百分数为20%,即匹配度的值为20,小于25故不匹配,继续查找第二列字符I对应的匹配度,匹配度为9,小于25故不匹配。继续依次查找第三列J,第四列P分别对应的匹配度值为:60,45,均大于20,所以最长公共连续子串为JP长度为2,位置都在串尾。若与库中LZJD求最长连续公共子串时,则最长公共子串长度为4,均出现在串首。
S903,基于匹配度和第二预设阈值的差值计算匹配误差。
具体地,矩阵M中所保存的是将每一个手写字符识别为编号为i的字符的匹配度,其值为0~100,因此,本发明优选地,将第二预设阈值的值设定为100。在计算匹配误差的时候,本发明采用累积误差的方式,通过算式100-M(i,j)进行计算,其中M(i,j)为第j个字符识别为编号为i的字符的匹配度。值得注意的是,若匹配度M(i,j)大于第一预设阈值,则以第二预设阈值进行表征;若匹配度M(i,j)小于第一预设阈值,则以真实值表征。
仍以附图10中的手写字符串为例,手写字符串与数据库中的字符串CIJP的第二个字符I的匹配度为9,判断其小于第一预设阈值25,则以真实值9进行表征,所以其匹配误差为:100-M(i,j)=100-9=91;手写字符串与第三字符J的匹配度为60,判断其大于第一预设阈值25,因此,按第二预设阈值即100进行表征,故匹配误差为:100-100=0。
S904,计算手写字符串与词库中的字符串的总体匹配代价,将手写字符串的微码流与词库中的字符串提取的微码流进行动态规划求微码流之间的相似度。
具体地,可通过算式(min(m,n)-LCS)+Edit_dist+distpos+ λ1*abs(m-n)计算手写字符串与词库中字符串的总体匹配代价,从而计算出手写字符串的微码流与词库中的字符串提取的微码流之间的相似度。其中,m、n分别为待匹配手写字符串与词库中字符串长度,LCS为最长连续公共子串,Edit_dist为匹配误差,distpos为最长公共子串在两个匹配串中的位置代价,位置分为同时出现在串首、或串尾、或串中、或出现的位置不相同几种情况,每种情况都有不同的匹配度惩罚代价值,λ为惩罚因子。
S905,通过模式匹配算法匹配检索,输出字符串匹配的检索结果。
基于前述步骤计算出手写字符串与词库中字符串的总体匹配代价或相似度后,对于词库中的匹配结果可通过模式匹配算法找到与词库中笔迹流最相似的前K种匹配结果,并输出该字符串匹配的检索结果显示给用户。具体地,该模式匹配算法可以是KNN算法或其改进算法。
本发明手写字符串的识别方法,先保留所有识别候选项,当要与词库中特定串匹配的时候,进行查询对比,既降低了匹配时间,又保留了匹配的准确率。
本发明所提出的手写输入的识别方法,除了识别手写输入的单字和字符串以外,还可以进一步识别手写输入的叠写或连写数据,即将叠写或连写数据进行拆分识别,其中,该叠写或连写数据主要为通过数字和/或字母表征的数据,如附图12所示,为本发明手写输入方法的叠写或连写数据拆分流程示意图,拆分时主要包括如下步骤:
S1201,从滑动轨迹数据的起点开始选择滑动窗口,其中,滑动窗口的长度为识别一个数字或字母的最大抬笔数。
具体地,本发明的叠写或连写数据拆分采用滑动窗思想,约定两个单独的字符之间有抬笔,字内笔画可连笔也可抬笔。这样就可以从起笔开始,选择一定抬笔数作为一个滑动窗口,比如纯数字可以选择2笔,数字和字母可以选择4笔,滑动窗口的长度即为识别一个数字或字母的最大抬笔数。一般来说,对于数字和字母的叠写或连写数据选取4次抬笔为一个滑动窗口足够识别,因此,本发明优选地,将滑动窗口的长度设置为4。
S1202,对滑动窗口中的笔画进行识别,基于笔画的识别代价选择候选拆分点。
具体地,选择候选拆分点的依据为若滑动窗口中笔画的识别代价小于第三预设阈值,在识别代价中选择前两种代价最小的识别结果作为候选拆分点;若滑动窗口中笔画的识别代价均高于第三预设阈值,只选择代价最小的识别结果作为候选拆分点。
以一个具体的第三实施例为例,如附图13所示,为本发明手写输入叠字的初始数据示意图;如附图14所示,为本发明第三实施例中叠字拆分示意图,每一笔正下方的数字代表笔画位置。
首先识别第一个滑动窗口,第一个滑动窗口中,滑动窗口的长度设置为4,因此需识别第1-4笔。在第一个滑动窗口中,首先识别第1笔,计算第1笔的识别代价。具体实施时,识别代价的计算基于前述单字识别的基础进行,即对该第1笔的笔画进行微码分段及描述,进而通过DTW算法动态计算出该笔画识别为某一单字的识别代价,判断识别代价是否小于第三预设阈值,若小于第三预设阈值,则在识别代价中选择前两种代价最小的识别结果作为候选拆分点,其中,第三预设阈值的值可根据需要设定,如设定为1。如本第三实施例中,第1笔可以识别成1或I的识别代价小于第三预设阈值,因此,选择这两种识别结果作为候选拆分点。因为1或I,再加上后继笔画还能识别成别的字母或数字,所以不能马上跳出滑动窗,继续识别由1-2笔组成的字符,1-2笔在数字与字母中识别代价过高,大于预设的最高识别代价,所以不能识别成一个数字或字母,此候选路径断开。继续识别第1-3笔,计算识别为A的代价最小,因此,第1-3笔识别为A的结果也可以作为候选拆分点,即本步骤中,将第一个笔画识别为1或I作为一个候选拆分点,将第1-3笔识别为A也作为一个候选拆分点,识别完成后,跳出该滑动窗口。
优选地,在对滑动窗口中的笔画进行识别时,若拆分点的置信度高于第四预设阈值,直接跳出滑动窗口。其中,置信度是指该拆分点的确信程度,其与识别代价相对应,识别代价越小,置信度越高,置信度可基于识别代价进行计算,如可以以识别代价的倒数进行表征;第四预设阈值是判断拆分点是否可信的标准,其值可根据需要设定,一般来说,第四预设阈值的值设置的越高,满足该条件的拆分点越可信。当判断到置信度高于第四预设阈值时,证明识别为该字的识别代价最小,该拆分点是可以足够确信的拆分点,因此,可以直接跳出滑动窗口,而不必对一个滑动窗口内的所有抬笔都识别一次,这样可大大降低识别次数。
优选地,在对滑动窗口中的笔画进行识别之前,还包括步骤:排除滑动窗口中,不可能为一个字的结束笔的抬笔。一般来说,数字和字母的结束笔的抬笔是固定的,可以统计出来,因此,可以在识别之前,排除掉一些不可能为一个字的结束笔的抬笔,如附图14所示,第11和第16笔画不可能为一个字的结束笔的抬笔,可以直接排除,这样可以提高识别的速度和准确率。
优选地,在选择滑动窗口时,若滑动轨迹数据的笔画数小于滑动窗口的长度,则滑动窗口的长度直接选择到滑动轨迹数据的笔画的最后一笔。如用户手写输入了一个叠写数据1和2,二者的笔画数之和为2,而滑动窗口的长度设定为4,因此,在1和2的笔画数之后,是无需识别的空域,因此,可以将滑动窗口的长度设置为2,直接选择到最后一个数据2的最后一笔,从而节省滑动窗口的识别时间。
S1203,滑动窗口顺序后移,继续对下一个滑动窗口中的笔画进行识别,基于笔画的识别代价选择候选拆分点。
第一个滑动窗口中的笔画识别完成后,滑动窗口顺序后移,继续对下一个滑动窗口中的笔画进行识别,即重复执行步骤S1202。
仍以第三实施例为例进行说明,第一个滑动窗口识别完成后,接着识别上述第1笔候选拆分点和第1-3笔候选拆分点后面的滑动窗口,第1笔识别为1或I后,则后面的四个笔画顺序组成一个滑动窗口,通过计算识别该四笔的识别代价都高于预设的最高识别代价,并且判断到前一个滑动窗口中识别为A时有两个候选拆分点,所以将第1笔候选拆分点的路径断开,接着识别第1-3笔后面的滑动窗口,又产生两个候选拆分点,即将第四笔识别为1或I,或者将第4-5笔识别为B,如此类推,最后,滑动窗口识别过程剩下的可行候选路径如附图15所示。
S1204,所有滑动窗口的候选拆分点构建形成多条路径,在多条路径中选择一条总代价最小的路径,该路径对应的识别结果就是叠写或连写数据对应的字符串。
具体地,如附图15所示,将所有滑动窗口的候选拆分点构建形成多条路径,如该图中,一共有2 x 2 x 3=12种可行路径可供识别,如果叠写的字符个数比较多时,或者识别串比较长时,那么候选字符串也成指数增长。基于前述所计算出的识别代价,在这些路径中选择一条总代价最小的路径,该路径对应的识别结果就是该叠写数据对应的字符串。
本发明优选地,在选择总代价最小路径之前,还包括步骤:判断手写输入的模式是数字模式或字母模式,若是字母模式,仅保留将手写输入的数据识别为字母的路径;若是数字模式,仅保留将手写输入的数据识别为数字的路径。如本第三实施例中,通过判别手写输入模式为字母模式,因此裁剪掉数字分支,如附图16所示,最后剩下的图结构中只有一条可行路径,所以它就是在字母模式下的最小路径,路径数量从指数级降到线性级,大大提高了叠写数据的识别速度。
基于本发明所提出的手写输入的识别方法,本发明还提出了一种手写输入的识别系统,如附图17所示,为该手写输入识别系统的结构框架流程示意图,其中,输入设备10用于用户手写输入字符,显示模块30用于显示检索结果给用户,即输入设备10和显示模块30分别用于用户与手写输入识别系统的人机交互。模块20中的子模块均属于手写输入识别系统的内部虚拟模块,用于实现对用户手写输入的字符的识别处理,具体包括:
数据采集模块,与输入设备通信连接,用于每隔预设时间间隔采样触屏位置,获取输入的滑动轨迹数据。具体地,用户通过输入设备的触摸屏,手写输入数据,数据采集模块用于每隔预设时间采样输入设备的触屏位置,获取用户输入的滑动轨迹数据。
分解模块,分别与数据采集模块和特征模块通信连接,用于基于滑动轨迹数据将手写输入的滑动轨迹分解为多个弧段。具体地,分解的弧段的数量根据滑动轨迹数据的数量来确定,一般而言,若滑动轨迹数据为N个,则可以将滑动轨迹分解为N-1个弧段。
特征描述模块,分别与分解模块和微码流匹配模块通信连接,用于对分解模块所分解出来的每一个弧段分别通过起点至终点的方向特征、起点和终点的位置特征以及终点的压力特征进行微码描述。其中,起点至终点的方向特征通过角度量化值、上下方向量化值、左右方向量化值以及象限量化值进行表征;起点和终点的位置特征分别通过横坐标和纵坐标在预设空域的量化值进行表征。
微码流匹配模块,与特征描述模块通信连接,用于将微码流与词库中的单词轨迹提取的微码流进行动态规划求微码流之间的相似度,并通过模式匹配算法匹配检索,输出检索结果。此外,微码流匹配模块还可以与显示模块通信连接,通过显示模块显示检索结果给用户查看。
优选地,本发明所提出的手写输入的识别系统还包括特征提取及筛选模块,用于提取滑动轨迹数据中坐标变化量符号发生变化的点、起点和终点、以及抬笔点中的部分或全部作为初级特征点。在提取到初级特征点以后,还包括对这些初级特征点进行筛选,通过筛选出其中夹角较小并且段比较大的点作为最终特征点。特征提取及筛选模块与分解模块通信连接,分解模块可以基于该提取出来的滑动轨迹数据即最终特征点将滑动轨迹分解为多个弧段。值得注意的是,筛选非必要的技术手段,即特征提取及筛选模块可仅提取初级特征点之后,即将这些初级特征点数据发送给分解模块,由分解模块基于这些数据将滑动轨迹分解为多个弧段。
优选地,本发明所提出的手写输入的识别系统还包括预处理模块,用于对获取的滑动轨迹数据进行预处理,包括:去掉滑动轨迹数据中重复的数据、将滑动轨迹数据的坐标位置对齐、平滑滑动轨迹数据的滤波、以及将滑动轨迹数据归一化至统一的高度和宽度中的部分或全部。
优选地,本发明所提出的手写输入的识别系统还包括字符串匹配模块,能够在单字识别的基础上,用于将手写字符串的微码流与词库中的字符串提取的微码流进行动态规划求微码流之间的相似度,并通过模式匹配算法匹配检索,输出字符串检索结果。
优选地,本发明所提出的手写输入的识别系统还包括叠写或连写拆分模块,用于将用户手写输入的叠写或连写数据拆分为对应的手写字符串。叠写或连写拆分模块分别与微码流匹配模块和字符串匹配模块通信连接。具体实施时,首先通过数据采集模块获取手写输入的叠写或连写数据,其次分解模块依据叠写或连写数据点将叠写或连写数据分解为多个弧段,特征描述模块对这些弧段进行微码描述,然后由叠写或连写拆分模块通过滑动窗口对叠写或连写数据进行拆分,将拆分后的候选字通过微码流匹配模块进行单字识别匹配,以此类推,进而对叠写或连写数据中的所有字符进行拆分识别匹配,最终识别出叠写或连写数据所对应的字符串,通过字符串匹配模块将其与词库中的字符串进行匹配。
本发明手写输入的识别系统还包括词库数据库,该词库数据库中保存了各种目标单字和字符串的微码流,用于与手写的字或字符串进行匹配。优选地,为了达到较好的识别效果,每个目标字或字符串在不同写法上(包括顺序,字体等)至少有10个以上的样本,可以增加识别的准确率。
本发明所提出的手写输入的识别方法及系统,主要应用于数字和/或字母的识别,能够对手写输入的基于数字和/或字母的单字、字符串或叠写连写数据,通过微码特征描述和比较后进行匹配识别,识别准确率高,识别速度快。