一种基于手写字符识别的验证方法及装置与流程

文档序号:11729740阅读:283来源:国知局
一种基于手写字符识别的验证方法及装置与流程

本发明属于图像识别技术领域,尤其涉及一种基于手写字符识别的验证方法及装置。



背景技术:

全自动区分计算机和人类的图灵测试(英语:completelyautomatedpublicturingtesttotellcomputersandhumansapart,简称captcha),俗称验证码,是一种区分用户是计算机和人的公共全自动程序。在captcha测试中,作为服务器的计算机会自动生成一个问题由用户来解答。这个问题可以由计算机生成并评判,但是必须只有人类才能解答。由于计算机无法解答captcha的问题,所以回答出问题的用户就可以被认为是人类。

现有验证码主要可以归类为3种:文字验证码、图片验证码、语音验证码。现有验证码技术的验证原理主要为:通过服务器端随机生成一组字符串,作为待验证信息,将上述随机字符串通过程序处理尽可能转化为人类能容易识别而计算机无法识别的信息(如图片或语音)作为参考验证码,将参考验证码通过浏览器端展示给用户识别,用户识别后在浏览器端通过鼠标或键盘事件(如鼠标点击、键盘输入)用字符向服务器端提交验证信息,服务器端通过判断提交的验证信息和待验证信息是否一致来区分用户是人或计算机,一致则判断用户为人,不一致则用户为计算机。

缺点或不足之处:现有验证码技术中,用户提交验证信息的操作是通过鼠标或键盘事件,提交验证信息的类型是字符;如图1为现有的验证码技术原理图。现有验证码技术中,没有让用户在指定区域用手写字符验证验证码的方法,该方法提交的验证信息的类型是手写字符的图片。现有验证码技术中,由于计算机可以轻易的模拟键盘和鼠标事件,同时计算机进行图片或语音验证码内容提取的技术也已非常成熟,通过视觉识别算法、语音识别算法,计算机可以轻松识别提取图片或语音参考验证码中包含的字符内容,并模拟用户的鼠标点击、键盘输入等事件行为在浏览器端输入识别出来的字符进行提交。因此,通过文本/图像/语音验证码进行人和计算机机鉴别的方式已变得相当不可靠。

现有验证码技术中,主要通过让参考验证码易于被人类识别而不易被机器识别的思路进行设计,主要表现为用扭曲文字、在图片中使用杂点背景、在语音中增加背景噪音等干扰机器识别的手段增加机器识别的难度。这类方式的使用也增加了人类识别的难度,甚至人类也无法识别的情况也时有发生,降低了用户体验。



技术实现要素:

为了克服现有技术的不足,本发明的目的之一在于提供一种基于手写字符识别的验证方法,其能提高验证识别的安全性。

本发明的目的之二在于提供一种基于手写字符识别的验证装置,其能提高验证识别的安全性。

本发明的目的之一采用以下技术方案实现:

一种基于手写字符识别的验证方法,包括以下步骤:

s1:通过随机算法从备选字符库中提取参考字符,并生成图片作为参考验证信息;

s2:获取手写区域内的手写字符,并生成图片作为手写验证信息;

s3:通过字体识别算法判断手写验证信息的手写字符与参考字符是否一致,如果是,则执行步骤s4,如果否,则验证失败;

s4:对手写验证信息进行特征提取,得到相应的特征向量;

s5:判断手写验证信息的特征向量与模板库内的特征向量是否一致,如果是,则验证成功,如果否,则验证失败。

优选的,在步骤s5判断为是后执行步骤s6:判断手写验证信息与已提交的手写验证信息的相似度是否大于预设值,如果是,则验证失败,如果否,则验证成功。

优选的,在步骤s2之后还包括步骤s21:对手写验证信息进行预处理。

优选的,步骤s21具体包括以下子步骤:

s211:对手写验证信息进行二值化处理;

s212:通过种子连通算法对手写验证信息进行字符分割,得到字符信息;

s213:通过质心对齐和线性插值放大对字符信息进行归一化处理。

优选的,步骤s212之后包括以下步骤:

步骤s2120:判断字符信息的字符特征是否处于预设范围内,如果是,则执行步骤s213,如果否,则执行步骤s2121;

