环球视野 中国观察
有态度的金融自媒体平台

听说相貌也能量化 | 调用百度人脸检测API实现颜值打分

Hamermesh 和 Biddle(1994)有关相貌吸引力对工资的影响的那篇论文,在1994年那个年代,想必作者也是被迫使用离散型变量去度量相貌。离散型变量不像连续型变量那样具有足够的变异性,因而我们能从中获取的信息自然也都是“大打折扣”的。在人工智能和机器学习技术飞速发展的今天,如果我们依然想要研究”相貌对XX的影响“,那么大可不必再去使用离散型变量度量相貌,我们已经可以做到使用连续型变量去度量相貌了。

百度AI开放平台为我们提供了人脸检测的API接口,可以实现人脸打分的功能。只要你有照片,那么就可以据此进行人脸打分,这极大方便了我们做相貌吸引力的相关研究。让我们先看看百度人脸检测的威力:

输入图片

1

输出结果

年龄: 22
人脸评分: 79.53
性别: female
脸型: heart

让我们再换一张男性的照片试试

2

输出结果:

年龄: 23
人脸评分: 63.44
性别: male
脸型: square

那么在Python中,我们该如何调用百度人脸识别API接口实现人脸打分功能呢?

第一步 获取access_token

想要调用百度人脸检测的API实现人脸打分,我们首先需要注册成为百度AI开放平台的开发者,然后创建一个应用,获取API Key和Secret Key,将其复制粘贴到下方代码指定位置就好,执行下面的代码就可以生成一个access_token(用户身份验证和授权的凭证)。

注意access_token的有效期为30天,切记需要每30天进行定期更换,或者每次请求都拉取新token。

3

import requests
API_Key='复制你的API Key到这里'
Secret_Key='复制你的Secret Key到这里'
host = 'https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id={}&client_secret={}'.format(API_Key,Secret_Key)
response = requests.get(host)
access_token = response.json()['access_token']
print(access_token)

说明:开发者功能可免费注册,个人用户调用量免费,每秒可调用两次,轻度使用完全足够了,如果需更快的调用速度,那么就需要付费购买,让我们高呼一声“百度良心”。更多注意事项大家可以参见百度官方注册教程http://ai.baidu.com/ai-doc/REFERENCE/Ck3dwjgn3

第二步 图片转为Base64编码

百度人脸检测对图片格式有要求,要求把图片转换为Base64编码,所以我们可以调用python中base64库实现图片转码。大家只需要把图片的本地保存路径复制到下方代码指定位置就好。

import base64
img_src = r'把图片保存路径复制到这里'
with open(img_src,'rb') as f:
    base64_data = base64.b64encode(f.read())

第三步 人脸检测与属性分析

在完成获取access_token和图片转码两步后,我们就可以发送请求、获取响应,实现人脸打分功能了。在这里,请求地址request_url、请求头headers和请求参数params都只需按照百度人脸检测API说明文档(http://ai.baidu.com/ai-doc/REFERENCE/Ck3dwjgn3)里面的格式即可,在使用requests.post()方法发送请求后,百度API服务器就会将人脸检测结果(json格式数据)返回给我们,我们只需要使用response.json()方法将json字符串类型的响应内容转换为python对象(字典格式),然后提取我们想要的内容的就好。

request_url = "https://aip.baidubce.com/rest/2.0/face/v3/detect"
params = {
    "image":base64_data,
    "image_type":"BASE64",
    "face_field":"age,beauty,expression,face_shape,gender,glasses,emotion,face_type,spoofing",
    "face_type":"LIVE"
    }
request_url = request_url + "?access_token=" + access_token
headers = {
    'content-type': 'application/json'
}
response = requests.post(request_url, data=params, headers=headers)
face_result = response.json()
print("年龄:", face_result['result']['face_list'][0]['age'])
print("人脸评分:", face_result['result']['face_list'][0]['beauty'])
print("性别:", face_result['result']['face_list'][0]['gender']['type'])
print("脸型:", face_result['result']['face_list'][0]['face_shape']['type'])

在此,我就只提取了年龄、人脸评分、性别和脸型的信息,除此之外,我们还可以获取人脸位置、情绪、表情和眼睛状态等信息。我们最关心的当然就是人脸评分了,这个评分的取值范围在0-100之间,越大表示越美。

最后,让我们一起高呼一声”百度牛逼!!!“

有关百度人脸检测的更多内容请参见百度人脸检测API说明文档:http://ai.baidu.com/ai-doc/REFERENCE/Ck3dwjgn3

未经允许不得转载:武大金融网 » 听说相貌也能量化 | 调用百度人脸检测API实现颜值打分