您的位置:首页 > 编程语言 > Python开发

python使用PIL库将登陆验证码二阀值,调用百度识图接口baidu-aip进行验证码文字的获取,自动登录再也不怕遇到验证码登录啦

2020-06-09 18:11 323 查看

在使用selenium自动登录某个网站进行数据爬取的时候,在需要登录的时候都会遇到图片验证码的问题,下面给大家分享一下如何识别图片验证码。

思路:获取登录验证码图片>>>将验证码二阀值处理>>>图片交给百度AI识图>>>识别文字交给selenium进行自动登录

在开始之前,我们需要去百度AI平台注册一个账号,链接: https://ai.baidu.com/.这个只要注册个账号进去就可以了,然后点击控制台-文字识别

下面我们需要创建一个应用:

点进去一顿操作,这个不会可以度娘一下,就不多介绍了,我们只需要进去将AI平台的SDK接口文件下载下来就可以了,因为我使用是python语言,所以就用python的做介绍。


在使用python的SDK文件的时候,我们需要安装依赖的包baidu-aip 2.2.18.0 这个需要下载。
将刚才我们下载的SDK文件放到代码目录下面,这个要注意因为文件路径不对容易报错:

一切准备就绪我们就可以找一张验证码图片进行二阀值测试:

from aip import AipOcrfrom PIL import Image

def image_black():
image = Image.open(file_path)  # 打开图片文件
image = image.convert("L")
threshold = 130  # 指定二值化的阈值,根据情况调
table = []
for i in range(256):
if i < threshold:
table.append(0)
else:
table.append(1)
image = image.point(table, '1')  # 由PIL将图片二值图片后,0代表黑色,1代表白色
# image.show()
image.save(image_path)

通过上面的代码,将图片传进去让图片黑白化,这样处理过的话,进行百度识图的时候就可以更准确,在对于一些复杂的验证码图片处理再好不过了:

二值化的阀值可以根据图片进行调整,这里我使用的是130。
验证码图片处理完成后,我们就把这张图片交个AI识图,刚才我们下载了python的SDk文件,通过:

from aip import AipOcr

调用aip文件下面的一个AIPOcr类,使用这个的前提是把python的SDK文件放到你的工程下面,下面就是展示代码部分:

def baidu_ocr(picfile):  #picfile图片文件的路径

APP_ID = ''  # 这是你产品服务的appid
API_KEY = ''  # 这是你产品服务的appkey
SECRET_KEY = ''  # 这是你产品服务的secretkey
client = AipOcr(APP_ID, API_KEY, SECRET_KEY)
with open(picfile, 'rb') as f:
img = f.read()
message = client.basicAccurate(img) #高精度识别函数
for text in message.get('words_result'):
data = text.get('words')
print(data.replace(" ", ""))

这里的APP_ID、 API_KEY、SECRET_KEY是你在百度AI平台创建的一个应用对应的三个值,创建好填进去就OK了:

通过这两个函数,我们就可以将一张图片验证码的文字提取出来,当然有人会说,不用将图片进行二阀值,直接调用百度AI文字识别的接口,就可以获取图片验证码的文字了,这里我测试过了是可以的,但对于一些复杂色彩的验证码识别的准确度却降低了。

这里是终端打印出来的验证码文字,虽然简单的两个函数,但对于刚入门的我却花了好几天,希望对遇到这方面困扰的小伙伴有所帮助。

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