步骤s2121通过预识别判断该字符信息是否为粘连字符,如果是,则通过垂直投影图中找谷点的方法对其进行分割,如果否,则执行步骤s213。

优选的,步骤s4具体包括以下子步骤:

s41:对字符信息进行图像分割,将其分割为预设数量的方格区域;

s42:计算每个方格中的区域密度,该区域密度=每个方格内的点数与字符信息总点数之比。

优选的,所述预设数量的方格区域为5*5的方格区域。

本发明的目的之二采用以下技术方案实现:

一种基于手写字符识别的验证装置,包括以下模块:

验证信息生成模块:用于通过随机算法从备选字符库中提取参考字符,并生成图片作为参考验证信息;

手写信息获取模块:用于获取手写区域内的手写字符,并生成图片作为手写验证信息;

字符识别模块:用于通过字体识别算法判断手写验证信息的手写字符与参考验证信息的参考字符是否一致,如果是,则执行特征提取模块,如果否,则验证失败;

特征提取模块:用于对手写验证信息进行特征提取,得到相应的特征向量;

特征比对模块:用于判断手写验证信息的特征向量与模板库内的特征向量是否一致,如果否,则验证失败。

优选的,在特征比对模块判断为是后执行相似度判断模块:用于判断手写验证信息与已提交的手写验证信息的相似度是否大于预设值,如果是,则验证失败,如果否,则验证成功。

优选的,在手写信息获取模块之后还包括预处理模块:用于对手写验证信息进行预处理。

优选的,所述预处理模块具体包括以下子模块:

二值化模块:用于对手写验证信息进行二值化处理;

字符分割模块:用于通过种子连通算法对手写验证信息进行字符分割,得到字符信息;

归一化模块:用于通过质心对齐和线性插值放大对字符信息进行归一化处理。

优选的,所述字符分割模块之后还包括以下模块:

字符特征判断模块:用于判断字符信息的字符特征是否处于预设范围内,如果是,则执行归一化模块,如果否,则执行粘连字符分割模块;

粘连字符分割模块:用于通过预识别判断该字符信息是否为粘连字符,如果是,则通过垂直投影图中找谷点的方法对其进行分割,如果否,则执行归一化模块。

相比现有技术,本发明的有益效果在于:

本发明通过让用户在指定区域手写文字字符的方法来区分人类和计算机,从而有效防止验证码被恶意程序破解所产生的影响;提高了用户使用互联网的安全性。

附图说明

图1为现有的验证码技术原理图;

图2为本发明的一种基于手写字符识别的验证方法的流程图;

图3为本发明的一种基于手写字符识别的验证装置的结构图。

具体实施方式

下面,结合附图以及具体实施方式,对本发明做进一步描述:

如图2所示,本发明提供了一种基于手写字符识别的验证方法,包括以下步骤:

在进行验证之前需要首先建立训练识别模板,以进行后续的识别判断;通过对于学习验证进行预处理、特征提取、识别训练,从而建立识别模型。训练:从训练集验证码中提取出标准模板,即标准特征库(模板库)的过程,每个手写字符都有几百个标准模板,通过预处理和特征提取后,将训练集手写图片的特征向量存入文件中,训练时,需要指明各手写图片的正确值,为了不出现错误的标准模板,对于分割时发现有字符粘连的训练集手写图片不加入模板库。

s1:通过随机算法从备选字符库中提取参考字符,并生成图片作为参考验证信息;服务器随机生成一组字符串,并保存起来作为待验证信息,将上述字符串生成参考验证码并在显示端展示给用户,使用户进行识别;

s2:获取手写区域内的手写字符,并生成图片作为手写验证信息;当获取到用户提交的在指定区域手写字符的验证信息后,系统对手写图片验证信息进行特征提取;

s21:对手写验证信息进行预处理;步骤s21具体包括以下子步骤:预处理主要包括解码、二值化、去除噪声和干扰、字符分割、归一化等步骤;预处理的好坏极大地影响到服务器对图片的处理识别性能,其中去除干扰和字符分割尤为重要;预处理包括很多步骤,本发明使用了解码、二值化、去除噪声和干扰、字符分割、归一化几个主要步骤,还可以增加平滑处理等步骤,也可以组合或单独使用其中几个或一个步骤;

