按键精灵自动输入验证码如何识别文字验证码

点击文档标签更多精品内容等伱发现~


VIP专享文档是百度文库认证用户/机构上传的专业性文档,文库VIP用户或购买VIP专享文档下载特权礼包的其他会员用户可用VIP专享文档下载特權免费下载VIP专享文档只要带有以下“VIP专享文档”标识的文档便是该类文档。

VIP免费文档是特定的一类共享文档会员用户可以免费随意获取,非会员用户需要消耗下载券/积分获取只要带有以下“VIP免费文档”标识的文档便是该类文档。

VIP专享8折文档是特定的一类付费文档会員用户可以通过设定价的8折获取,非会员用户需要原价获取只要带有以下“VIP专享8折优惠”标识的文档便是该类文档。

付费文档是百度文庫认证用户/机构上传的专业性文档需要文库用户支付人民币获取,具体价格由上传人自由设定只要带有以下“付费文档”标识的文档便是该类文档。

共享文档是百度文库用户免费上传的可与其他用户免费共享的文档具体共享方式由上传人自由设定。只要带有以下“共享文档”标识的文档便是该类文档

英雄ol就是家园的游戏... 英雄ol 就是家園的游戏

可以关键是免费的。使用文档可以看一下文库的链接


你对这个回答的评价是


可以使用答题吧打码平台的API进行识别验证码,不过這个是要钱的

你对这个回答的评价是?


你对这个回答的评价是


你对这个回答的评价是?


你对这个回答的评价是

下载百度知道APP,抢鲜体驗

使用百度知道APP立即抢鲜体验。你的手机镜头里或许有别人想知道的答案


  
  • CAPTCHA全称Completely Automated Public Turing Test to Tell Computers and Humans Apart即全自动区分人机的圖灵测试。这也是验证码诞生的主要任务但是随着近年来大数据运算和机器视觉的发展,用机器视觉识别图像已经变得非常容易过去鼡于区分人机的验证码也开始变得不再安全。
  • 接下来就让我们从零开始深入图像处理和算法构建,来看看使用机器视觉来识别过时的验證码( 如下所示 )究竟可以有多简单

  • capt_fetch()方法非常简单,我们直接从网站获取验证码将其转换为Image对象,等待被训练和测試等环节调用
从网站获取验证码,将验证码转为Image对象

  • 一个强大的机器学习模型是离不开强大的训练集作支持的。这裏我们也必须先有一个预先打好标签(预分类)的验证码图片集才能开始训练模型。
  • capt_download()方法就是我们用来建立训练图像集的方法它会调鼡capt_fetch()方法,将获得的Image对象展示给用户等待用户输入验证码中的字符,然后将图片命名为用户输入的字符存储起来
  • 当然,为了避免文件名偅复(比如获取到了两张字符完全相同的验证码)capt_download()方法将系统时间也加入到了文件名中。
将Image类型的验证码对象保存到本地

  • capt_process()方法会先将验证码转为灰度图然后再根据全局变量中定义的LUT将灰度图转化为黑白图片。并按照验证码中四个字符所在的位置进行切割
  • 从彩色图片到灰度图,再到黑白图看似验证码中的信息损失了很多,实际上这样做的目的是为了使字符的特征更加明显
  • 其实我们最终得箌的黑白图像会有一些噪点存在,这主要是由于前景色与背景色不存在严格的区分度我们可以使用滤波器过滤掉这些噪点,但少量的噪點会被训练模型当作误差处理并不影响我们分类。至于过滤噪点的方法我会专门写一篇帖子。
图像预处理:将验证码图片转为二值型圖片按字符切割 :return capt_per_char_list: 一个数组包含四个元素,每个元素是一张包含单个字符的二值型图片
  • 图像预处理的效果如下:





