- 论坛徽章:
- 0
|
回复 4# ubuntu_mark
这个只是针对我登陆的网站写的识别代码,使用的PIL库。贴出供你参考。对于新浪那些验证码估计没那么简单能破的。我的验证码识别就是简单的处理下图片,把图片变成黑白,然后切割与库中模板进行异或操作,选取与库图片差别最小的作为识别结果。(验证码识别思路:可以先把验证码下载本地,用PS处理下,RGB单通道、对比度、亮度调整等)
代码:
import Image
import ImageEnhance
import os
result=[]
def verfiy_Identification():
#下载验证码
url = 'http://xx.xx.com/verify'
file("./Initial/1.bmp","wb").write(urllib.urlopen(url).read())
#库图片字典
Font_Pic = {}
#定义初始图片变量
Init_Pic= Image.open("./Initial/1.bmp")
Init_Pic_Cov=Init_Pic.convert('1')
Init_Pic_Cov_Cro_=[]
s = 4
t = 5
w = 13
h = 16
#切割图片
for a in range(4):
Init_Pic_Cov_Cro = Init_Pic_Cov.crop((s+9*a,t,w+9*a,h))
Init_Pic_Cov_Cro_.append(Init_Pic_Cov_Cro)
#Init_Pic_Cov_Cro_[a].save("./Initial/"+str(a)+".png")
for b in range(10):
Font_Pic=Image.open("./font/"+str(b)+".bmp")
value=[]
for y in range(11):
for x in range(9):
Font_Pic.putpixel((x,y), Init_Pic_Cov_Cro_[a].getpixel((x,y)) ^ Font_Pic.getpixel((x,y))) #统计白色点数目
value = list(Font_Pic.getdata())
result.append(value.count(255))
#print value.count(255),
#print "\n"
#---------------------------------
#寻找列表最小值,返回其位置
#--------------------------------
def getMinIndex(my_list):
min = my_list[0]
for i in my_list:
if i < min:
min = i
return my_list.index(min)
if __name__=="__main__":
verfiy_Identification()
name1=getMinIndex(result[0:10])
name2=getMinIndex(result[10:20])
name3=getMinIndex(result[20:30])
name4=getMinIndex(result[30:40])
#print name1,name2,name3,name4,
newname=str(name1)+str(name2)+str(name3)+str(name4)
os.rename("./Initial/1.bmp","./Initial/"+newname+".bmp")
print newname
附:
此程序识别的验证码 ,无歪曲粘连,数字间距相等,练手用很合适。
|
|