s211:对手写验证信息进行二值化处理;将图片的灰度值,以某一阈值为限,转换为0或255,即是黑和白,以便于进行处理,二值化阈值根据具体图片分析所得,选择合理的阈值可消除很多背景、噪声,同时不损伤字符笔画;去除干扰点,二值化后大部分噪声都已经去除,但是还有很多干扰点,通过去除干扰点和噪声可以去除高度为1和2像素的干扰点,除去这些干扰点便于后续的处理更好的进行;

s212:通过种子连通算法对手写验证信息进行字符分割,得到字符信息;步骤s212之后包括以下步骤:

步骤s2120:判断字符信息的字符特征是否处于预设范围内,如果是,则执行步骤s213,如果否,则执行步骤s2121;其中字符特征主要为字符的点数和宽高比特征等;

步骤s2121:通过预识别判断该字符信息是否为粘连字符,如果是,则通过垂直投影图中找谷点的方法对其进行分割,如果否,则执行步骤s213;本步骤即是将手写图片信息分割成单个的字符,本发明先利用种子填充算法得到几个连通线,这样未粘连的字符即可分割,对于粘连字符,还需要进一步分割,粘连字符的判别主要依据字符的点数和宽高比特征,当大于某一阈值的时候初步判断为字符咋练,该阈值根据图片特征统计分析所得,对于初步判断为粘连的字符,为了防止判断错误,还用预识别的方法进行进一步判断,对于粘连字符的分割,本发明采用的是在垂直投影中找谷点的方法;

s213:通过质心对齐和线性插值放大对字符信息进行归一化处理;为了解决图片字符存在位置偏移、大小不一、旋转不定的问题,通过质心对齐和线性插值放大对字符信息进行归一化处理使得字符变为统一的规则,以便于进行匹配;

s3:通过字体识别算法判断手写验证信息的手写字符与参考验证信息的参考字符是否一致,如果是,则执行步骤s4,如果否,则验证失败;字体识别算法为现有的常规技术手段,可以明确的识别出手写字符与参考字符是否一致,如果不一致,则验证失败;

s4:对手写验证信息进行特征提取,得到相应的特征向量;步骤s4具体包括以下子步骤:

s41:对字符信息进行图像分割,将其分割为预设数量的方格区域;所述预设数量的方格区域为5*5的方格区域;

s42:计算每个方格中的区域密度,该区域密度=每个方格内的点数与字符信息总点数之比;从经过预处理的字符图片中,提取处一定维数的特征向量,从而提高字符匹配和识别的存储量和运算速度,字符有很多特征,选用合适的特征才能达到正确识别的目的,本发明采用字符的区域密度的特征,即将字符分成5*5的25个方格区域,计算每个方格中的点数与字符总点数之比,以得到25维特征向量,该特征反映了字符笔画的空间分布情况,并且对字符笔画的粗细不敏感;由于反应的是空间字符笔画的分布,故而再进行训练以及识别的时候并不是对字与字之间的识别判断,而是通过不断的分析该字的笔画特征,然后对其进行分析,从而为是否是人机提供相应的判断条件;

在特征提取环节,本发明采用了提取字符的区域密度的特征,也可以通过提取其他特征来替代,如平滑特征等;还可以在手写字符过程加入其他特征判断进行是否手写的识别,如在指定区域中增加获取手写笔顺的特征、压感的特征等来进行辅助判断。

s5:判断手写验证信息的特征向量与模板库的手写特征向量是否一致,如果否,则验证失败;

手写字体的识别,采用使用softmax回归模型进行识别,softmax模型可以用来给不同的对象分配概率,softmax回归主要分为两步:

第一步,为了得到一张给定图片属于某个特定文字类的证据,我们对图片像素值进行加权求和,如果这个像素具有很强的证据说明这张图片不属于该类,那么相应的权值为负数,相反如果这个像素拥有有利的证据支持这张图片属于这个类,那么权值为正数,此外我们还加入一个额外的偏置量,以排出输入带来的一些无关干扰量,因此,

