一、探讨

识别图形验证码可以说是做爬虫的必修课,涉及到计算机图形学,机器学习,机器视觉,人工智能等等高深领域……
    简单地说,计算机图形学的主要研究内容就是研究如何在计算机中表示图形、以及利用计算机进行图形的计算、处理和显示的相关原理与算法。图形通常由点、线、面、体等几何元素和灰度、色彩、线型、线宽等非几何属性组成。计算机涉及到的几何图形处理一般有 2维到n维图形处理,边界区分,面积计算,体积计算,扭曲变形校正。对于颜色则有色彩空间的计算与转换,图形上色,阴影,色差处理等等。

在破解验证码中需要用到的知识一般是 像素,线,面等基本2维图形元素的处理和色差分析。常见工具为:
    •支持向量机(SVM)
    •OpenCV
    •图像处理软件(Photoshop,Gimp…)
    •Python Image Library

二、PIL安装

PIL: Python Imaging Library, 是Python平台的图像处理标准库,功能非常强大。

在Debian/Ubantu Linux下直接通过apt安装:

$ sudo apt-get install python-imaging

Max和其他版本的Linux可以直接使用easy_install或pip安装,安装前需要把编译环境装好:

$ sudo easy_install PIL

Windos平台可以直接去PIL官网下载exe安装包。http://pythonware.com/products/pil/

注:官网提供的安装包是32位的,63位系统请前往这里 http://www.lfd.uci.edu/~gohlke/pythonlibs/#pillow 下载替代包pillow。

三、一般思路

验证码识别的一般思路为:

1、图片降噪

2、图片切割

3、图像文本输出

3.1 图片降噪

所谓降噪就是把不需要的信息通通去除,比如背景,干扰线,干扰像素等等,只剩下需要识别的文字,让图片变成2进制点阵最好。

对于彩色背景的验证码:每个像素都可以放在一个5维的空间里,这5个维度分别是,X,Y,R,G,B,也就是像素的坐标和颜色,在计算机图形学中,有很多种色彩空间,最常用的比如RGB,印刷用的CYMK,还有比较少见的HSL或者HSV,每种色彩空间的维度都不一样,但是可以通过公式互相转换。在RGB空间中不好区分颜色,可以把色彩空间转换为HSV或HSL。色彩空间参见 http://baike.baidu.com/view/3427413.htm

验证码图片7039.jpg:

1、导入Image包,打开图片:

from PIL import Image
im = Image.open('7039.jpg')

2、把彩色图像转化为灰度图像。RBG转化到HSI彩色空间,采用I分量:

imgry = im.convert('L')
imgry.show()

灰度看起来是这样的:

3、二值化处理

二值化是图像分割的一种常用方法。在二值化图象的时候把大于某个临界灰度值的像素灰度设为灰度极大值,把小于这个值的像素灰度设为灰度极小值,从而实现二值化(一般设置为0-1)。根据阈值选取的不同,二值化的算法分为固定阈值和自适应阈值,这里选用比较简单的固定阈值。

把像素点大于阈值的设置,1,小于阈值的设置为0。生成一张查找表,再调用point()进行映射。

threshold = 140
table = []
for i in range(256):if i < threshold:table.append(0)else:table.append(1)
out = imgry.point(table, '1')
out.show()

处理结果看起来是这样的:

3.2 图片切割

识别验证码的重点和难点就在于能否成功分割字符,对于颜色相同又完全粘连的字符,比如google的验证码,目前是没法做到5%以上的识别率的。不过google的验证码基本上人类也只有30%的识别率。本文使用的验证码例子比较容易识别。可以不用切割,有关图片切割的方法参见这篇博客:http://www.cnblogs.com/apexchu/p/4231041.html

四、利用pytesser模块实现识别

pytesser是谷歌OCR开源项目的一个模块,在python中导入这个模块即可将图片中的文字转换成文本。

链接:https://code.google.com/p/pytesser/

pytesser 调用了 tesseract。在python中调用pytesser模块,pytesser又用tesseract识别图片中的文字。

4.1 pytesser安装

1、如果没有安装PIL,请到这里下载安装:http://www.pythonware.com/products/pil/

2、安装pytesser,下载地址:http://code.google.com/p/pytesser/ ,下载后直接将其解压到项目代码下,或者解压到python安装目录的Lib\site-packages\下,并将其添加到path环境变量中,不然在导入模块时会出错。

3、下载Tesseract OCR engine:http://code.google.com/p/tesseract-ocr/  ,下载后解压,找到tessdata文件夹,用其替换掉pytesser解压后的tessdata文件夹即可。

4、另外如果现在都是从PIL库中运入Image,没有使用Image模块,所以需要把pytesser.py中的import Image改为from PIL import Image, 其次还需要在pytesser文件夹中新建一个__init__.py的空文件。

ps:如果觉得后面两步比较麻烦,可以直接到云盘中下载    http://yun.baidu.com/s/1jHJvNiI ,操作如步骤2。

4.2 调用pytesser识别

pytesser提供了两种识别图片方法,通过image对象和图片地址,代码判断如下:

from PIL import Image
from pytesser import pytesser
image = Image.open('7039.jpg')
print pytesser.image_file_to_string('7039.jpg')
print pytesser.image_to_string(image)

同时pytesser还支持其他语言的识别,比如中文。具体参见:http://www.tuicool.com/articles/amQJR3

