《python识别验证码》

上一篇博文《模拟登陆》中遇到了一个问题:由于登陆需要输入验证码,而没能模拟登陆成功,今天刚好借着开题有点时间,因此就研究了下这个问题,百度了下,发现这个问题还是挺复杂的,但是,对于只含有“数字”的验证码,还是挺容易的。

程序需要PIL库和pytesser库支持。
关于PIL可以直接用官网下载。
关于pytesser可以到这里下载:到时候我提供给一个连接。
关于pytesser的使用:直接加压缩后,放在程序的相同目录下。

对一般数字型的验证码的识别实现代码如下:

#encoding=utf-8
#Author:wuranghao
#Date :2015年12月17日20:29:21
#HomePage :http://write.blog.csdn.net/postlist
#email:[email protected]
#function:get verify

from pytesser import *
import Image
#第一步:打开图像
im=Image.open("example_3.jpg")
#第二步:把彩色图像转化为灰度图像
imgry=im.convert('L')
#第三步:把图像中的噪声去除掉这里的图像比较简单,直接阈值化就行了。我们把大于阈值threshold的像素置为1,其他的置为0。
#对此,先生成一张查找表,映射过程让库函数帮我们做。
threshold=140
table=[]
for i in range(256):
    if i<threshold:
        table.append(0)
    else:
        table.append(1)
##映射
out=imgry.point(table,'1')
##第四步:把图片中的字符转化为文本,采用pytesser中的image_to_string函数
text=image_to_string(out)

print text

上面的程序验证类似简单的检验码是没有问题的。

但是,是没法识别如下的验证码的:

更复杂的图片就更加无法识别了,类似12306网站上面的图片验证码就更复杂了。

测试代码和图片资源可以从这里下载:https://github.com/wojiushimogui/getverify

你可能感兴趣的:(python,验证码,库)