一种利用人眼视觉补偿原理的图片验证码生成方法
【技术领域】
[0001]本发明公布了一种利用人眼视觉补偿原理的图片验证码生成方法,人类可以利用人眼视觉补偿原理轻松识别,而机器则难以还原,属于计算机信息技术领域。
【背景技术】
[0002]随着互联网的迅猛发展,互联网上的垃圾信息也泛滥成灾,特别是机器人制造的垃圾信息最为严重,所以CAPTCHA技术应运而生。CAPTCHA是全自动区分计算机和人类的图灵测试的英文缩写,其简称为验证码,其中图片验证码应用最为广泛。图片验证码是利用计算机难以有效识别某些图片文字而人类可以识别的技术,来区分机器和人类。但是最近几年,图片验证码识别技术的发展也非常快速,绝大多数的简单验证码识别率都非常高,甚至很多都达到100%的识别率,从而导致这些验证码成了摆设,除了给真正的人类带来麻烦以外,没产生任何阻止机器人滥发垃圾信息的步伐。另一方面,以Google为代表,通过扭曲变形技术产生的验证码,虽然达到了机器识别率很低的效果,但是人类也非常难以识别,给图片验证码的应用带来不利影响。
【发明内容】
[0003]本发明所要解决的技术问题是提供一种图片验证码,使人眼可以轻松识别,机器识别率低,从而实现有效对机器和人类进行甄别。
[0004]本发明就是为解决这一矛盾而产生的。本发明认为,可以利用人类的某些优势而机器不具备这类优势,如人眼视觉补偿原理(俗称脑补),来生成这样的一类图片验证码。
[0005]为解决上述技术问题,本发明提供一种利用人眼视觉补偿原理的图片验证码生成方法,其特征在于,包括以下步骤:
1)生成一个随机长度的随机字符串,其长度控制在某一设定范围之内;
在所述步骤I)中,字符不限于英文和数字,如果是英文数字,要排除人类难以识别的字符,如 Iill OoO Jj r 等;
2)选用一种不等宽字体,将所述随机字符串以非背景色写入图片画布;
在所述步骤2)中,优先选用所述字体的粗体斜体,字体大小控制在某一随机范围内,各个字符的大小相同或是不同;
3)以背景色再次将所述随机字符串写入图片画布,各个字符的字体形态与步骤2)中的字体形态完全相同,所述随机字符串在图片画布中的位置向左上角移动一个像素;
本步骤的目的是擦除验证码文字或字符的绝大部分笔划,留下的笔划很少,但是人类可以利用人眼视觉补偿原理将其还原成立体文字;
4)对步骤3)所生成的验证码图片进行笔划随机擦除处理,擦除比例为经验值,擦除比例大致是1/5,以白背景黑字来说,就是剩下的立体文字中,去掉大约1/5的黑点.根据统计,未擦除之前,黑点占文字所占空间(注意不是全部画布)大约5%以下,擦除之后一般在4%以下,擦除后的笔划变少,连续性变差,散点变多,但是人类利用人眼视觉补偿原理仍然能够识别;
5)对验证码图片增加随机干扰噪点,增加的密度为设定值(增加比例为1%至3%),增加的噪点与原验证码文字中的散点笔划难以被机器有效区分,但是对人眼可以识别;
6)对验证码图片增加随机干扰线条,随机线为直线、曲线、连续线条或断点线条,增加的线条个数以不完全覆盖验证码内容为限,目的是使机器难以区分干扰线条和验证码文字笔划,但是又不致对人类构成识别困难;
7)对验证码图片增加干扰文字。干扰文字可以为广告语,从而产生商业收益,也可以是有意义的干扰问题,其干扰问题构成对验证码内容的不同处理,如要求使用者只输入验证码内容的一部分等;干扰文字一方面造成机器对图片的识别困难,另一方面造成机器对图片的理解困难,而不构成人类的理解和识别困难。
[0006]本发明所达到的有益效果:
本发明公开了一种利用人眼视觉补偿原理的图片验证码的生成方法,本发明生成的图片验证码,人类可以利用人眼视觉补偿原理将其还原成立体文字,从而轻松识别。上述验证码文字或字符的笔划非常纤细且不连续,残缺不全,从而导致机器的识别困难。本发明更进一步的对验证码图片增加干扰因素,如增加随机噪点,增加随机干扰直线和/或曲线,增加随机干扰文字如广告语,增加随机干扰问题如要求使用者输入验证码内容的一部分等。上述干扰问题可以以某种格式随机组合生成,可以有效对机器和人类进行甄别。
【附图说明】
[0007]图1是本发明的图片验证码示例图;
图2是能利用人类人眼视觉补偿原理还原的立体文字图片验证码示例图;
图3是图2的验证码经过随机笔划擦除后的图片示例图;
图4是图3的验证码增加了随机噪点后的图片不例图;
图5是图4的验证码增加了随机干扰线条后的图片示例图;
图6是图片验证码的生成过程流程图。
【具体实施方式】
[0008]下面结合附图对本发明的图片验证码生成过程进一步详细说明。
[0009]本发明的利用人眼视觉补偿原理的图片验证码生成方法,包括以下步骤:
步骤一:生成一个随机长度的随机字符串,其长度控制在某一设定范围之内,其中字符不限于英文数字;如果是英文数字,要排除人类难以识别的字符;
步骤二:选用一种不等宽字体,将所述随机字符串以非背景色写入图片画布;优先选用该字体的粗体斜体,字体大小控制在某一随机范围内;各个字符的大小可以相同或不同;
步骤三:以背景色再次将上述随机字符串写入图片画布,各个字符的字体形态必须与步骤二的完全相同,其在图片画布中的位置必须向左上角移动一个像素;本步骤的目的是擦除验证码文字或字符的绝大部分笔划,留下的笔划很少(通常占文字所占空间的5%左右),但是人类可以利用人眼视觉补偿原理将其还原成立体文字,如附图2所示;
步骤四:对步骤三所生成的验证码图片进行笔划随机擦除处理,其擦除比例为经验值,通常为1/5左右,将剩下的笔划控制在文字所占空间的4%以下,擦除后的笔划更少,连续性更差,散点更多,但是人类利用人眼视觉补偿原理仍然可以识别,如附图3所示;步骤五:对验证码图片增加随机干扰噪点,增加的密度为经验值,因为经过处理的验证码文字,其笔划连续性不强,存在很多散点,从而与噪点之间的界限模糊,增加的噪点与原先验证码文字中的散点笔划难以被机器有效区分,但是对人类识别不构成困难,如附图4所示;
步骤六:对验证码图片增加随机干扰线条,随机线条可以是直线,也可以是曲线,可以是连续线条,也可以是断点线条,要求其特征尽量向验证码文字或字符的剩余笔划靠拢,从而给机器识别增加更多的干扰因素,增加的线条个数为经验值,目的是让机器难以区