按字符切分后的黑白图像
  • 甴于字符宽窄有差异这里我们按字符切分后,有些字符会多出来一部分有些字符会丢失一部分。比如7多了一笔看起来像个三角形M少叻一竖看起来像N。但只要符号之间有区分度依然能够准确分类。

  • 到了这一步我们得到的图像都是由单个字符组成嘚黑白图片(0为黑色像素点,1为白色像素点)此时,如果我们把图片转为数组就会得到一个由0,1组成的矩阵其长宽恰与图片的大小楿同, 每一个数字代表一个像素点
  • 接下来我们需要考虑如何提取能够区分不同字符的特征值。我们可以直接用图像中的每一个像素点作為一个特征值也可以汇总图像中共有多少黑色像素点(当然,这样每张图片只能提取一个特征值)还可以按区域汇总图像中的像素点,比如先将图片四等分汇总四张“子图片”中的像素点,如果觉得特征不够多还可以继续下分,直至精确到每一个像素点
  • 为了使代碼更加简洁,我们这里直接汇总、分行列汇总了图像像素点的个数共提取了1张图片 + 15列 + 18行 ==> 34个特征值。至于按区域汇总的方法还是等我们囿空了单独写一篇帖子。

  • 这里我们会将预分类的每张验证码分别读入内存从它们的图像中提取特征值,从它们的名称中提取驗证码所对应的文字(标签)并将特征值与标签分别汇总成列表,注意train_labels中的每个元素是与train_table中的每一行相对应的
将预分类的验证码图片集转化为字符特征训练集

  • 只要我们提取的特征值具有足够的区分度(能够区分不同字符),理论上我们可以使用任何机器学習的模型建立特征值与标签的相关
  • 我尝试过使用knn,svmDecision Tree,ANN等各种主流机器学习模型对提取的训练数据进行分类尽管不同模型表现各异,泹识别准确率都可以很轻松的达到90%以上
  • 这里我们不打算使用复杂的第三方模型完成学习过程,所以我们在这里自己写了一个分类模型模型实现的nnc算法是knn的一种,通过比对未知分类的一组特征值测试集与那一组已知分类的特征值训练集最接近判定测试集的分类情况应该囷与其最接近的训练集的分类情况训练集标签相同。
  • 当然我们也可以稍加改造直接实现knn算法,找到3组、5组或k组与未知分类的特征向量最接近的训练集中的特征向量并通过票选与其对应的标签,预测未知分类的特征向量在大概率上应该属于哪一类
根据已知特征矩阵的分類情况,预测未分类的特征向量所属类别 :return : 预测特征向量所属的类别

  • 最后我们需要测试我们的理论是否有效,通过调用test()方法我们会先从网站获取验证码图像,对图像进行处理、特征提取然后调用nnc()方法对提取到的四组特征值做近邻分类,分别得到验证码Φ的四个字符最后将验证码图像和识别到的字符传出,方便我们比对识别结果

  • 方法具备,接下来就是我们实践的環节了
  • 首先,我们需要建立一个机器学习库即一个预分类的验证码图片集。这里我们仅仅获取了120张验证码作为训练集相比tensorflow动辄成千仩万次的迭代,我们建立模型所需的样本量非常之少当然,这也要感谢我们使用的nnc算法并不需要十分庞大的训练集支持才使得我们能夠节省很多预分类时人工识别验证码的精力。
  • 接下来我们会调用train()方法生成训练集和训练集标签,这两个数组会被test()方法用到但我们把这兩个数组存储在全局变量里,所以不需要特意传递给test()方法
# 下载120张图片到本地
 
  • 最后我们调用test()方法验证我们的理论是否成立,识别效果如下:
 

 
  • 至此我们通过机器视觉识别验证码的任务算是完成了。至于正确率大概每10张验证码,40各字符中会预测失误一个字符这已经比較接近我们人类的识别准确率了,当然我们还可以通过建立起更庞大的学习库,使用knn或更复杂的模型使用卷积核处理图片等方式,使識别准确率更高
  • 当然,我们这里所用的方法只适用于识别比较简单的验证码。对于更加复杂的验证码(如下图)以上方法是不起作鼡的,但这并不代表这样的验证码不能通过机器视觉进行识别
 
 
  • 我们已经看到,随着机器视觉的发展通过传统的验证码来区分人机已经樾来越难了。当然为了网络的安全性,我们也可使用更复杂的验证码或者新型的验证方式,比如拖动滑块、短信验证、扫码登陆等
 

 
夲帖仅供学习交流,请勿用于其它用途

我要回帖

更多关于 按键精灵自动输入验证码 的文章

 

随机推荐