百度API免费使用教程

本文以用【python】调用【百度】【人脸识别API】为例,如果调用其他API可类比

提前声明:作者刚开始学习python,是只菜🐓,水平有限。如有错误欢迎指正!

一. 创建应用与申请密钥

参考文档:https://ai.baidu.com/ai-doc/REFERENCE/Ck3dwjgn3,官方文档已经写的很详细了,可以直接参考

简单来说就是:

①注册/登录百度账号(第一次登录时会进行开发者认证)

②按如下操作创建应用,填写应用名称、应用类型、应用描述等。一个应用就是一个项目板块。

img

img

③应用创建成功后,会生成密钥:App Key, API Key与Secret Key。后两者一会儿获取Access Token时有用,可以先复制下来。

二. 获取Access Token

参考文档:https://ai.baidu.com/ai-doc/REFERENCE/Ck3dwjhhu

Access Token是访问令牌,就是百度发给我们的允许调用他的API的通行证,现在我们有了密钥可以获取了。

官方已经给出了各种语言获取Access Token的代码,我们用python就直接复制python代码即可:

# encoding:utf-8
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())

注意第六行要用刚刚我们获得的API Key与Secret Key分别替换【官网获取的AK】与【官网获取的SK】

在pycharm中运行代码,获得如下结果:

![img](file:///C:\Users\hxz\AppData\Roaming\Tencent\Users\1203729165\QQ\WinTemp\RichOle@I%2]0DE{B3R64CP6MUOJ~T.png)

我们需要的就是画红框的access_token部分,复制它。注意不要复制成了第一个refresh_token。

现在我们获取通行证成功了,可以去调用人脸识别代码了。

三. 调用人脸识别代码

官方参考文档:https://ai.baidu.com/ai-doc/FACE/yk37c1u4t,具体的各种输入与输出参数可直接查阅官方参考文档

同样,文档中已经给出了调用人脸识别代码的各种语言,这里我们仍然选择python:

# encoding:utf-8

import requests

'''
人脸检测与属性分析
'''

request_url = "https://aip.baidubce.com/rest/2.0/face/v3/detect"

params = "{\"image\":\"027d8308a2ec665acb1bdf63e513bcb9\",\"image_type\":\"FACE_TOKEN\",\"face_field\":\"faceshape,facetype\"}"
access_token = '[调用鉴权接口获取的token]'
request_url = request_url + "?access_token=" + access_token
headers = {'content-type': 'application/json'}
response = requests.post(request_url, data=params, headers=headers)
if response:
    print (response.json())
  • 注意,这里我们需要自行修改自己的image、image_type与Access Token参数。Access Token直接复制之前我们获得的即可,image与image_type具体见下表。

参数

必选

类型

说明

image

string

图片信息(总数据大小应小于10M),图片上传方式根据image_type来判断

image_type

string

图片类型 BASE64:图片的base64值,base64编码后的图片数据,编码后的图片大小不超过2M; URL:图片的 URL地址( 可能由于网络等原因导致下载图片时间过长); FACE_TOKEN: 人脸图片的唯一标识,调用人脸检测接口时,会为每个人脸图片赋予一个唯一的FACE_TOKEN,同一张图片多次检测得到的FACE_TOKEN是同一个。

这里我们用本地图片,image_type选择BASE64(当然也可以用另外两种)。

现在我们要获取图片的BASE64码:

低级方法:打开chrome浏览器,将本地图片直接拖入浏览器窗口,然后按F12打开控制台,点击Source选择自己的图片,里面的编码即为图片的BASE64编码,复制后粘贴至image参数后即可(可能会很长很长,但不影响);

高级方法:使用下列代码获取图片的BASE64编码

def lujing(filePath):  # filePath是运行文件的路径,如果外面调用该函数则文件路径是外部文件,后期需要改变路径打开图片
    with open(filePath, 'rb') as f:
        base64_data = base64.b64encode(f.read())
    s = base64_data.decode()
    return s

  • 注意,如果要检测照片中的多个人脸需要修改输入参数max_face_num,因为该参数默认是1(即默认只识别一张最大的人脸,无论照片中包含几张人脸):

参数

必选

类型

说明

max_face_num

uint32

最多处理人脸的数目,默认值为1,仅检测图片中面积最大的那个人脸;最大值10,检测图片中面积最大的几张人脸。

我们像这样在params的一堆输入参数后添加max_face_num,改到我们想要的最多识别人脸数(这里改到最大10)。

设置断点并调试,获得人脸识别结果如下:

经过人工整理,如下:

在注释内写了各个参数的含义,具体的输出参数说明见参考文档。

C:\Users\hxz\AppData\Local\Programs\Python\Python38\python.exe E:/study/python/python1/python1-2.py
{
'error_code': 0,#错误码0,即没有错误;如果出现别的错误码可在官方文档中查询错误类型。
'error_msg': 'SUCCESS',
'log_id': 7545450520145,
'timestamp': 1599873549,
'cached': 0,
'result':
{
    'face_num': 2,
    #检测到的人脸数量
    'face_list':
    #人脸列表
    [{#这是第一张人脸
        'face_token': '83ea81c2ca6665edc26f1ce97aab4b76',
        #face_token是人脸图片的唯一标识,调用人脸检测接口时,会为每个人脸图片赋予一个唯一的FACE_TOKEN,同一张图片多次检测得到的FACE_TOKEN是同一个。
        'location':
        #人脸位置
        {
            'left': 771.25,
            #离图片左侧距离
            'top': 412.8,
            #离图片上侧距离
            'width': 344,
            #人脸宽度
            'height': 351,
            #人脸高度
            'rotation': -27
            #人脸框相对于竖直方向的顺时针旋转角,[-180,180]
        },
        'face_probability': 1,
        #人脸置信度,范围【0~1】,代表这是一张人脸的概率,0最小、1最大。
        'angle':
        #人脸旋转角度参数
        {
            'yaw': 7.39,
            #三维旋转之左右旋转角[-90(左), 90(右)]
            'pitch': 4.46,
            #三维旋转之俯仰角度[-90(上), 90(下)]
            'roll': -30.57
            #平面内旋转角[-180(逆时针), 180(顺时针)]
        },
        'face_shape':
        #脸型
        {
            'type': 'oval',
            #square: 正方形 triangle:三角形 oval: 椭圆 heart: 心形 round: 圆形
            'probability': 0.56
            #置信度,范围【0~1】,代表这是人脸形状判断正确的概率,0最小、1最大。
        },
        'face_type':
        #真实人脸/卡通人脸
        {
            'type': 'human',
            #human: 真实人脸 cartoon: 卡通人脸
            'probability': 1
            #人脸类型判断正确的置信度,范围【0~1】,0代表概率最小、1代表最大。
        }
    },
    {#这是第二张人脸
        'face_token': '482e59227e460b832e24db187e6b64e2',
        'location':
        {
            'left': 279.16,
            'top': 363.27,
            'width': 291,
            'height': 289,
            'rotation': 26
        },
        'face_probability': 1,
        'angle':
        {
            'yaw': -9.57,
            'pitch': -5.38,
            'roll': 23.42
        },
        'face_shape':
        {
            'type': 'square',
            'probability': 0.44
        },
        'face_type':
        {
            'type': 'human',
            'probability': 0.99
        }
    }]
}}

Process finished with exit code 0

本文章使用limfx的vsocde插件快速发布