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

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

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

在开始之前,我们需要去百度AI平台注册一个账号,链接: https://ai.baidu.com/.这个只要注册个账号进去就可以了,然后点击控制台-文字识别
python使用PIL库将登陆验证码二阀值,调用百度识图接口baidu-aip进行验证码文字的获取,自动登录再也不怕遇到验证码登录啦_第1张图片
下面我们需要创建一个应用:
python使用PIL库将登陆验证码二阀值,调用百度识图接口baidu-aip进行验证码文字的获取,自动登录再也不怕遇到验证码登录啦_第2张图片
点进去一顿操作,这个不会可以度娘一下,就不多介绍了,我们只需要进去将AI平台的SDK接口文件下载下来就可以了,因为我使用是python语言,所以就用python的做介绍。
python使用PIL库将登陆验证码二阀值,调用百度识图接口baidu-aip进行验证码文字的获取,自动登录再也不怕遇到验证码登录啦_第3张图片
python使用PIL库将登陆验证码二阀值,调用百度识图接口baidu-aip进行验证码文字的获取,自动登录再也不怕遇到验证码登录啦_第4张图片
在使用python的SDK文件的时候,我们需要安装依赖的包baidu-aip 2.2.18.0 这个需要下载。
将刚才我们下载的SDK文件放到代码目录下面,这个要注意因为文件路径不对容易报错:
python使用PIL库将登陆验证码二阀值,调用百度识图接口baidu-aip进行验证码文字的获取,自动登录再也不怕遇到验证码登录啦_第5张图片
一切准备就绪我们就可以找一张验证码图片进行二阀值测试:
python使用PIL库将登陆验证码二阀值,调用百度识图接口baidu-aip进行验证码文字的获取,自动登录再也不怕遇到验证码登录啦_第6张图片

from aip import AipOcr 
from 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)

通过上面的代码,将图片传进去让图片黑白化,这样处理过的话,进行百度识图的时候就可以更准确,在对于一些复杂的验证码图片处理再好不过了:
python使用PIL库将登陆验证码二阀值,调用百度识图接口baidu-aip进行验证码文字的获取,自动登录再也不怕遇到验证码登录啦_第7张图片
二值化的阀值可以根据图片进行调整,这里我使用的是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了:
python使用PIL库将登陆验证码二阀值,调用百度识图接口baidu-aip进行验证码文字的获取,自动登录再也不怕遇到验证码登录啦_第8张图片
通过这两个函数,我们就可以将一张图片验证码的文字提取出来,当然有人会说,不用将图片进行二阀值,直接调用百度AI文字识别的接口,就可以获取图片验证码的文字了,这里我测试过了是可以的,但对于一些复杂色彩的验证码识别的准确度却降低了。
python使用PIL库将登陆验证码二阀值,调用百度识图接口baidu-aip进行验证码文字的获取,自动登录再也不怕遇到验证码登录啦_第9张图片
这里是终端打印出来的验证码文字,虽然简单的两个函数,但对于刚入门的我却花了好几天,希望对遇到这方面困扰的小伙伴有所帮助。

你可能感兴趣的:(爬虫,百度AI文字识别)