1 概述
基于Python使用SVM识别简单的验证字符串的完整代码开源分享。
因为目前有了更厉害的新技术来解决这类问题了,但是本文作为初级入门方法,还是具有一定的学习意义的,所以就将源码和相关的素材开源出来。
本文虽然已经不具备太强的实战性和迁移性,但是主要希望能够是以一个有趣的应用点来让对机器学习有兴趣的同学找到入门点。
上面提到的 “更厉害的新技术” 是指 “CNN 卷积神经网络”,这个工具基本上免去了本文介绍的繁杂的图片预处理工作,
而且通用性更强,换一种验证模式,基本上不需要修改任何代码,就可以训练出想要的模型。
但是这部分入门门槛会稍微高一些,后续有机会,会逐渐开一个专题来讲此类高级方法。
总之,最后会有一个结论:传统的字符验证码是完全没有防御自动化的能力了。
输入图片:
输出字符串:
6937
2 详细原理
奉上完整的识别的源码项目:
https://github.com/zhengwh/captcha-svm
代码有些丑,但是结合原理文档,应该还算是比较清晰的。
关于原理文档请参考博客:
《字符型图片验证码识别完整过程及Python实现》
http://www.cnblogs.com/beer/p/5672678.html
效果:可以对简单的可分割的验证码达到99%以上的识别率。
3 代码环境
4 数据解释
origin 原始数据集。
bin_clear 二值化且去噪后的图片集。
因为数据包比较大,就不放上来了
5 代码解释
lib 直接从libSVM官网下载的py库文件,可以使用python调用相应的 .so文件
cfg.py 一些全局配置文件
img_tools.py 图像素材的预处理工具和库文件
svm_features.py 将图像进行特征化的相应工具
svm_train.py 对特征文件进行训练和测试,并保存模型
predict.py 训练完成后,将整个流程串起来的工具流
6 方案思路
整个学习的过程,主体数据处理部分是一个不断的把信息降维处理的过程。
以图片 6987 为例子: