验证码图片生成方法及装置与流程

文档序号:11951521阅读:348来源:国知局
验证码图片生成方法及装置与流程

本申请涉及验证码技术领域,更具体地,涉及验证码图片生成方法及装置。



背景技术:

验证码,应用在各种公共系统中,用来判断访问公共系统的用户是人还是机器人程序。机器人程序通过自动执行,恶意破坏公共系统,如票务系统中,机器人程序可以恶意刷票;论坛系统中,机器人程序可以论坛灌水等等。而验证码的应用,可以有效识别出机器人程序,从而保护合法用户对公共系统的正常访问。

目前,验证码图片中的验证码颜色为固定的颜色如黑色。此种验证码图片容易被恶意程序破解,即容易从验证码图片中提取出验证码,验证码图片的安全性较低。



技术实现要素:

有鉴于此,本申请提供了一种验证码图片生成方法,用以提高验证码图片的安全性。另外,本申请还提供了验证码图片的生成装置,用以保证上述方法在实际中的应用及实现。

为实现所述目的,本申请提供的技术方案如下:

本申请的第二方面提供了一种验证码图片生成方法,包括:

获取验证字符图片、前景图片及背景图片;其中,所述验证字符图片中包含验证码字符,所述前景图片中的图像为织构图像,所述背景图片中的图像为自然图像;

以所述验证字符图片中的验证码字符为掩膜,将所述验证码字符在所述背景图片中的梯度替换为所述验证码字符在所述前景图片中的梯度,获得验证码图片。

可选地,所述以所述验证字符图片中的验证码字符为掩膜,将所述验证码字符在所述背景图片中的梯度替换为所述验证码字符在所述前景图片中的梯度,包括:

依据所述验证码字符当前的边界,确定所述前景图片中的前景边界像素的梯度;其中,所述前景边界像素为所述前景图片中的与所述验证码字符当前的边界相重叠的像素;

将所述背景边界像素的梯度替换为所述前景边界像素的梯度;其中,所述背景边界像素为所述背景图片中的与所述验证码字符当前的边界相重叠的像素;

向内缩进以确定所述验证码字符新的当前的边界,返回依据所述验证码字符新的当前的边界,确定所述前景图片中的前景边界像素的梯度及所述背景图片中的背景边界像素的梯度,直至向内缩进至所述验证码字符的最后一个像素。

可选地,所述依据所述验证码字符当前的边界,确定所述前景图片中的前景边界像素的梯度,包括:

将所述验证码字符与所述前景图片重叠后,在所述前景图片中,确定与所述验证码字符当前的边界相重叠的前景边界像素;

以所述前景边界像素为中心,确定包含重叠区域外的至少一个像素的邻域区域;

将所述邻域区域中不属于重叠区域的像素确定为像素集合G;

根据所述像素集合G中像素的像素值,确定所述前景边界像素的梯度。

可选地,所述根据所述像素集合G中像素的像素值,确定所述前景边界像素的梯度,包括:

根据梯度确定公式确定所述前景边界像素的梯度;

其中,所述grad(a)为前景边界像素的梯度,所述a为前景边界像素的像素值,所述b为像素集合G中像素的像素值,所述num(G)为像素集合G中像素的总数。

可选地,所述将所述背景边界像素的梯度替换为所述前景边界像素的梯度,包括:

将所述验证码字符与所述背景图片重叠后,在所述背景图片中,确定与所述验证码字符当前的边界相重叠的背景边界像素;

以所述背景边界像素为中心,确定包含重叠区域外的至少一个像素的邻域区域;

将所述邻域区域中不属于重叠区域的像素确定为像素集合F;

将所述前景边界像素的梯度grad(a)代入梯度替换公式中,获得所述背景边界像素的目标像素值x;其中,所述d为像素集合F中像素的像素值,所述num(F)为像素集合F中像素的总数。

将所述背景边界像素的像素值替换为所述目标像素值x。

