《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:wuranghao@foxmail.com
#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

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值