查看原文
其他

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

The following article is from 功夫计量经济学 Author 江河JH

在“始终如一 | 虚拟变量与美丽的“虚拟变量陷阱”一文中,我曾经给大家简单介绍过Hamermesh 和 Biddle(1994)有关相貌吸引力对工资的影响的那篇论文。在1994年那个年代,想必作者也是被迫使用离散型变量去度量相貌。离散型变量不像连续型变量那样具有足够的变异性,因而我们能从中获取的信息自然也都是“大打折扣”的,并且像“好看”、“比较好看”和“一般”这种词汇也未免太为主观。在人工智能和机器学习技术飞速发展的今天,如果我们依然想要研究”相貌对XX的影响“,那么大可不必再去使用离散型变量度量相貌,我们已经可以做到使用连续型变量去度量相貌了。
百度AI开放平台为我们提供了人脸检测的API接口,可以实现人脸打分的功能。只要你有照片,那么就可以据此对人脸进行客观地打分,这极大方便了我们做相貌吸引力的相关研究。让我们先看看百度人脸检测的威力:

输入图片

输出结果

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

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

输出结果

年龄:23
人脸评分:63.44
性别:male
脸型:square
那么在Python中,我们该如何调用百度人脸识别API接口实现人脸打分功能呢?

第一步 获取access_token

想要调用百度人脸检测的API实现人脸打分,我们首先需要注册成为百度AI开放平台的开发者,然后创建一个应用,获取API Key和Secret Key,将其复制粘贴到下方代码指定位置就好,执行下面的代码就可以生成一个access_token(用户身份验证和授权的凭证,发送请求需要)。
注意access_token的有效期为30天,切记需要每30天进行定期更换,或者每次请求都拉取新token。

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说明文档(https://ai.baidu.com/ai-doc/FACE/yk37c1u4t)里面的格式即可,在使用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说明文档:https://ai.baidu.com/ai-doc/FACE/yk37c1u4t

图片来源 | 爱壁纸





对我们的推文累计打赏超过1000元,我们即可给您开具发票,发票类别为“咨询费”。用心做事,不负您的支持!
往期推文推荐
列出指定属性的变量|findname命令比ds命令
新一代的标签转码小能手
【爬虫实战】亚马逊网站Top100畅销书爬取

Json文件好帮手——JsonPath

数据转置pro之sxpose2
文件"搬家"小助手:mvfiles

pyecharts绘图——河流图展示

你知道MDPI期刊的热门题目吗?

文件合并你不行,mergemany来帮宁

         分组进行描述性统计的小技巧 --astx命令介绍

新年快乐|爬虫俱乐部2020年度总结

不能忘却的记忆| B站弹幕爬虫

Python中实现Excel的重复值提取
fileexists:告诉你“我”存在吗?

工作中一切困难的解决途径——motivatedolly

【爬虫实战】喜茶的门店都开在了哪里?

import delimited | 再也不用担心读入网页源代码“乱七芭蕉”了

如何简洁地列出指定属性的变量?ds命令来了!

如何在Python中进行描述性统计分析?

分析师和他们的雇主重视与管理层接触吗?——分析师参与盈余电话会议的研究

关于我们


微信公众号“Stata and Python数据分析”分享实用的stata、python等软件的数据处理知识,欢迎转载、打赏。我们是由李春涛教授领导下的研究生及本科生组成的大数据处理和分析团队。

此外,欢迎大家踊跃投稿,介绍一些关于stata和python的数据处理和分析技巧。
投稿邮箱:statatraining@163.com
投稿要求:
1)必须原创,禁止抄袭;
2)必须准确,详细,有例子,有截图;
注意事项:
1)所有投稿都会经过本公众号运营团队成员的审核,审核通过才可录用,一经录用,会在该推文里为作者署名,并有赏金分成。
2)邮件请注明投稿,邮件名称为“投稿+推文名称”。
3)应广大读者要求,现开通有偿问答服务,如果大家遇到有关数据处理、分析等问题,可以在公众号中提出,只需支付少量赏金,我们会在后期的推文里给予解答。


您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存