关键字: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. AWS Organizations

    AWS Organizations offers policy-based management for multiple AWS accounts and is now generally avai ...

  2. [项目记录]一个.net下使用HAP实现的吉大校园通知网爬虫工具:OAWebScraping

    第一章 简介 本文主要介绍了在.NET下利用优秀的HTML解析组件HtmlAgilityPack开发的一个吉林大学校内通知oa.jlu.edu.cn的爬取器.尽管.Net下解析HTML文件有很多种选择 ...

  3. 给js动态创建的对象绑定事件

    1.使用原生JS动态为动态创建的对象绑定事件 1-1.创建一个function,用来兼容IE8以下浏览器添加事件 function addEvent(el, type, fn) {  if(el.ad ...

  4. nodejs+websocket制作聊天室视频教程

    本套教程主要讲解了node平台的安装,node初级知识.node 服务器端程序响应http请求,通过npm安装第三方包,websocket即时通讯.聊天页面界面制作.拖动原理.拖动效果.遮罩效果.定位 ...

  5. 【Android Developers Training】 89. 最大化的使用谷歌云消息(Google Cloud Messaging)

    注:本文翻译自Google官方的Android Developers Training文档,译者技术一般,由于喜爱安卓而产生了翻译的念头,纯属个人兴趣爱好. 原文链接:http://developer ...

  6. jQuery与原生js实现banner轮播图

    jQuery与原生js实现banner轮播图: (jq需自己加载)(图片需自己加载) <!DOCTYPE html> <html> <head> <meta ...

  7. eclipse从SVN检出项目之后,项目出错

    今天公司把我分配到另一个项目组工作,然后下午使用SVN检出项目,出了问题 1.从SVN检出项目之后,要导入jar包.结果右键项目找不到Build Path,问了大牛才知道是这里的问题,一共四个步骤解决 ...

  8. Js作用域&作用域链

    js构建类 一 构建类的原则 构造函数 等于 原型的constructor //构造函数 function Hero(name,skill){ this.name = name; this.skill ...

  9. Spring MVC 项目搭建 -4- spring security-添加自定义登录页面

    Spring MVC 项目搭建 -4- spring security-添加自定义登录页面 修改配置文件 <!--spring-sample-security.xml--> <!-- ...

  10. 严重: Could not synchronize database state with session org.hibernate.exception.DataException: Could not execute JDBC batch update

    p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Monaco; color: #ff2600 } p.p2 { margin: 0.0px 0 ...