/captcha-svm

use svm to hack simple captcha

Primary LanguagePython

1   概述

基于Python使用SVM识别简单的验证字符串的完整代码开源分享。

因为目前有了更厉害的新技术来解决这类问题了,但是本文作为初级入门方法,还是具有一定的学习意义的,所以就将源码和相关的素材开源出来。

本文虽然已经不具备太强的实战性和迁移性,但是主要希望能够是以一个有趣的应用点来让对机器学习有兴趣的同学找到入门点。

上面提到的 “更厉害的新技术” 是指 “CNN 卷积神经网络”,这个工具基本上免去了本文介绍的繁杂的图片预处理工作, 而且通用性更强,换一种验证模式,基本上不需要修改任何代码,就可以训练出想要的模型。 但是这部分入门门槛会稍微高一些,后续有机会,会逐渐开一个专题来讲此类高级方法。

总之,最后会有一个结论:传统的字符验证码是完全没有防御自动化的能力了。

输入图片:

./imgs/6937.png

输出字符串:

6937

2   详细原理

奉上完整的识别的源码项目:

https://github.com/zhengwh/captcha-svm

代码有些丑,但是结合原理文档,应该还算是比较清晰的。

关于原理文档请参考博客:

《字符型图片验证码识别完整过程及Python实现》

http://www.cnblogs.com/beer/p/5672678.html

效果:可以对简单的可分割的验证码达到99%以上的识别率。

3   代码环境

  • python 3.5
  • libSVM 自己到官网下载安装
  • ubuntu 16.4或者mac-os下都能正常搭建和运行
  • 其它的依赖关系没有特别要求,缺啥就装啥

4   数据解释

  • origin 原始数据集。
  • bin_clear 二值化且去噪后的图片集。

因为数据包比较大,就不放上来了

  • demo-6937 以6937为例子进行的图像处理效果展示
  • cut_pic 把处理后的图片切割成单位字符后,再进行分类标记的结果值
  • svm_train 和svm训练相关的文件
    • train_pix_feature_xy.txt 用于做训练的SVM特征文件
    • last_test_pix_xy_8.txt 用于做简单检测的SVM特征文件(为了图简单,只包含数字8的特征)
    • svm_model_file 训练完成后保存的模型文件

5   代码解释

  • lib 直接从libSVM官网下载的py库文件,可以使用python调用相应的 .so文件
  • cfg.py 一些全局配置文件
  • img_tools.py 图像素材的预处理工具和库文件
  • svm_features.py 将图像进行特征化的相应工具
  • svm_train.py 对特征文件进行训练和测试,并保存模型
  • predict.py 训练完成后,将整个流程串起来的工具流

6   方案思路

整个学习的过程,主体数据处理部分是一个不断的把信息降维处理的过程。

以图片 6987 为例子:

./imgs/feature-flow.jpeg

7   后续交流

如果有对相关技术有持续关注的兴趣的同学,欢迎加入QQ群: 592109504

或者手机QQ扫码加入:

./imgs/qq-group.jpg