怎樣找到驗i證碼

&&|&&责编:魏景芳
&&&&北京时间9月17日早间消息,好莱坞艳照门发酵之后,苹果面临空前舆论压力。对此,苹果公司已经在iCloud.com云服务中启用了两步验证系统,在用户访问iCloud.com的各种应用前,要求其首先输入验证码。iCloud云服务已开启两步验证系统(图片来自新浪)&&&&苹果表示,用户在使用Mail、Contacts、Calendar、Reminder、Pages、Numbers和Keynote等iCloud.com应用,都必须输入验证码才能使用。用户在通过网络登录iCloud服务前,会收到一封包含验证码的电子邮件。只有正确输入了验证码,方可访问上述服务。但Find&My&iPhone仍然可以直接用密码访问。  在好莱坞事件爆发后,苹果CEO蒂姆·库克(Tim&Cook)承诺将提高iCloud的安全性,不仅会启用两步验证系统,而且会在设备被修复、iCloud被访问或密码被修改时向用户发送提醒。库克还透露,苹果公司将努力提升用户对两步验证措施的了解。 &&事实上,苹果早在今年6月就开始针对iCloud.com测试两步验证安全措施,远早于iCloud。但该功能直到今天才正式部署。python-i春秋验证码识别 - FreeBuf专栏·i春秋学院
python-i春秋验证码识别
首发专栏:关注
最近在写某网站的自动注册,在注册的过程中遇到一些问题,如js的执行、验证码的识别等等,今天给大家如何用python通过机器学习的方式实现验证码的识别,这次以i春秋验证码为例进行识别,尽可能的用简单的方式给大家讲解。
python+机器学习+验证码识别+源码
最近在写某网站的自动注册,在注册的过程中遇到一些问题,如js的执行、验证码的识别等等,今天给大家如何用python通过机器学习的方式实现验证码的识别,这次以i春秋验证码为例进行识别,尽可能的用简单的方式给大家讲解。
[x] python 2.7 32 位 所需的库 PIL sklearn numpy pandas matplotlib
[x] 数字图像处理基础(中值滤波等)
[x] 机器学习KNN算法
获取验证码
发现i春秋的验证码的url:。
"Cookie":"XXXXXXXXXXXXXX",
"Referer":"https://user.ichunqiu.com/register/index",
"Upgrade-Insecure-Requests":"1",
"User-Agent":"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0. Safari/537.36"
简单写一下下载验证码的代码
url="https://user.ichunqiu.com/login/verify_image?d=6"
for i in range(0,51):
with open("./pic/{}.png".format(i),"wb") as f:
print("{} pic downloading...".format(i))
f.write(requests.get(url,headers=headers).content)
在pic目录下获得50张验证码照片了
验证码处理
ok!既然获取到验证码了,肯定要对验证码进行一定程度的处理!
像上图这样的二维码,怎么做训练么?!最起码要给它去掉脸上的雀斑(点点),修复脸上的刀疤(条纹),怎么办呢?难道要寄出神器PS?不存在的,兄die! 我们要做的是批量处理,用ps一张张的人工处理,很明显不符合懒人的风格,怎么办?
下面肯定是祭出数字图像处理了,有些同学看到这里就发怵,没关系,这里没有什么技术难度的!相信我,也相信自己。我突然,发现我有给人灌鸡汤的天赋!下面正式开始讲解!
1.首先,观察原图像(t2.png)!即是不是发现它的色彩十分多呀!在数字图像领域中,我们一般研究灰度图像,那么?问题来了什么是灰度图像呢?简单地说,整幅图片都是灰色的!原图片经过灰度处理是这样的。
是不是发现它的色彩十分多呀!在数字图像领域中,我们一般研究灰度图像,那么?问题来了什么是灰度图像呢?简单地说,整幅图片都是灰色的!原图片经过灰度处理是这样的。
是不是都是灰色的呢?但是我们得到的灰度图,有些地方比较浅,有些地方颜色比较深,这是为什么呢?下面是重点内容,都给我听好啦!图像在计算机中是用&u&矩阵&/u&进行存储的,可能,你不知道矩阵是什么东西。那少年我推荐你一本《工程数学 线性代数 》看完一遍保你收获颇丰!当然啦,实在不想看,可以去百度百科呀,,怎么样我贴心吧?!矩阵中每一个数代表着一个像素!数值的大小反映在图像中就是图像的深浅!值越大,颜色越深! 这就说明了,灰度图中颜色深浅的问题,好吧!道理我都懂,怎么转化成灰度图呢?代码如下:
是不是都是灰色的呢?但是我们得到的灰度图,有些地方比较浅,有些地方颜色比较深,这是为什么呢?下面是重点内容,都给我听好啦!图像在计算机中是用&u&矩阵&/u&进行存储的,可能,你不知道矩阵是什么东西。那少年我推荐你一本《工程数学 线性代数 》看完一遍保你收获颇丰!当然啦,实在不想看,可以去百度百科呀,,怎么样我贴心吧?!矩阵中每一个数代表着一个像素!数值的大小反映在图像中就是图像的深浅!值越大,颜色越深! 这就说明了,灰度图中颜色深浅的问题,好吧!道理我都懂,怎么转化成灰度图呢?代码如下:
# encoding=utf-8from PIL import Image,ImageFilterimport matplotlib.pyplot as pltimport numpy as npimport pandas as pdimport matplotlib.cm as cm# 导入相应的库img=Image.open(“t2.png”)# 载入t2.pngim=img.convert(“L”)# 这里重点!img图像转化为灰度图像im、plt.subplot(4,2,1)# 关于plt这个用法在网上有很多教程,我在这里就不一一赘述了plt.imshow(np.array(im),cmap=cm.gray)
2.现在我们得到灰度图像:
观察发现,验证码都是深颜色的,要不把浅颜色的“雀斑”去掉,怎么去掉呢?肯定在矩阵中找一个值(一般称之为阈值),小于这个值的数都变成零(白色),大于这个数的值都变成最大值(黑),咦!灰度图像变成了黑白图像!怎么找这个阈值呢?一般用矩阵的平均数或者中位数,纳尼?什么是中位数,找一个小学课本翻一番。好!那我们分别取平均数和中位数,做一下处理看一下效果!
平均数效果如下:
中位数效果如下:
那么肯定是用平均数做呀!代码如下!
# encoding=utf-8from PIL import Image,ImageFilterimport matplotlib.pyplot as pltimport numpy as npimport pandas as pdimport matplotlib.cm as cmimg=Image.open(“t2.png”)im=img.convert(“L”)#plt.imshow(img)im_z=np.array(im)# im转化为im_z矩阵print(im_z.mean())# im_z的平均值print(np.median(im_z))# im_z的中位数plt.subplot(4,2,1)plt.imshow(np.array(im),cmap=cm.gray)plt.subplot(4,2,2)plt.imshow(img)im_b=im.point(lambda i:i&197,mode=*)# 用im_z的平均值197转化为黑白图像im_bplt.subplot(4,2,3)plt.imshow(im_b)# 显示im_bim_a=im.point(lambda i:i&220,mode=*)# 用im_z的平均值220转化为黑白图像im_aplt.subplot(4,2,4)plt.imshow(im_a)# 显示im_a
3.得到黑白图像了,可还是有“雀斑”怎么办,用上神奇的中值滤波啦!定义,一般都是在灰度图上进行中值滤波,我也是突然想看一下,在黑白图像的处理结果怎么样(当然,这里的中值只能是零或一啦),结果还不错!
在这里要说的是,中值滤波这个概念,比较容易理解,我这个小菜鸡,概括的不怎么样!只能委屈大家看一下优秀的博客啦。处理代码如下
# encoding=utf-8from PIL import Image,ImageFilterimport matplotlib.pyplot as pltimport numpy as npimport pandas as pdimport matplotlib.cm as cmimg=Image.open(“t2.png”)im=img.convert(“L”)#plt.imshow(img)im_z=np.array(im)print(im_z.mean())print(np.median(im_z))plt.subplot(4,2,1)plt.imshow(np.array(im),cmap=cm.gray)plt.subplot(4,2,2)plt.imshow(img)im_b=im.point(lambda i:i&197,mode=*)plt.subplot(4,2,3)plt.imshow(im_b)im_a=im.point(lambda i:i&220,mode=*)plt.subplot(4,2,4)plt.imshow(im_a)”’#################下面是核心代码###############”’im_f=im_b.filter(ImageFilter.MedianFilter(size=3))# 用 im_b图像进行中值滤波,掩模用的3×3的模板plt.subplot(4,2,5)plt.imshow(im_f)# 显示 im_fplt.show()
4.得到干净的验证码,这样就结束了么?no!no!no! 紧接接着,要把单个的字符分割出来!怎么分割来?下面我会给出代码,在代码中给出解释
# encoding=utf-8from PIL import Image,ImageFilterimport matplotlib.pyplot as pltimport numpy as npimport pandas as pdimport matplotlib.cm as cmimg=Image.open(“t2.png”)im=img.convert(“L”)#plt.imshow(img)im_z=np.array(im)print(im_z.mean())print(np.median(im_z))plt.subplot(4,2,1)plt.imshow(np.array(im),cmap=cm.gray)plt.subplot(4,2,2)plt.imshow(img)im_b=im.point(lambda i:i&197,mode=*)plt.subplot(4,2,3)plt.imshow(im_b)im_a=im.point(lambda i:i&220,mode=*)plt.subplot(4,2,4)plt.imshow(im_a)im_f=im_b.filter(ImageFilter.MedianFilter(size=3))plt.subplot(4,2,5)plt.imshow(im_f)plt.show()”’##########下面是核心代码###############”’im=im_fprint(im.size)a = np.array(im)# im转化为a矩阵pd.DataFrame(a.sum(axis=0)).plot.line() # 画出每列的像素累计值plt.imshow(a,cmap=‘gray’) # 画出图像split_lines = [7,25,44,60,78]# 经过调整过的分割线的合理间距vlines = [plt.axvline(i, color='r') for i in split_lines] # 画出分割线plt.show()
得到图像如下
啧啧啧!我都有点佩服我自己呢!下面要把字符一个个的分割出来!同时要把上边和下边的黑线去掉!
怎么办呢?talk is cheap,show my code!
# encoding=utf-8from PIL import Image,ImageFilterimport matplotlib.pyplot as pltimport numpy as npimport pandas as pdimport matplotlib.cm as cmimg=Image.open(“t2.png”)im=img.convert(“L”)#plt.imshow(img)im_z=np.array(im)print(im_z.mean())print(np.median(im_z))plt.subplot(4,2,1)plt.imshow(np.array(im),cmap=cm.gray)plt.subplot(4,2,2)plt.imshow(img)im_b=im.point(lambda i:i&197,mode=*)plt.subplot(4,2,3)plt.imshow(im_b)im_a=im.point(lambda i:i&220,mode=*)plt.subplot(4,2,4)plt.imshow(im_a)im_f=im_b.filter(ImageFilter.MedianFilter(size=3))plt.subplot(4,2,5)plt.imshow(im_f)plt.show()im=im_fprint(im.size)a = np.array(im)pd.DataFrame(a.sum(axis=0)).plot.line() # 画出每列的像素累计值plt.imshow(a,cmap=‘gray’) # 画出图像split_lines = [7,25,44,60,78]vlines = [plt.axvline(i, color='r') for i in split_lines] # 画出分割线plt.show()#im.crop()”’#################核心代码##########################”’y_min=5y_max=35#设置获取图像的高和宽ims=[]c=1for x_min,x_max in zip(split_lines[:-1],split_lines[1:]):
im.crop([x_min,y_min,x_max,y_max] ).save(str(c)+‘.png’)
# crop()函数是截取指定图像!
# save保存图像!
c=c+1for i in range(1,5):
file_name=“{}.png”.format(i)
plt.subplot(4,2,i)
im=Image.open(file_name).convert(+)
#im=img.filter(ImageFilter.MedianFilter(size=3))
plt.imshow(im)
# 显示截取的图像!plt.show()
得到的图像结果如下!
5.还记得咱们在第一步中获取的50张图片么?没错!把他们都分割出来吧!整理一下代码!
from sklearn.neighbors import KNeighborsClassifier as KNN
from sklearn.externals import joblib
from PIL import Image,ImageFilter
import numpy as np
def imgprocess(name):
path="./pic/{}.png".format(str(name))
img=Image.open(path).convert("L")
th=np.array(img).mean()
im_b = img.point(lambda i: i & th, mode='1')
im_f= im_b.filter(ImageFilter.MedianFilter(size=3))
split_lines = [7, 25, 43, 61, 79]
y_max = 35
for x_min, x_max in zip(split_lines[:-1], split_lines[1:]):
im_f.crop([x_min, y_min, x_max, y_max]).save('./pic2later/{}-{}.png'.format(str(name),str(c)))
for i in range(1,51):
print("process {} pic".format(i))
imgprocess(i)
机器学习之KNN
1.关于knn算法呢,我以前做过一些笔记,我po上去了
密码: gizr
大家记得看一下!
2.相应的代码及注解
from sklearn.neighbors import KNeighborsClassifier as KNN
from sklearn.externals import joblib
from PIL import Image,ImageFilter
import numpy as np
def imgprocess(name):
path="./pic/{}.png".format(str(name))
img=Image.open(path).convert("L")
th=np.array(img).mean()
im_b = img.point(lambda i: i & th, mode='1')
im_f= im_b.filter(ImageFilter.MedianFilter(size=3))
split_lines = [7, 25, 43, 61, 79]
y_max = 35
for x_min, x_max in zip(split_lines[:-1], split_lines[1:]):
im_f.crop([x_min, y_min, x_max, y_max]).save('./pic2later/{}-{}.png'.format(str(name),str(c)))
for i in range(1,51):
print("process {} pic".format(i))
imgprocess(i)
###########下面是核心代码#####################
with open("./pic/reslut.txt") as f:
Y=list(f.read().replace("\n",""))
def getX():
path="./pic2later/{}-{}.png"
for i in range(1,51):
for c in range(1,5):
img=Image.open(path.format(str(i),str(c)))
ls = np.array(img).tolist()
for l in ls:
for x in l:
xx.append(x)
X.append(xx)
def train():
knn = KNN()
knn.fit(getX(), Y())
joblib.dump(knn,"./model.pkl")
写到这里了,干脆把预测代码也写一下吧!跟训练代码差不多!
from sklearn.neighbors import KNeighborsClassifier as KNN
from sklearn.externals import joblib
from PIL import Image,ImageFilter
import numpy as np
MODEL_PATH="./model.pkl"
def getX(file_name):
img=Image.open(file_name).convert("L")
th=np.array(img).mean()
im_b = img.point(lambda i: i & th, mode='1')
im_f = im_b.filter(ImageFilter.MedianFilter(size=3))
split_lines = [7, 25, 43, 61, 79]
y_max = 35
for x_min, x_max in zip(split_lines[:-1], split_lines[1:]):
ls=np.array(im_f.crop([x_min, y_min, x_max, y_max])).tolist()
for l in ls:
for x in l:
xx.append(x)
X.append(xx)
def predict(file_path):
knn=joblib.load(MODEL_PATH)
X=getX(file_path)
Y=knn.predict(X)
return "".join(Y)
print(predict("./pic/1.png"))
1.预测结果可能不准确,原因是因为只有50张验证码进行训练
2.懒得对它进行评估了,你们随意就好
3.验证码识别的一般套路: 灰度化、图像处理、二值化、选算法、训练、评估调整参数、预测,当然,我在这里二值化与处理的顺序换了一下,灵活处理哈!
在下载代码之前先说几句!自己先运行一下train()函数重新生成model.pkl,在进行预测!至于为什么,32 位与 64 位是不兼容的!最后!厚着脸皮!腆着脸!说要!要点赞!要回复哟!嘤嘤嘤!
有什么问题可以,在评论区提问哟!
密码在这里!密码在这里!密码在这里!密码在这里!密码在这里!
必须您当前尚未登录。
必须(保密)
可以给我们打个分吗?苹果对网页版iCloud实行验证码安全保护措施_网易手机
苹果对网页版iCloud实行验证码安全保护措施
用微信扫码二维码
分享至好友和朋友圈
  苹果开始对网页版 iCloud 实行两步验证流程,包括对 iCloud.com 的邮件、联系人、日历、备忘录、提醒事项和 iWork 套件。这种两步验证方法最初只对 Apple ID 实行,直到现在才应用于其他服务,如 iCloud。   两步验证流程要求用户输入验证码,这个验证码将会发送到用户的 iOS 设备。只有输入验证码之后才能使用 iCloud 网页应用。iCloud.com 里面的 Find My iPhone 是唯一不需要验证码的服务。  苹果在页面上添加了一个“在此浏览器记住”,说明用户只需要输入一次验证码,下次再访问将无需输入。但是目前似乎只限于部分账号,因此还无法确定苹果是否将此功能作为固定功能推出,还是仅在测试。用户依次输入密码和四位数的验证码后,图标上的“锁”才会打开,允许用户访问。  两步验证流程最初是在去年 3 月在美国推出。随后开始在澳大利亚、爱尔兰、新西兰、英国、加拿大、法国、德国、意大利、日本和西班牙推出。
[文章纠错]
本文来源:威锋网
责任编辑:王晓易_NE0011
用微信扫码二维码
分享至好友和朋友圈
加载更多新闻
热门产品:   
:        
:         
热门影院:
阅读下一篇
用微信扫描二维码
分享至好友和朋友圈您需要通过验证再能继续浏览 3秒后开始验证
丨 粤ICP备号-10 丨 新三板上市公司威锋科技(836555)
增值电信业务经营许可证:
Powered by Discuz!
(C) Joyslink Inc. All rights reserved 保留所有权利}

我要回帖

更多关于 i站不显示验证码 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信