验证码的主要目的是强制人机交互来抵御机器自动化攻击的。有效防止某个黑客对某一个特定注册用户用特定程序暴力破解方式进行不断的密码尝试,实际上用验证码是很多网站通行的方式(比如招商银行的网上个人银行,腾讯的QQ社区)。
基本介绍
验证码的主要目的是强制人机交互来抵御机器自动化攻击的。大部分的验证码设计者并不得要领,不了解图像处理,机器视觉,模式识别,人工智能的基本概念。
利用验证码,可以发财,当然要犯罪:比如招商银行密码只有6位,验证码形同虚设,计算机很快就能破解一个有钱的账户,很多帐户是可以网上交易的。也有设计得比较好的,比如Yahoo,Google,Microsoft等。而国内Tencent的中文验证码虽然难,但算不上好。
处理知识
人工智能,模式识别,机器视觉,图像处理的基本知识
主要流程
比如我们要从一副图片中,识别出验证码;比如我们要从一副图片中,检测并识别出一张人脸。
1.图像采集:验证码呢,就直接通过HTTP抓HTML,然后分析出图片的url,然后下载保存就可以了。如果是人脸检测识别,一般要通过视屏采集设备,采集回来,通过A/D转操作,存为数字图片或者视频。
2.预处理:检测是正确的图像格式,转换到合适的格式,压缩,剪切出ROI,去除噪音,灰度化,转换色彩空间这些。
3.检测:车牌检测识别系统要先找到车牌的大概位置,人脸检测系统要找出图片中所有的人脸(包括疑似人脸);验证码识别呢,主要是找出文字所在的主要区域。
4.前处理:人脸检测和识别,会对人脸在识别前作一些校正,比如面内面外的旋转,扭曲等。我这里的验证码识别,“一般”要做文字的切割。
5.训练:通过各种模式识别,机器学习算法,来挑选和训练合适数量的训练集。不是训练的样本越多越好。过学习,泛化能力差的问题可能在这里出现。这一步不是必须的,有些识别算法是不需要训练的。
6.识别:输入待识别的处理后的图片,转换成分类器需要的输入格式,然后通过输出的类和置信度,来判断大概可能是哪个字母。识别本质上就是分类。
关键概念
图像处理:一般指针对数字图像的某种数学处理。比如投影,钝化,锐化,细化,边缘检测,二值化,压缩,各种数据变换等等。
1.二值化:一般图片都是彩色的,按照逼真程度,可能很多级别。为了降低计算复杂度,方便后续的处理,如果在不损失关键信息的情况下,能将
图片处理成黑白两种颜色,那就最好不过了。
2.细化:找出图像的骨架,图像线条可能是很宽的,通过细化将宽度将为1,某些地方可能大于1。不同的细化算法,可能有不同的差异,比如是否更靠近线条中间,比如是否保持联通行等。
3.边缘检测:主要是理解边缘的概念。边缘实际上是图像中图像像素属性变化剧烈的地方。可能通过一个固定的门限值来判断,也可能是自适应的。门限可能是图像全局的,也可能是局部的。不能说那个就一定好,不过大部分时候,自适应的局部的门限可能要好点。被分析的,可能是颜色,也可能是
灰度图像的灰度。
机器视觉:利用计算机来模式实现人的视觉。比如物体检测,定位,识别。按照对图像理解的层次的差别,分高阶和低阶的理解。
模式识别:对事物或者现象的某种表示方式(数值,文字,我们这里主要想说的是数值),通过一些处理和分析,来描述,归类,理解,解释这些事物,现象及其某种抽象。
人工智能:这种概念比较宽,上面这些都属于人工智能这个大的方向。简单点不要过分学院派的理解就是,把人类的很“智能”的东西给模拟出来协助生物的人来处理问题,特别是在计算机里面。
经验: 2017年以前这方面的技术难点主要在于验证码图片的分割方面,对于识别的匹配,OCR技术已经很成熟了,完全可用于验证码图片的识别,但是复杂的验证码图片大多粘连,分割处理比较麻烦,随着深度学习的发展逐渐成熟,卷积神经网络开始被应用于解决OCR识别的问题,验证码识别正式步入基于端到端的不分割时代。
新动态
复杂的
Captcha对
文字识别,图形图像处理以及人工智能专家来说都是一个很大的挑战,但是这并不能阻止互联网上那些Bot创造者们的脚步,一些新兴的破解Captcha的办法也就应运而生,最常用的包括两种方法:
1. 利用现成的网站(很多是吸引眼球的不正当网站)的高流量,让那些过路者免费帮忙输入验证码。
2. 直接付费利用人力资源输入验证码,通过软件,把需要识别的验证码发给网赚者识别;代表平台:优优云
验证码的作用: 有效防止某个黑客对某一个特定注册用户用特定程序暴力破解方式进行不断的登陆尝试,实际上是用验证码是很多网站通行的方式(比如招商银行的网上个人银行,腾讯的QQ社区),我们利用比较简易的方式实现了这个功能。虽然登陆麻烦一点,但是对网友的密码安全还来说这个功能还是很有必要,也很重要。但我们还是 提醒大家主要保护自己的密码 , 尽量使用混杂了数字、字母、符号在内的6位以上密码,不要使用诸如1234之类的简单密码或者与用户名相同、类似的密码。 不要随意设置密码,保护你自己的密码也是保护你自己,免得你的账号给人盗用给自己带来不必要的麻烦。
3.使用基于深度学习的验证码识别技术,这种技术的前提是需要训练集,当然可以使用人工标注少量样本,或者直接对接打码平台采集样本,这样做的好处是花费较少的成本,获得高质量的验证码识别率,现有的验证码识别较多的是采用CNN卷积神经网络,可以参考文章如《CNN+BLSTM+CTC的验证码识别从训练到部署》的做法,采用TensorFlow开源框架实现的神经网络,训练有针对性的定制化验证码模型,并部署为HTTP预测服务。只要有样本,市面上绝大多数的图形验证码几乎可以达到98%以上的识别率,若是配合GAN生成验证码那将是图像验证码的末日,传统的图像验证码显然已经难以抵御基于深度学习的OCR识别了。
(1).验证码一般是防止批量注册的,人眼看起来都费劲,何况是机器。二像百度贴吧未登录发贴要输入验证码大概是防止大规模匿名回帖的发生。不少网站为了防止用户利用机器人自动注册、登录、灌水,都采用了验证码技术。所谓验证码,就是将一串随机产生的数字或符号,生成一幅图片, 图片里加上一些干扰象素(防止OCR),由用户肉眼识别其中的验证码信息,输入
表单提交网站验证,验证成功后才能使用某项功能。
(2).一般注册用户ID的地方以及各大论坛都要要输入验证码
(3).常见的验证码
1,四位数字,随机的一数字
字符串,最原始的验证码,验证作用几乎为零。2,CSDN网站用户登录用的是GIF格式,常用的随机数字图片验证码。图片上的
字符比较中规中矩,验证作用比上一个好。没有基本图形图像学知识的人,不可破!可惜读取它的程序,在CSDN使用它的第一天,好像就在论坛里发布了,真是可怜!
2,汉字,QQ网站注册曾经有过一款验证码,都是汉字,随机生成,打起来更难了!
3,QQ网站用户登录用的是PNG格式,图片用的随机数字 随机大写英文字母,整个构图有点张扬,每刷新一次,每个字符还会变位置呢!有时候出来的图片,人眼都识别不了,厉害啊…4,MS的hotmail申请时候的是BMP格式, 随机数字 随机大写英文字母 随机干扰像素 随机位置。
4,韩文或日文,跑跑HF上MS注册都要打韩文的,这更增加了难度,要去修学下才行..
5,Google的Gmail注册时候的是JPG格式,随机英文字母 随机颜色 随机位置 随机长度。
6,其他各大论坛的是XBM格式,内容随机。
(4)意义:不少网站为了防止用户利用机器人自动注册、登录、灌水,都采用了验证码技术。所谓验证码,就是将一串随机产生的数字或符号,生成一幅图片,图片里加上一些干扰象素(防止OCR),由用户肉眼识别其中的验证码信息,输入表单提交网站验证,验证成功后才能使用某项功能。