关键字:Python,SVM,字符验证码,机器学习,验证码识别

1   概述

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

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

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

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

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

输入图片:

输出字符串:

6937

2   详细原理

完整的识别的源码项目:

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

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

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

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

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

效果:可以对简单的可分割的验证码达到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 为例子:

 
 

7   后续交流

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

或者手机QQ扫码加入:

基于Python使用SVM识别简单的字符验证码的完整代码开源分享的更多相关文章

  1. Python 基于Python及zookeeper实现简单分布式任务调度系统设计思路及核心代码实现

    基于Python及zookeeper实现简单分布式任务调度系统设计思路及核心代码实现   by:授客 QQ:1033553122 测试环境 功能需求 实现思路 代码实践(关键技术点实现) 代码模块组织 ...

  2. 文字识别还能这样用?通过Python做文字识别到破解图片验证码

    前期准备 1. 安装包,直接在终端上输入pip指令即可: # 发送浏览器请求 pip3 install requests # 文字识别 pip3 install pytesseract # 图片处理 ...

  3. 人脸识别系统 —— 基于python的人工智能识别核心

    起因 自打用python+django写了一个点菜系统,就一直沉迷python编程.正好前几天公司boss要我研究一下人脸识别,于是我先用python编写了一个人脸识别系统的核心,用于之后的整个系统. ...

  4. 基于Python+Sqlite3实现最简单的CRUD

    一.基本描述 使用Python,熟悉sqlite3的基本操作(查插删改),以及基本数据类型.事务(ACID).     准备工作:在sqlite3的官网上下载预编译的sqlite文件(windows) ...

  5. 一种基于python的人脸识别开源系统

    今天在搜索人脸识别的文章时,无意中搜到一个比较开源代码,介绍说是这个系统人脸的识别率 是比较高的,可以达到:99.38%.这么高的识别率,着实把我吓了一跳.抱着实事求是的态度.个人 就做了一些验证和研 ...

  6. 基于python的人脸识别(检测人脸、眼睛、嘴巴、鼻子......)

    本文链接:https://blog.csdn.net/James_Ray_Murphy/article/details/79209172 import numpy as np import cv2 # ...

  7. Python反编译调用有道翻译(附完整代码)

         网易有道翻译是一款非常优秀的产品,他们的神经网络翻译真的挺无敌.无奈有道客户端实在是太难用了,而且在某些具体场景 (比如对网站进行批量翻译) 无法使用,而有道的云服务又特别的贵,一般人是无法 ...

  8. Python常用的库简单介绍一下

    Python常用的库简单介绍一下fuzzywuzzy ,字符串模糊匹配. esmre ,正则表达式的加速器. colorama 主要用来给文本添加各种颜色,并且非常简单易用. Prettytable ...

  9. [验证码识别技术]字符验证码杀手--CNN

    字符验证码杀手--CNN 1 abstract 目前随着深度学习,越来越蓬勃的发展,在图像识别和语音识别中也表现出了强大的生产力.对于普通的深度学习爱好者来说,一上来就去跑那边公开的大型数据库,比如I ...

随机推荐

  1. Overfitting&Underfitting Problems

    这次根据结合Google的翻译果然速度快上许多,暂时休息,晚上在传一个exm2的随笔. 关于过度拟合下的问题 考虑从x∈R预测y的问题,下面的最左边的图显示了将\(y=\theta_0+\theta_ ...

  2. 自动适配H5容器(UIViewView/WKWebView),生成长图,防微信进度条

    前段时间撸代码猥琐发育的时候,设计师老王给了张截图某宝APP上一个生成长图分享的功能,正好公司有这个需求,于是在立马开始操练起来!在万能的度娘上搜集整理资料后发现很多文章介绍的方案对WKWebView ...

  3. python 最佳实践与资源汇总

    python 最佳实践 (部分) 一. 结构化工程 文件 功能 README.rst readme LICENSE 许可证 setup.py 打包和发布管理 requirements.txt 开发依赖 ...

  4. 一篇文章让你搞懂 SSL 证书

    关于结婚这件事 那天和同事讨论到底什么才算是真正的「结婚」?这种话题本来是极其不应该存在的.传统意义的领个证书,办个婚礼.吃吃喝喝,但随着社会各族人民身心发展进化,原本那些繁琐流程简直是反人类,貌似现 ...

  5. Could not open input file: composer.phar

    Yii 2官网推荐用Composer安装框架,但是在本地出错:Could not open input file: composer.phar.后来修改了命令行就ok了,难道是我装的Composer跟 ...

  6. php防止浏览器点击返回按钮重复提交数据

    <!--html中存放隐藏域数据--> <input type="hidden" value='{$sun_nums}' name='sub_nums' /> ...

  7. 手机端 图片的移动缩放旋转兼容touch

    //缩放var initialScale = 1;var currentScale = 1;touch.on('#target', 'pinch', function (ev) { currentSc ...

  8. APP测试相关点归纳

    APP测试相关点归纳   1.1测试周期 测试周期可按项目的开发周期来确定测试时间,一般测试时间为一两周,根据项目情况以及版本质量可适当缩短或延长测试时间.正式测试前需确认项目排期. 1.2测试资源 ...

  9. xhr.readyState就绪状态

    0:初始化,XMLHttpRequest对象还没有完成初始化 1:载入,XMLHttpRequest对象开始发送请求 2:载入完成,XMLHttpRequest对象的请求发送完成 3:解析,XMLHt ...

  10. [CF161D]Distance in Tree-树状dp

    Problem Distance in tree 题目大意 给出一棵树,求这棵树上有多少个最短距离为k的点对. Solution 这个题目可以用点分治来做,然而我到现在还是没有学会点分治,所以只好用树 ...