可选地,所述根据所述像素集合G中像素的像素值,确定所述前景边界像素的梯度,包括:

根据梯度确定公式确定所述前景边界像素的梯度;

其中,所述grad(a)为前景边界像素的梯度,所述a为前景边界像素的像素值,所述b为像素集合G中像素的像素值,所述dist(a,b)为前景边界像素与像素集合G中的像素之间的距离,所述σ为方差常量,所述e为常量。

可选地,所述将所述背景边界像素的梯度替换为所述前景边界像素的梯度,包括:

将所述验证码字符与所述背景图片重叠后,在所述背景图片中,确定与所述验证码字符当前的边界相重叠的背景边界像素;

以所述背景边界像素为中心,确定包含重叠区域外的至少一个像素的邻域区域;

将所述邻域区域中不属于重叠区域的像素确定为像素集合F;

将所述前景边界像素的梯度grad(a)代入梯度替换公式中,获得所述背景边界像素的目标像素值x;其中,所述d为像素集合F中像素的像素值,所述dist(a,d)为前景边界像素与像素集合F中的像素之间的距离。

将所述背景边界像素的像素值替换为所述目标像素值x。

本申请的第二方面提供了一种验证码图片生成装置,包括:

图片获取模块,用于获取验证字符图片、前景图片及背景图片;其中,所述验证字符图片中包含验证码字符,所述前景图片中的图像为织构图像,所述背景图片中的图像为自然图像;

梯度替换模块,用于以所述验证字符图片中的验证码字符为掩膜,将所述验证码字符在所述背景图片中的梯度替换为所述验证码字符在所述前景图片中的梯度,获得验证码图片。

可选地,在所述以所述验证字符图片中的验证码字符为掩膜,将所述验证码字符在所述背景图片中的梯度替换为所述验证码字符在所述前景图片中的梯度的方面,所述梯度替换模块用于:

依据所述验证码字符当前的边界,确定所述前景图片中的前景边界像素的梯度;其中,所述前景边界像素为所述前景图片中的与所述验证码字符当前的边界相重叠的像素;

将所述背景边界像素的梯度替换为所述前景边界像素的梯度;其中,所述背景边界像素为所述背景图片中的与所述验证码字符当前的边界相重叠的像素;

向内缩进以确定所述验证码字符新的当前的边界,返回依据所述验证码字符新的当前的边界,确定所述前景图片中的前景边界像素的梯度及所述背景图片中的背景边界像素的梯度,直至向内缩进至所述验证码字符的最后一个像素。

可选地,在所述依据所述验证码字符当前的边界,确定所述前景图片中的前景边界像素的梯度的方面,所述梯度替换模块用于:

将所述验证码字符与所述前景图片重叠后,在所述前景图片中,确定与所述验证码字符当前的边界相重叠的前景边界像素;

以所述前景边界像素为中心,确定包含重叠区域外的至少一个像素的邻域区域;

将所述邻域区域中不属于重叠区域的像素确定为像素集合G;

根据所述像素集合G中像素的像素值,确定所述前景边界像素的梯度。

可选地,在所述根据所述像素集合G中像素的像素值,确定所述前景边界像素的梯度的方面,所述梯度替换模块用于:

根据梯度确定公式确定所述前景边界像素的梯度;

其中,所述grad(a)为前景边界像素的梯度,所述a为前景边界像素的像素值,所述b为像素集合G中像素的像素值,所述num(G)为像素集合G中像素的总数。

可选地,在所述将所述背景边界像素的梯度替换为所述前景边界像素的梯度的方面,所述梯度替换模块用于:

将所述验证码字符与所述背景图片重叠后,在所述背景图片中,确定与所述验证码字符当前的边界相重叠的背景边界像素;

以所述背景边界像素为中心,确定包含重叠区域外的至少一个像素的邻域区域;

将所述邻域区域中不属于重叠区域的像素确定为像素集合F;

将所述前景边界像素的梯度grad(a)代入梯度替换公式中,获得所述背景边界像素的目标像素值x;其中,所述d为像素集合F中像素的像素值,所述num(F)为像素集合F中像素的总数。

