文档章节

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

j_hao104
 j_hao104
发布于 2016/03/25 15:23
字数 1414
阅读 19867
收藏 14

一、探讨 

    识别图形验证码可以说是做爬虫的必修课,涉及到计算机图形学,机器学习,机器视觉,人工智能等等高深领域……
    简单地说,计算机图形学的主要研究内容就是研究如何在计算机中表示图形、以及利用计算机进行图形的计算、处理和显示的相关原理与算法。图形通常由点、线、面、体等几何元素和灰度、色彩、线型、线宽等非几何属性组成。计算机涉及到的几何图形处理一般有 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 


 








    




© 著作权归作者所有

共有 人打赏支持
j_hao104
粉丝 203
博文 67
码字总数 101848
作品 2
程序员
私信 提问
加载中

评论(2)

loongchao
loongchao
学习,总结的不错!
找bug
找bug
对数字 解析有问题。
Python3.6+selenium+pytesser3 实现爬虫:含验证码和弹框的页面信息爬取

最近帮实验室收集整理数据,学习并使用了一下爬虫,本篇 结合实例 系统的整理一下,教你如何写出一个你所需要的爬虫。 一、什么是爬虫 网络爬虫 也叫 网络蜘蛛 ,即 Web Spider,名字非常形象...

weberweber
2017/11/10
0
0
python 验证码问题

tesseract-ocr-setup-3.02.02.exe 下载地址:https://sourceforge.net/projects/tesseract-ocr-alt/files/tesseract-ocr-setup-3.02.02.exe/download?usemirror=jaist&r=https%3A%2F%2Fsourc......

lweihua
2017/06/12
0
0
博客园目录

table标签中thead、tbody、tfoot的作用http://www.cnblogs.com/zhouxinfei/p/8001510.html python selenium模拟滑动操作http://www.cnblogs.com/zhouxinfei/p/8001506.html Selenium webdriv......

_周小董
2017/12/09
0
0
Python图像处理之图片验证码识别

  在上一篇博客Python图像处理之图片文字识别(OCR)中我们介绍了在Python中如何利用Tesseract软件来识别图片中的英文与中文,本文将具体介绍如何在Python中利用Tesseract软件来识别验证码...

jclian91
06/10
0
0
Python外部模块介绍- pyocr 光学字符串识别 验证码破解相关

Python外部模块介绍- pyocr光学字符串识别 2013-05-24磁针石 #承接软件自动化实施与培训等gtalk:ouyangchongwu#gmail.comqq 37391319 博客:http://blog.csdn.net/oychw #版权所有,转载刊登...

长平狐
2013/12/25
1K
0

没有更多内容

加载失败,请刷新页面

加载更多

聊聊flink的MemCheckpointStreamFactory

序 本文主要研究一下flink的MemCheckpointStreamFactory CheckpointStreamFactory flink-runtime_2.11-1.7.0-sources.jar!/org/apache/flink/runtime/state/CheckpointStreamFactory.java /*......

go4it
10分钟前
0
0
注册全局组件

注册全局组件的好处是,可以直接在html中直接调用组件而不用每次都要在vue文件中注册组件,坏处也是很明显的,因为每个vue都默认加载了全局组件,所以全局组件如果非常庞大,会拖慢所有页面的...

Carbenson
15分钟前
0
0
二十分钟教你如何将区块链应用与函数计算相结合

前言 本篇文章适合对区块链应用感兴趣或是想要通过函数计算服务进一步开发区块链应用的新人。本文将结合阿里云区块链服务、阿里云函数计算服务、阿里云日志服务 以及社区应用 Marbles,手把手...

阿里云官方博客
17分钟前
1
0
Double数相加后结果不准确

在我们进行两个double运算时,例如:2..0-1.1 不是想象的输出0.9,而是0.89999999999999999。其主要原因是浮点数值采用二进制系统表示,而在二进制系统中无法精确的表示分数1/10。这就好像十...

嘴角轻扬30
25分钟前
1
0
去除移动端点击效果

移动端点击时,会有一个类似active的短暂背景淡出效果,去除该效果可使用 -webkit-tap-highlight-color: rgba(255, 0, 0, 0);

originDu
26分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部