Python验证码识别:利用pytesser识别简单图形验证码相关推荐

  1. html的表单图形验证码怎么做,django中简单图形验证码实现

    要实现django图形验证码,可以使用简单的captcha 一.安装captcha 在Pycharm的terminal中,使用pip安装第三方库: 执行命令: pip install django-s ...

  2. Python验证码识别:利用pytesser识别简单图形

    一.探讨 识别图形验证码可以说是做爬虫的必修课,涉及到计算机图形学,机器学习,机器视觉,人工智能等等高深领域-- 简单地说,计算机图形学的主要研究内容就是研究如何在计算机中表示图形.以及利用计算机进行 ...

  3. python图形验证码识别_Python验证码识别:利用pytesser识别简单图形验证码

    一.探讨 识别图形验证码可以说是做爬虫的必修课,涉及到计算机图形学,机器学习,机器视觉,人工智能等等高深领域-- 简单地说,计算机图形学的主要研究内容就是研究如何在计算机中表示图形.以及利用计算机进行 ...

  4. 利用pytesser识别简单图形验证码

    转自:https://my.oschina.net/jhao104/blog/647326 一.探讨 识别图形验证码可以说是做爬虫的必修课,涉及到计算机图形学,机器学习,机器视觉,人工智能等等高深领域 ...

  5. python matplotlib绘制函数图形_【总结篇】Python matplotlib之使用统计函数绘制简单图形...

    写在前面 作者注:我在这里只总结函数的功能及其用法,程序实例参考链接:link 我们用下面的语句来导入matplotlib库: 1import matplotlib.pyplot as plt 绘制简 ...

  6. laravel图形验证码(借用了TP的图形验证码类)非常好用简单,非常适合前后端分离的项目

    class Captcha extends Controller {//protected $config = array('seKey' => 'jjh', // 验证码加密密钥'codeSe ...

  7. 前端 验证码隐藏怎么实现_完成图形验证码

    使用 svg-captcha 这个包并结合后端实现图形验证码功能. 基本使用 在我们项目中安装 svg-captcha 包. $ npm install svg-captcha --save 官方文档 ...

  8. java验证码局部刷新_JS局部刷新图形验证码

    开发过程当中,网络安全采取的方法之一,采用验证码功能.一般在注册.登录的程序当中见得比较多.其自己在实现这一功能时,静态页面有一段调用图形验证码的PHP文件,//,验证码是随机生成的,一般将生成的验证 ...

  9. 验证码的几种方式-普通图形验证码,滑动拼图,图中点选

    https://blog.csdn.net/zxz_java/article/details/83254469 介绍一些java开源的验证码生成器 普通图形验证码 最为普通的方式,属于比较容易实现,但 ...

  10. 苹果服务器验证码是什么,服务器开发系列--图形验证码到底是怎么回事?

    1.什么是验证码? 验证码是一种区分用户是计算机还是人的公共全自动程序.短时间是无法退出人类舞台的,目前只是尽量提升用户体验. 作用 账号安全 反作弊 反爬虫 防论坛灌水 防恶意注册 分类 图形验证码 ...

最新文章

  1. etcd 笔记(01)— etcd 简介、特点、应用场景、常用术语、分布式 CAP 理论、分布式原理
  2. pandas read_csv ‘utf-8‘ codec can‘t decode bytes in position 1198-1199: invalid continuation byte解决
  3. 一句话说清分布式锁,进程锁,线程锁
  4. C++调用父类的构造函数规则
  5. 透过 OKR 进行项目过程管理
  6. 分页,主要用于python django框架
  7. B1277 [HNOI2002]Tinux系统 树形dp
  8. Node.js的环境搭建
  9. java正则表达式中的坑String.matches(regex)、Pattern.matches(regex, str)和Matcher.matches()
  10. boost 变量类型转换
  11. 电脑打字学习_寒假就这样做!即不让孩子烦,还能让他有进步,开学就能迅速进入学习状态!...
  12. java 怎样 thread dump_怎样分析 JAVA 的 Thread Dumps
  13. xxx is not in the sudoers file 解决方案(转)
  14. python seo百度_Python与seo,百度关键词相关搜索关键词采集源码
  15. 2013 Multi-University Training Contest 1
  16. android 仿ofo页面,GitHub - AndroidProject1212/react-native-ofo: React Native 仿 ofo 共享单车 App...
  17. 图的常见衡量指标及算法调研
  18. 【RPC】序列化与反序列化
  19. 【分享】“小鹅通“在集简云平台集成应用的常见问题与解决方案
  20. Tiled的qbs方式编译记录

热门文章

  1. 转结构体_小型四轮山地自行车的设计机械结构设计模具数控工艺夹具
  2. 早期微信抢红包插件项目分享
  3. 液压系统原理动画_图文讲解液压系统溢流阀分类与工作原理
  4. html5 密码强度,前端开发判断输入密码强度
  5. python脚本读书心得_《利用Python进行数据分析》读书笔记(一)Python Basic
  6. ug区域轮廓铣没有重叠距离_UG编程轮廓铣的切削参数“清理几何体”,360°无死角扫除!...
  7. memcached mysql 类_mysql有没有类似和memcached里那样的CAS版本控制?
  8. 随机计数器java_Java高效计数器
  9. 诺基亚7 android 9,诺基亚7 Plus正式推送安卓9.0系统!
  10. 决策树算法python源代码_CART决策树(Decision Tree)的Python源码实现