将所述背景边界像素的像素值替换为所述目标像素值x。

可选地,在所述根据所述像素集合G中像素的像素值,确定所述前景边界像素的梯度的方面,所述梯度替换模块用于:

根据梯度确定公式确定所述前景边界像素的梯度;

其中,所述grad(a)为前景边界像素的梯度,所述a为前景边界像素的像素值,所述b为像素集合G中像素的像素值,所述dist(a,b)为前景边界像素与像素集合G中的像素之间的距离,所述σ为方差常量,所述e为常量。

可选地,在所述将所述背景边界像素的梯度替换为所述前景边界像素的梯度的方面,所述梯度替换模块用于:

将所述验证码字符与所述背景图片重叠后,在所述背景图片中,确定与所述验证码字符当前的边界相重叠的背景边界像素;

以所述背景边界像素为中心,确定包含重叠区域外的至少一个像素的邻域区域;

将所述邻域区域中不属于重叠区域的像素确定为像素集合F;

将所述前景边界像素的梯度grad(a)代入梯度替换公式中,获得所述背景边界像素的目标像素值x;其中,所述d为像素集合F中像素的像素值,所述dist(a,d)为前景边界像素与像素集合F中的像素之间的距离。

将所述背景边界像素的像素值替换为所述目标像素值x。

由以上技术方案可知,本申请提供了一种验证码图片的生成方法,本方法获取包含丰富边界内容的背景图片、包含织构结构图像的前景图片以及验证字符图片,验证字符图片中包含验证码字符,以验证码字符作为掩膜,将背景图片的梯度替换为前景图片的梯度,从而背景图片上便可以显示出验证码字符,该背景图片便可以作为验证码图片。由于背景图片包含丰富的边界,恶意程序在辨别验证码字符时需要分析图像内容,从而提高了验证码字符被辨别出的难度,进而提高了验证码图片的安全性。

附图说明

为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据提供的附图获得其他的附图。

图1为本申请提供的验证码图片的生成方法实施例1的流程图;

图2A~图2D依次为本申请提供的前景图片、背景图片、验证字符图片及验证码图片的示例图;

图3为本申请提供的向内缩进验证码字符的示例图;

图4为本申请提供的为前景边界像素确定邻域区域的示例图;

图5为本申请提供的验证码图片的生成装置实施例1的结构示意图。

具体实施方式

下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。

参见图1,其示出了本申请提供的验证码图片生成方法实施例1的流程。如图1所示,本实施例可以具体包括步骤S101~步骤S102。

步骤S101:获取验证字符图片、前景图片及背景图片;其中,验证字符图片中包含验证码字符,前景图片中的图像为织构图像,背景图片中的图像为自然图像。

在实施前,预先设置前景图片库及背景图片库。其中,前景图片库中包含大量的前景图片,前景图片中的图像为织构形式的图像。参见图2A所示的织构图像,织构图像中包含各种不同形状的纹理。

背景图片库中包含大量的背景图片,背景图片可以是自然图像或自然图像的截图,自然图像即使用摄像装置拍摄出来的真实图片。参见图2B所示的背景图片,背景图片包含丰富的边界内容,这样,在背景图片上添加验证码字符后,丰富的边界性可以提高验证码字符被恶意程序提取或辨别出来的难度。

另外,背景图片也可以是具有织构结构的图片,但为了便于验证码字符的人眼识别,背景图片的织构结构需要与前景图片的织构结构的形式不同。

预先设置验证字符图片库,验证字符图片中包含验证码字符。验证码字符的颜色与验证字符图片的背景颜色不同,最优的情况是,两者颜色相反。如图2C所示的验证字符图片,验证码字符的颜色是黑色,验证字符图片的背景为白色。当然,验证码字符的颜色也可以是白色,则验证字符图片的背景为黑色。

