GithubHelp home page GithubHelp logo

captcha-crack's Introduction

Captcha验证码破解

HACK

本文使用卷积神经网络(CNN)破解CAPTCHA验证码,主要基于参考资料中的两种方案进行了优化和整合,在此致谢!

CAPTCHA验证码

CAPTCHA验证码是目前互联网上常见的一种图灵测试,用来区别“机器”和人类。当然,有了AI的加持,机器也就能像人类一样聪明地识(破)别(解)了。

login pic

但是上图中的验证码白底黑字,间距分明,显得过于简单了,为了增加挑战性,采取了以下这种验证码。而且,在Python中,可以通过加载capthcha.image工具库就能轻松地生成。

captcha example

使用方法:

工具

Python 3 keras 2.0 (2.0以前版本会有编译错误) OpenCV

步骤

  1. 运行captcha_generator.py生成并保存验证码图片,可根据需要修改训练集的数量。
  2. 运行model.py进行卷积神经网络训练,模型和权重保存为captcha_model.hdf5
  3. 运行predict_with_model.py,加载权重文件,进行预测。

破解方法详解

参考资料1中的破解方法简单粗暴,构建了一个很深的神经网络,然后把整张图片喂给模型训练,对应4个字符标签。这个模型比较复杂,而且如果用CPU来计算时间就很长了。我想到,如果能够先把图片预处理一下,识别出原图中4个字符的位置,然后单独训练,不就能大大简化训练模型和计算量了嘛。于是,进行了图片预处理和采用了两层卷积模型。

图片预处理

在把图像转换为灰度图像后,用OpenCV中的findContours函数能帮助我们轻松找到轮廓边界。但是,问题来了,原图中的噪声点(线)会干扰边界判断。用cv2.medianBlur(img, filter_size)就能很好地解决这一类似胡椒面问题,把符合filter_size的噪点过滤掉,然后就基本准确地识别出每个字符的边界了。

pipeline

如果两个或多个字符黏连,那长宽比肯定会异常,就进行一下切割。

split

卷积神经网络模型

两层的网络就足够啦。

model structure

15代训练后,单个字符的准确率为97.7%,CPU计算时间,大概5分钟不到。

acc

预测和评估

使用训练完的权重进行预测,把四个字符标签都一一对应算作识别成功,准确率大概在50%。考虑到可以让程序不断尝试提交,在网速能保证的情况下基本满足要求。

predict

尾声

所谓魔高一尺道高一丈,现在新型验证码层出不穷,就是为了防止不(聪)法(明)分(机)子(智)破解的。 比如下面这种需要滑动鼠标拼图的,原理是检测鼠标运动轨迹。网上也已经有破解攻略了。

slide code

但是,遇到12306这种丧心病狂的,也只能尴尬地微笑了o( ̄︶ ̄)o

12306

参考资料:

  1. 使用深度学习来破解 captcha 验证码
  2. 仅需15分钟,使用OpenCV+Keras轻松破解验证码
  3. 滑块验证码(滑动验证码)相比图形验证码,破解难度如何?

captcha-crack's People

Contributors

uranus4ever avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.