关键字: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. JS事件及其兼容用法

    JavaScript与HTML之间的交互是通过事件实现的.事件,就是文档或浏览器窗口中发生的一些特定的交互瞬间. 1.事件流:描述的是从页面中接收事件的顺序. IE提出的事件冒泡流:事件开始由最具体的 ...

  2. JS监听div的resize事件

    原文地址:http://zhangyiheng.com/blog/articles/div_resize.html 需求 开发过程中经常遇到的一个问题就是如何监听一个div的size变化. 比如我用c ...

  3. [Apio2012]dispatching

    [Apio2012]dispatching 时间限制: 1 Sec  内存限制: 128 MB 题目描述 在一个忍者的帮派里,一些忍者们被选中派遣给顾客,然后依据自己的工作获取报偿.在这个帮派里,有一 ...

  4. 遇到looper之类关于消息循环的

    原因大概是因为无法创建消息循环,这时候要考虑函数是否要在主线程或者不在主线程中进行,改一下即可

  5. js实现类似iphone的秒表-添加平均数功能

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta name ...

  6. 将HTML导出生成word文档

    前言: 项目开发中遇到了需要将HTML页面的内容导出为一个word文档,所以有了这边随笔. 当然,项目开发又时间有点紧迫,第一时间想到的是用插件,所以百度了下.下面就介绍两个导出word文档的方法. ...

  7. Web自动化之Headless Chrome编码实战

    API 概览 && 编码Tips 文档地址 github Chrome DevTools Protocol 协议本身的仓库 有问题可以在这里提issue github debugger ...

  8. Java 逆变与协变的名词说明

    最近在研究Thinking in Java的时候,感觉逆变与协变有点绕,特意整理一下,方便后人.我参考于Java中的逆变与协变,但是该作者整理的稍微有点过于概念化,我在这里简单的说一下 我对于协变于逆 ...

  9. CentOS 6.9上安装mysql-5.6.36

    CentOS 6.9上安装mysql-5.6.36 1.准备数据存放的文件系统 新建一个逻辑卷,并将其挂载至特定目录即可.这里不再给出过程. 这里假设其逻辑卷的挂载目录为/data,而后需要创建/da ...

  10. 如何移除HTML5的type=""number""的input标签的上下箭头

    初次使用input的数字输入类型type="number"时会发现默认有个上下的箭头,如下图: 很明显这里不需要这个默认箭头,那么我们如何移出这个默认样式呢? 第一种方式,写css ...