在邦购登陆时,选择了人工检验验证码,这次用机器检测试试。
先说基本逻辑:载入图像,转灰度,二值化,连通域检测,去除连通域小的,根据各连通域的范围切割图像。
先下载图片。
def getcaptcha():
for i in range(1,10):
with open('test1-{}.png'.format(i),'wb') as f:
url ='https://passport.banggo.com/CASServer//custom/loginCode.do'
res = requests.get(url,stream =True)
f.write(res.content)
得到的验证码长这样:
可以看到验证码有干扰线,好在干扰线比较细,而且验证码之间没有粘连。看看别家怎么弄得,在python验证码识别
写到了一些验证码识别的方法,但是几乎都是针对像素级别,不过提供了一个思路叫连通域,就是一个笔画里含有的像素较多,删除那些小的联通域就能去除干扰线了。
我看到的大多是自己写的像素级别的函数,既然这是降噪领域的主要思想,就会有现成的轮子啊,直到我发现了scikit-image,有自己的文档,这篇文章进行了少量总结api总结,搬运如下