步骤S102:以验证字符图片中的验证码字符为掩膜,将验证码字符在背景图片中的梯度替换为验证码字符在前景图片中的梯度,获得验证码图片。

将验证字符图片与背景图片重叠,确定出重叠区域。将验证字符图片与前景图片重叠,以验证码字符为掩膜,将背景图片重叠区域的梯度替换为前景图片中掩膜所覆盖区域的梯度。从而,如图2D所示,在背景图片上会凸显验证码字符,验证码字符在背景图片上的梯度即前景图片中重叠区域的梯度。

由以上技术方案可知,本实施例提供了一种验证码图片的生成方法,本方法获取包含丰富边界内容的背景图片、包含织构结构图像的前景图片以及验证字符图片,验证字符图片中包含验证码字符,以验证码字符作为掩膜,将背景图片的梯度替换为前景图片的梯度,从而背景图片上便可以显示出验证码字符,该背景图片便可以作为验证码图片。由于背景图片包含丰富的边界,恶意程序在辨别验证码字符时需要分析图像内容,从而提高了验证码字符被辨别出的难度,进而提高了验证码图片的安全性。

可以理解的是,验证码字符是由像素组成的,验证码字符的每个线条均占据一定宽度,因此,上述步骤S102将背景图片的梯度替换为前景图片的梯度时,可以是逐渐调细每个线条的宽度,在调细过程中,依次将验证码字符外围边界在背景图片上所覆盖的那部分像素的梯度进行替换,即替换为该验证码字符外围边界在前景图片上所覆盖的那部分像素的梯度。

如图3所示,验证码字符逐渐变细。在每次变细前,将验证码字符的边界在背景图片中所覆盖区域的像素的梯度替换为前景图片中的对应像素的梯度,如此循环,直至验证码字符消失。可以理解的是,背景图片中是以验证码字符为轮廓,由外向内,一圈一圈地逐渐改变自身像素的梯度,直至凸显出完整的验证码字符。

具体地,以上实现方式可以包括以下步骤A1~步骤A3。

步骤A1:依据验证码字符当前的边界,确定前景图片中的前景边界像素的梯度;其中,前景边界像素为前景图片中的与验证码字符当前的边界相重叠的像素。

如图2C所示,验证码字符的颜色与验证码图片背景的颜色不同,因此,可以明显看出验证码字符的边界。验证码字符的边界即字符最外围的一圈像素。

将前景图片与验证码字符重叠后,前景图片中与验证码字符的边界相重叠的像素可以称为前景边界像素。在确定前景边界像素后,计算该前景边界像素的梯度。

步骤A2:将背景边界像素的梯度替换为前景边界像素的梯度;其中,背景边界像素为背景图片中的与验证码字符当前的边界相重叠的像素。

与前景边界像素的定义同理,将背景图片与验证字符重叠后,背景图片中与验证码字符的边界相重叠的像素可以称为背景边界像素。在确定背景边界像素后,计算该背景边界像素的梯度,将背景边界像素的梯度替换为前景边界像素的梯度。当然地,背景边界像素与对应的前景边界像素的梯度进行替换,即:验证码字符边界上的某个像素M,在背景图片上会有重叠像素M1,在前景图片上也有重叠像素M2,是将背景图片上该重叠像素M1的梯度替换为前景图片上该重叠像素M2的梯度。

步骤A3:向内缩进以确定验证码字符新的当前的边界,返回执行步骤A1,直至向内缩进至验证码字符的最后一个像素。

在一个示例中,向内缩进验证码字符的方式可以是,将验证码字符边界上像素的像素值变为验证字符图片背景像素的像素值。如图2C所示,将验证码字符边界上像素的像素值设置为白色背景的像素值,即设置为255,如此,验证码字符的线条便可以变细。

可以理解的是,向内缩进验证码字符,即调细验证码字符的线条,这样,验证码字符便具有新的边界。使用该新的边界,继续对背景图片上的像素的梯度进行替换。如此循环,直至向内缩进至验证码字符的最后一圈或者最后一个像素。形象地来讲,在上述改变验证码字符的像素值的示例中,直至验证码字符在验证字符图片中消失。