其中wi,j代表权重,xj代表特征向量,在本发明中也即是区域密度,bi代表第i类的偏置量,j代表给定图片x的像素索引用于像素求和,然后用softmax函数将这些证据转换为概率y:y=softmax(evidence);其中的wi,j和偏置量bi是通过训练的时候得到的数值,在进行识别的时候,计算机只用识别xj这个量即可得到相应的evidencei,从而得到相应的概率y;

这里的softmax是一个激励函数,把我们定义的线性函数的输出转换成我们想要的格式,也就是关于文字类的概率分布,因此,第二步,给定一张图片,它对于每一个训练标准模板的吻合度可以被softmax函数转换成一个概率值,softmax函数可以定义为softmax(x)=normalize(exp(x);

展开等式右边的子式,得到

待识别字符属于哪个标准模板的概率最大,就表示和那个模板最匹配,即判别为哪个字符。如果是,则执行s6,如果否,则验证失败;

s6:判断手写验证信息与已提交的手写验证信息的相似度是否大于预设值,如果是,则验证失败,如果否,则验证成功。该预设值为100%;已提交的手写验证信息是在本次手写验证信息之前提交至电脑端的验证信息;与已提交的手写验证信息比较相似度是否为100%的判断原理为:因为人类手写输入每次都不同,所有提交的手写验证信息不会100%相似。

本发明的步骤可以只判断手写字符与参考验证信息的一致性,省略与已有手写图片比较相似度是否100%步骤,该步骤用于判断手写图片的唯一性,从而防止同一手写图片被计算机反复提交用于替代人类手写图片来验证参考信息一致性。

当接收到用户进行关键操作的指令时,系统需要判断确定该操作是人或机器发起的,即进入人机验证,服务器经过预处理、特征判断、训练、降噪、过滤切割等步骤,来判断提交的手写验证字符是来自真实用户还是由计算机生成。

本发明通过服务器端验证手写字符图片的方法来判断真实用户的有效性,避免了使用干扰机器辨识参考验证信息、提高机器辨识难度的思路进行验证设计,故在为用户提供参考验证信息的环节无需过多增加复杂干扰机器识别的技术手段(扭曲文字、在图片中使用杂点背景、在语音中增加背景噪音)来干扰机器识别,避免了该处理方式导致参考验证信息难以被人识别,从而提高了用户体验。

本发明使用机器学习算法,对大量手写中、英文汉字、字母、数字样本进行识别训练,建立了识别系统,通过特性判断实现了快速识别出手写字符图片是来自真实用户还是由机器生成。

如图3所示,本发明提供了一种基于手写字符识别的验证装置,包括以下模块:

验证信息生成模块:用于通过随机算法从备选字符库中提取参考字符,并生成图片作为参考验证信息;

手写信息获取模块:用于获取手写区域内的手写字符,并生成图片作为手写验证信息;

字符识别模块:用于通过字体识别算法判断手写验证信息的手写字符与参考验证信息的参考字符是否一致,如果是,则执行特征提取模块,如果否,则验证失败;

预处理模块:用于对手写验证信息进行预处理;所述预处理模块具体包括以下子模块;

二值化模块:用于对手写验证信息进行二值化处理;

字符分割模块:用于通过种子连通算法对手写验证信息进行字符分割,得到字符信息;所述字符分割模块之后还包括以下模块;

字符特征判断模块:用于判断字符信息的字符特征是否处于预设范围内,如果是,则执行归一化模块,如果否,则执行粘连字符分割模块;

粘连字符分割模块:通过预识别判断该字符信息是否为粘连字符,如果是,则通过垂直投影图中找谷点的方法对其进行分割,如果否,则执行归一化模块;

归一化模块:用于通过质心对齐和线性插值放大对字符信息进行归一化处理;

特征提取模块:用于对手写验证信息进行特征提取,得到相应的特征向量;

特征比对模块:用于判断手写验证信息的特征向量与模板库内的特征向量是否一致,如果是,则执行相似度判断模块,如果否,则验证失败;

相似度判断模块:用于判断手写验证信息与已提交的手写验证信息的相似度是否大于预设值,如果是,则验证失败,如果否,则验证成功。

对本领域的技术人员来说,可根据以上描述的技术方案以及构思,做出其它各种相应的改变以及形变,而所有的这些改变以及形变都应该属于本发明权利要求的保护范围之内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1