看看资深程序员是如何教你破解图形验证码!这不很简单嘛!

python学习网 2018-06-14 07:52:01
看看资深程序员是如何教你破解图形验证码!这不很简单嘛! 1)图形验证码 图形验证码应该是最简单的一种验证码,这种验证码是最早出现,也是目前最常见的,一般组成规则是4个字母或数字或混合组成; 看看资深程序员是如何教你破解图形验证码!这不很简单嘛! 2)滑动验证码 看看资深程序员是如何教你破解图形验证码!这不很简单嘛! 3)点触验证码 看看资深程序员是如何教你破解图形验证码!这不很简单嘛! 看看资深程序员是如何教你破解图形验证码!这不很简单嘛! 看看资深程序员是如何教你破解图形验证码!这不很简单嘛! 看看资深程序员是如何教你破解图形验证码!这不很简单嘛! 下面这种,下2篇文章会介绍; 看看资深程序员是如何教你破解图形验证码!这不很简单嘛! 识别图形验证码需要安装 tesserocr 这个库,下面介绍下tesserocr; 看看资深程序员是如何教你破解图形验证码!这不很简单嘛! 3 环境准备 windows下的安装 在Windows下,要先下载tesseract,它为tesserocr提供了支持; tesseract下载地址:https://digi.bib.uni-mannheim.de/tesseract/ 打开后,可以看到各种exe的列表,可以随便挑选; 其中文件名中带有dev的为开发版本,不带dev则为稳定版本,例如jb是下载 tesseract-ocr-setup-3.05.01.exe; 看看资深程序员是如何教你破解图形验证码!这不很简单嘛! 下载后双击,一路点击,直到出现下面这个页面 看看资深程序员是如何教你破解图形验证码!这不很简单嘛! 看看资深程序员是如何教你破解图形验证码!这不很简单嘛! 看看资深程序员是如何教你破解图形验证码!这不很简单嘛! 如何验证tesseract是否安装成功?直接cmd下输入tesseract即可; 成功会直接显示信息; 看看资深程序员是如何教你破解图形验证码!这不很简单嘛! 如果提示'tesseract' 不是内部或外部命令,则是因为没有配置环境变量,手动把tesseract根目录配置到path参数下即可,这块不详细说明; 到此为止,tesseract安装成功啦~ 接下来就 安装tesserocr ,直接pip命令即可: pip3 install tesserocr install 但jb在安装的时候,直接报错: 看看资深程序员是如何教你破解图形验证码!这不很简单嘛! 试过很多种方式,就算使用conda install tesserocr,也一样报错。 看看资深程序员是如何教你破解图形验证码!这不很简单嘛! 经历千辛万苦,终于找到一条可行的命令: conda install -c simonflueckiger tesserocr 看看资深程序员是如何教你破解图形验证码!这不很简单嘛! 最终就安装上tesserocr啦~ 如何验证是否真的安装了?很简单,直接import tesserocr,不报错就说明安装好了; 看看资深程序员是如何教你破解图形验证码!这不很简单嘛! 看看资深程序员是如何教你破解图形验证码!这不很简单嘛! 在不同发行版本运行如上命令,即可完成tesseract的安装; 安装完成后,便可以调用tesseract命令; 默认也是指安装英文语言,如果需要安装其他语言,请看下上面Windows的介绍,一样的处理方案,这里不重复说明; 接下来就是安装tesserocr,直接使用pip安装: pip3 install tesserocr pillow Mac下的安装 在Mac下,首先使用Homebrew 安装ImageMagick 和tesseract库: brew install imagemagickbrew install tesseract --all-languages 接下来再安装tesserocr即可: brew install tesserocr pillow 看看资深程序员是如何教你破解图形验证码!这不很简单嘛! 看看资深程序员是如何教你破解图形验证码!这不很简单嘛! 看看资深程序员是如何教你破解图形验证码!这不很简单嘛! ok,完事具备,那就开始吧,新建项目,把验证码放到项目根目录下; 用tesserocr库来识别验证码: import tesserocrfrom PIL import Image#新建Image对象image = Image.open("3.jpg")#调用tesserocr的image_to_text()方法,传入image对象完成识别result = tesserocr.image_to_text(image)print(result) 看看资深程序员是如何教你破解图形验证码!这不很简单嘛! 结果,运行后,啥都没有??? 接下来jb陷入了困扰,包括调试,找各种文档,最终,把上面调试的验证码换了一个: 看看资深程序员是如何教你破解图形验证码!这不很简单嘛! 替换下图片,再执行一次代码: 看看资深程序员是如何教你破解图形验证码!这不很简单嘛! OK,看到是有数据了,不过输出的是MEEE,跟验证码的ME8E还是有点不一样; 目前两个问题: 看看资深程序员是如何教你破解图形验证码!这不很简单嘛! 看看资深程序员是如何教你破解图形验证码!这不很简单嘛! 结果也跟上面的一样,但网上不建议这么用,原因是据说这种识别效果不如上一种的好; 关于微博验证码为空,使用tesseract输出下原因: tesseract 图片路径 output 看看资深程序员是如何教你破解图形验证码!这不很简单嘛! leptonica 在解析时没有检测到任何dpi; 5 验证码处理 网上找了下信息,比如这张验证码: 看看资深程序员是如何教你破解图形验证码!这不很简单嘛! 可能是验证码内的多余线条干扰了图片的识别; 又比如微博这张: 看看资深程序员是如何教你破解图形验证码!这不很简单嘛! 看看资深程序员是如何教你破解图形验证码!这不很简单嘛! 看看资深程序员是如何教你破解图形验证码!这不很简单嘛! 图片成功转灰了;此时我们再校验一下,发现校验还是MEEE,失败; 看看资深程序员是如何教你破解图形验证码!这不很简单嘛! 传入1的后,即可将图片进行二值化处理: (二值化是指将图像上的像素点的灰度值设置为0或255,也就是将整个图片呈现出明显的只有黑和百的视觉效果) import tesserocrfrom PIL import Imageimage = Image.open("1.jpg")image = image.convert('1')image.show() 看看资深程序员是如何教你破解图形验证码!这不很简单嘛! 这个一看,比上面更模糊了,理所当然的,校验结果会错的更加离谱: 看看资深程序员是如何教你破解图形验证码!这不很简单嘛! 看看资深程序员是如何教你破解图形验证码!这不很简单嘛! 这里说明下,可能有同学对256不明白,这是什么? 首先,我们是把图片置灰处理,灰度图像是一种具有从黑到白256级灰度色阶或等级的单色图像; 对于灰度图像利用阈值得到二值化的图像, 也就是说,我们设定了一个阈值,从0到256,如果灰度图像少于阈值则设置0,大于阈值则设置1,0是黑色,1是白色,这样做,就可以把一个灰度图完全转换二值化图; 可能还是懵逼,直接贴图: 原图 看看资深程序员是如何教你破解图形验证码!这不很简单嘛! 灰度图: 看看资深程序员是如何教你破解图形验证码!这不很简单嘛! 二值图: 看看资深程序员是如何教你破解图形验证码!这不很简单嘛! 在灰度图上,部分色彩是介于白色跟黑色之间,所以通过设置阈值的方法,把这些中间色彩全部转换成黑色跟白色; ok,扯远了,上面把验证码二值图后是长这样的: 看看资深程序员是如何教你破解图形验证码!这不很简单嘛! 而校验结果: 看看资深程序员是如何教你破解图形验证码!这不很简单嘛! good,有所变化, 至少不是MEEE了,那我们继续调,调到一个合适的值; 调了半天,jb放弃了,原因是这个8,不管怎么调都调不到一个合适的值,一直在S、R、B之间徘徊; JB换了个验证码: 上面同样的代码,无修改,二值图如下: 看看资深程序员是如何教你破解图形验证码!这不很简单嘛! 校验结果: 看看资深程序员是如何教你破解图形验证码!这不很简单嘛! oh year,这个能校验出来了~ 还记得我们一开始那个微博验证码吗?我们也来试试,处理后的验证码是这样的~ 看看资深程序员是如何教你破解图形验证码!这不很简单嘛! 结果校验的时候,基本上都空,只有在138的时候会有一点点识别效果,但是压根不搭边; 看看资深程序员是如何教你破解图形验证码!这不很简单嘛! 对比了下,微博验证码跟上面能识别的验证码: 看看资深程序员是如何教你破解图形验证码!这不很简单嘛! 看看资深程序员是如何教你破解图形验证码!这不很简单嘛! 能别识别的,是实心,而不能被识别的,是空心; 实心的好处在于,图像处理后,黑白分明,但是空心在图像处理后,由于线条本来就很细,处理后可能都识别不出来了; 6 小结 本章学习了tesserocr及tesseract的环境搭建,以及如何对图形验证码进行噪音处理,并且讲解灰色图跟二值图的概念; 7 疑难杂症 实际发现,tesserocr仅能解决实心的验证码,对于空心的验证码,依然束手无策,那怎么办呢? 既然图像识别存在误差,那我们就放弃这条路,而是通过其他的方式来获取这个验证码; 比如直接找到生成这验证码的代码二次转化获取验证码,深度学习训练机器识别; 下章预告: 如何获取验证码的生成代码二次处理获取验证码 谢谢大家~ 私信小编01 即可获取源码哦!
阅读(1420) 评论(0)