由以上的技术方案可知看出,步骤102的此种实现方式,是一圈一圈地确定每个像素的梯度,然后依次进行替换。

当然,在实际应用中,步骤S102替换背景边界像素的梯度的另一种实现方式还可以是:

确定前景图片的前景区域中每个像素的梯度以及背景图片的背景区域中每个像素的梯度;其中,前景区域为验证码字符在前景图片中占据的区域,背景区域为验证码字符在背景图片中占据的区域;将背景区域中每个像素的梯度替换为前景字符中相应像素的梯度。

此种方式是将一次性确定验证码字符在前景图片中的梯度,以及验证码字符在背景图片中的梯度,整体进行替换,但是此种方式确定出的梯度的精确度低于第一种实现方式。原因是,像素的梯度,是该像素与其他周围像素的像素值的差值。第一种实现方式是一圈一圈地确定边界像素的梯度,并使用该像素与边界外围距离最近的像素来确定梯度,因此确定出的梯度精确度更高。

以下具体说明如何确定前景边界像素的梯度,以及如何将背景边界像素的梯度替换为前景像素的梯度。具体地,有如下两种不同的实现方式。

第一种实现方式包括如下步骤B1~步骤B6。

步骤B1:将验证码字符与前景图片重叠后,在前景图片中,确定与验证码字符当前的边界相重叠的前景边界像素。

具体地,验证码字符与前景图片重叠后,前景图片中便可以确定出一个区域,即包含验证码字符的区域。可以理解的是,该区域的边界像素也就是前景图片与验证码字符的边界重叠的像素。为了便于说明,可以将此些像素称为前景边界像素。

步骤B2:以前景边界像素为中心,确定包含重叠区域外的至少一个像素的邻域区域。

如图4所示,假设区域1为验证码字符与前景图片重叠的部分区域,在前景图片中,以前景边界像素A为中心,确定一个正方形的邻域区域。

需要说明的是,邻域区域的形状并非局限于图4中的正方形,还可以其他,如圆形,矩形、扇形等规则形状的区域。当然,也可以是其他不规则形状的区域。不论何种形状的邻域区域,该邻域区域内需要包含至少一个重叠区域之外的像素。如图4所示,正方形的邻域区域并非仅包含重叠区域1,还包含非重叠区域。

步骤B3:将邻域区域中不属于重叠区域的像素确定为像素集合G。

如图4所示,为了便于识别,使用斜线表示邻域区域内但不属于重叠区域的区域,将斜线区域内的像素确定为像素集合G。

步骤B4:根据梯度确定公式确定前景边界像素的梯度;其中,grad(a)为前景边界像素的梯度,a为前景边界像素的像素值,b为像素集合G中像素的像素值,num(G)为像素集合G中像素的总数。

具体地,使用梯度确定公式时,计算前景边界像素的像素值a分别与像素集合中各个像素的像素值b的差值,将各个差值求和后除以像素集合G中像素的总数,进而获得前景边界像素的梯度grad(a)。

步骤B5:将前景边界像素的梯度grad(a)代入梯度替换公式获得背景边界像素的目标像素值x;其中,d为像素集合F中像素的像素值,num(F)为像素集合F中像素的总数。

具体地,上述步骤B3可以根据验证码字符当前的边界,在前景图片中确定出像素集合G。与此同理,本步骤也可以根据验证码字符当前的边界,在背景图片中确定出像素集合F。

具体地,将验证码字符与背景图片重叠后,在背景图片中,确定与验证码字符当前的边界相重叠的背景边界像素,以背景边界像素为中心,确定包含重叠区域外的至少一个像素的邻域区域,将将邻域区域中不属于重叠区域的像素确定为像素集合F。

