• 【python】入门级识别验证码


    前情:这篇文章所提及的内容是博主上个暑假时候做的,一直没有沉下心来把自己的心得写在纸面上,所幸这个假期闲暇时候比较多,想着能写多少是多少,于是就有了此篇。

    验证码?我也能破解?

    关于验证码的介绍就不多说了,各种各样的验证码在人们生活中时不时就会冒出来,博主身为东北大学的学生,日常接触最多的就是教务处系统的验证码了。
    东大的验证码一直被学生吐槽,太难输入了,不仅区分大小写,有些时候你明明输入正确了,却提示出错,而这个时候 禁止你的左键复制 也许该弹出来了。
    (不过16-17学年度教务处更改了验证码的内容,更方便人类操作了。)

    原始验证码

    可以看出教务处的验证码十分有规律,每个字母数字的大小位置形状等等都是固定的,这正适合毫无基础的初学者进行验证码的识别。

    识别办法

    模拟登陆有着复杂的步骤,在这里咱们不管其他操作,只负责根据输入的一张验证码图片返回一个答案字符串。

    我们知道验证码为了制作干扰,会把图片弄成五颜六色的样子,而我们首先就是要去除这些干扰,这一步就需要不断试验了,增强图片色彩,加大对比度等等都可以产生帮助。

    增强

    选出全黑像素

    在经过各种对图片的操作之后,终于找到了比较完美的去除干扰方案。可以看到在去除干扰之后,最优情况下,我们将得到一张十分纯净的黑白字符图片。一张图片上有四个字符,没办法一下子就把四个字符全部识别,需要把图片进行裁剪,裁剪成每张小图只有一个字符的样子,再对每张图片分别进行识别。

    6

    +

    5

    =

    接下来就是识别文字了,我们首先把得到的小图转换成01表示的矩阵,每个矩阵代表一个字符。
    比如数字六的矩阵

    num_6=[
    0,0,0,0,0,0,0,0,0,0,0,0,0,
    0,0,0,0,0,0,0,0,0,0,0,0,0,
    0,0,0,0,0,1,1,0,0,0,0,0,0,
    0,0,0,0,1,1,1,0,0,0,0,0,0,
    0,0,0,1,1,1,0,0,0,0,0,0,0,
    0,0,0,1,1,0,0,0,0,0,0,0,0,
    0,0,1,1,0,0,0,0,0,0,0,0,0,
    0,0,1,1,0,0,0,0,0,0,0,0,0,
    0,1,1,1,1,1,1,1,0,0,0,0,0,
    0,1,1,1,1,1,1,1,1,0,0,0,0,
    0,1,1,0,0,0,0,1,1,1,0,0,0,
    0,1,1,0,0,0,0,0,1,1,0,0,0,
    0,1,1,0,0,0,0,0,1,1,0,0,0,
    0,1,1,1,0,0,0,1,1,1,0,0,0,
    0,0,1,1,1,1,1,1,1,0,0,0,0,
    0,0,0,1,1,1,1,1,0,0,0,0,0,
    0,0,0,0,0,0,0,0,0,0,0,0,0,
    0,0,0,0,0,0,0,0,0,0,0,0,0,
    0,0,0,0,0,0,0,0,0,0,0,0,0,
    0,0,0,0,0,0,0,0,0,0,0,0,0,
    ]
    

    远远望过去,眯着眼睛还是能分辨出来的。
    因为东大教务处的验证码十分规整,每个数字所在的位置都是固定的,所以并不需要涉及什么机器学习的算法,只是简单的进行一下矩阵的比对就可以了,在所有的实现做好的矩阵中找到相似度最高的矩阵就可以了,在这里的比对方法多种多样,反正数据简单能正确识别出来就好。

    至此,咱们的验证码识别工作就结束了。

    小结

    这次进行的验证码识别主要采用python的PIL进行图片操作,模拟登陆自动填写验证码的全部代码请看

    xfangfang’s Github

    关于NEU教务处模拟登陆教程的其他部分敬请期待!!!

  • 相关阅读:
    项目成本管理(三)
    项目成本管理(二)
    项目成本管理(一)
    男士香水
    荷兰猛兽-梅尔文训练体能
    PP学习笔记-业务基础
    SAP入行就业
    PP学习笔记02
    BZOJ 3012: [Usaco2012 Dec]First! 字典树 + tarjan
    CF319E Ping-Pong 线段树 + vector + 思维
  • 原文地址:https://www.cnblogs.com/xfangs/p/6500611.html
Copyright © 2020-2023  润新知