验证码识别,百度AI API和SDK识别验证码

目前要解决验证码,有以下几种方法:

1、用OCR工具,比如tesseract-ocr;
2、利用各类语言编写的识别库;
3、想方法绕过验证码,这种测试中运用的多;

如果验证码稍微复杂,可以先进行一下预处理,去噪点,灰度化和二值化。

百度API验证码

百度AI开发平台
1、注册百度账号、AI开发平台控制台、百度云管理中心创建应用、生成AppKey、SecretKey(程序调用接口是要生成access_token)

可以看到应用免费数量还是挺多的

文字识别

创建应用

2、利用AppKey、SecretKey生成access_token
API文档
获取access_token文档

向授权服务地址https://aip.baidubce.com/oauth/2.0/token发送请求(推荐使用POST),并在URL中带上以下参数:

grant_type: 必须参数,固定为client_credentials;
client_id: 必须参数,应用的API Key;
client_secret: 必须参数,应用的Secret Key;

import requests 

# client_id 为官网获取的AK, client_secret 为官网获取的SK
host = 'https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id=【官网获取的AK】&client_secret=【官网获取的SK】'
response = requests.get(host)
if response:
    print(response.json())
    response.json()['access_token']

3、请求百度orc通用文字识别API
有了access_token之后就可以开始识别请求了。
HTTP 方法:POST
请求URL: https://aip.baidubce.com/rest/2.0/ocr/v1/general_basic
请求头: Content-Type application/x-www-form-urlencoded
请求参数:

  • image : 图像数据,base64编码,要求base64编码后大小不超过4M,最短边至少15px,最长边最大4096px,支持jpg/png/bmp格式,当image字段存在时url字段失效
  • url : 图片完整URL,URL长度不超过1024字节,URL对应的图片base64编码后大小不超过4M,最短边至少15px,最长边最大4096px,支持jpg/png/bmp格式,当image字段存在时url字段失效
import requests
import base64

'''
通用文字识别
'''
request_url = "https://aip.baidubce.com/rest/2.0/ocr/v1/general_basic"
# 二进制方式打开图片文件
f = open('[本地文件]', 'rb')
img = base64.b64encode(f.read())

params = {"image":img}
access_token = '[调用鉴权接口获取的token]'
request_url = request_url + "?access_token=" + access_token
headers = {'content-type': 'application/x-www-form-urlencoded'}
response = requests.post(request_url, data=params, headers=headers)
if response:
    print (response.json())
    response.json()['words_result'][0]['words']
使用数量

百度SDK验证码

腾讯和百度的 AI 接口目前都是免费使用的,不过在使用次数上,两者有区别,但还是能够完全保证日常使用的(PS.腾讯 Ai 提供的SDK只支持Python2,百度的SDK支持Python3,不需要修改)
OCR python SDK document

安装python SDK
# pip install baidu-aip

新建AipOcr

from aip import AipOcr

""" 你的 APPID AK SK """
APP_ID = '你的 App ID'
API_KEY = '你的 Api Key'
SECRET_KEY = '你的 Secret Key'

client = AipOcr(APP_ID, API_KEY, SECRET_KEY)

创建应用

通用文字识别
用户向服务请求识别某张图中的所有文字
可以是图片链接也可以是本地图片,也可以选择配置一些选项。

from aip import AipOcr
import requests
from lxml import etree
from PIL import Image


def get_code_num(file,option=None):
    # clinet登录所需数据    # 需要注册百度智能云获取
    APP_ID = '22544652'
    API_KEY = '1sGuZrTxDKNShw3dmSKRgPwn'
    SECRECT_KEY = 'gy9pAltAnasjiUy210A7eGm2nUwkcYZt'
    client = AipOcr(APP_ID, API_KEY, SECRECT_KEY)

    if type(file)== str:
        print('图片链接')
        """ 调用通用文字识别, 图片参数为本地图片 """
        message = client.basicGeneralUrl(file,option)
    else:
        print('二进制图片')
        """ 带参数调用通用文字识别, 图片参数为本地图片 """
        message = client.basicAccurate(file,option)


    code_text = message['words_result'][0]['words']
    print('识别结果为:', code_text)
    return code_text


if __name__=='__main__':
    headers = {
        'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.121 Safari/537.36'
    }
    # 获取网页源码
    url = 'https://so.gushiwen.org/user/login.aspx?from=http://so.gushiwen.org/user/collect.aspx'
    page_text = requests.get(url=url,headers=headers).text
    # 解析验证码图片img中src属性值
    tree = etree.HTML(page_text)
    code_img_src = 'https://so.gushiwen.org'+tree.xpath('//*[@id="imgCode"]/@src')[0]
    # 读取图片数据并保存
    img_data = requests.get(url=code_img_src,headers=headers).content
    # 将验证码图片保存到了本地
    # 此验证码为gif格式需要转换为jpg格式
    with open('code.jpg', 'wb') as fp:
        fp.write(img_data)
    # 使用PIL模块下的Image函数,将gif格式的图片转化为png格式
    Image.open('code.jpg').save('验证码.png')
    i = open('验证码.png', 'rb')


    """ 如果有可选参数 """
    options = {}
    options["language_type"] = "CHN_ENG"
    # 是否检测图像朝向
    options["detect_direction"] = "true"
    options["detect_language"] = "true"
    # 是否返回识别结果中每一行的置信度
    options["probability"] = "true"

    get_code_num(i.read(),options)
    '''
    # 直接请求图片链接
    img_url = 'https://exp-picture.cdn.bcebos.com/430174fec314f1c5bce791753c27ac5306889d5d.jpg?x-bce-process=image%2Fresize%2Cm_lfit%2Cw_500%2Climit_1'
    get_code_num(img_url)
    '''

你可能感兴趣的:(验证码识别,百度AI API和SDK识别验证码)