确定出像素集合F后,可以获得像素集合F中各个像素的像素值d,以及像素集合F中像素的总数num(F)。因此,将步骤B4确定出的grad(a)及d及num(F)代入上述梯度替换公式后,可以反推出背景边界像素的像素值x,为了便于描述,将该像素值称为目标像素值x。

步骤B6:将背景边界像素的像素值替换为目标像素值x。

可以理解的是,验证码字符与背景图片重叠后,可以确定出背景边界像素。背景边界像素本身具有像素值,即在背景图片中的像素值,将其自身的像素值替换为步骤B5获得的目标像素值x,从而便实现了将背景边界像素的梯度替换为前景边界像素的梯度。

确定前景边界像素的梯度及将背景边界像素的梯度替换为前景边界像素的梯度的第二种实现方式包括如下步骤C1~步骤C6。

需要说明的是,第二种实现方式的步骤C1~步骤C3与第一种实现方式的步骤B1~步骤B3相同,此处并不赘述,仅对本实现方式与第一种实现方式不同的部分进行说明。

步骤C4:根据梯度确定公式确定前景边界像素的梯度。

其中,grad(a)为前景边界像素的梯度,a为前景边界像素的像素值,b为像素集合G中像素的像素值,dist(a,b)为前景边界像素与像素集合G中的像素之间的距离,σ为方差常量,通常取值为1,e为常量。

具体地,dist(a,b)的计算方式可以是,设前景边界像素的坐标为(xa,ya),像素集合G中像素的坐标为(xb,yb),则:

本步骤的梯度确定公式是,将前景边界像素的像素值与像素集合中的像素的像素值求差,然后求其距离的负指数的加权平均。

步骤C5:将前景边界像素的梯度grad(a)代入梯度替换公式中,获得背景边界像素的目标像素值x;其中,d为像素集合F中像素的像素值,dist(a,d)为前景边界像素与像素集合F中的像素之间的距离。

需要说明的是,本步骤中确定像素集合F的方式与上述第一种实现方式的步骤B5中确定像素集合F的方式相同,此处并不赘述。另外,与上述计算前景边界像素与像素集合G中像素的距离dist(a,b)相似,本步骤可以计算背景边界像素与像素集合F中像素的距离dist(a,d)。

将各个已知量代入本步骤的梯度替换公式后,可以反推出背景边界像素的像素值x,为了便于描述,可以将该像素值称为目标像素值x。

步骤C6:将背景边界像素的像素值替换为目标像素值x。

通过对比可以看出,以上第一种方式与第二种方式仅仅是梯度确定公式与梯度替换公式不同,其他步骤是相同的。该两种方式均可以将背景边界像素的梯度替换为前景像素的梯度,从而在背景图片上添加验证码字符,从而生成验证码图片。

以下对本申请提供的验证码图片生成装置进行介绍,需要说明的是,下文有关验证码图片生成装置的说明可以参见上文提供的验证码图片生成方法,以下并不赘述。

与上述验证码图片生成方法实施例1相对应,本申请提供了一种验证码图片生成装置实施例1。如图5所示,本实施例可以具体包括:图片获取模块501及梯度替换模块502。

图片获取模块501,用于获取验证字符图片、前景图片及背景图片;其中,验证字符图片中包含验证码字符,前景图片中的图像为织构图像,背景图片中的图像为自然图像;

梯度替换模块502,用于以验证字符图片中的验证码字符为掩膜,将验证码字符在背景图片中的梯度替换为验证码字符在前景图片中的梯度,获得验证码图片。

其中,梯度替换模块502可以用于执行上述步骤A1~步骤A3、步骤B1~步骤B6、或者步骤C1~步骤C6。

需要说明的是,本说明书中的各个实施例均采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似的部分互相参见即可。

还需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括上述要素的过程、方法、物品或者设备中还存在另外的相同要素。

对所公开的实施例的上述说明,使本领域专业技术人员能够实现或使用本申请。对这些实施例的多种修改对本领域的专业技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本申请的精神或范围的情况下,在其它实施例中实现。因此,本申请将不会被限制于本文所示的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。

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