完成目标: ??利用百度AI接口,对照片进行颜值评分。
一、前言
??想必很多人都对自己的颜值到底怎样充满好奇,也有很多软件为大家提供了颜值打分的趣味功能。今天就利用百度的平台对人脸进行颜值检测,其平台已经准确识别多种人脸属性信息,包括年龄、性别、颜值、表情、情绪、口罩、脸型、头部姿态、是否闭眼、是否配戴眼镜、人脸质量信息及类型等
二、环境准备
编辑器:pycharm
用到的库:os、AipFace、base64
三、具体实现
1、安装百度AI的库
??安装使用Python SDK有如下方式:【官方文档】
如果已安装pip,执行pip install baidu-aip即可。 如果已安装setuptools,执行python setup.py install即可。
2、新建AipFace
??AipFace是人脸识别的Python SDK客户端,为使用人脸识别的开发人员提供了一系列的交互方法。 ??参考如下代码新建一个AipFace:
from aip import AipFace
""" 你的 APPID AK SK """
APP_ID = '你的 App ID'
API_KEY = '你的 Api Key'
SECRET_KEY = '你的 Secret Key'
client = AipFace(APP_ID, API_KEY, SECRET_KEY)
在上面代码中,常量APP_ID在百度云控制台中创建,常量API_KEY与SECRET_KEY是在创建完毕应用后,系统分配给用户的,均为字符串,用于标识用户,为访问做签名验证,可在AI服务控制台中的应用列表中查看。
3、接口说明
image = "取决于image_type参数,传入BASE64字符串或URL字符串或FACE_TOKEN字符串"
imageType = "BASE64"
""" 调用人脸检测 """
client.detect(image, imageType);
""" 如果有可选参数 """
options = {}
options["face_field"] = "age"
options["max_face_num"] = 2
options["face_type"] = "LIVE"
options["liveness_control"] = "LOW"
""" 带参数调用人脸检测 """
client.detect(image, imageType, options)
4、返回数据
?? 返回的是json数据,我们主要需要的是beauty这个值
{
"face_num": 1,
"face_list": [
{
"face_token": "35235asfas21421fakghktyfdgh68bio",
"location": {
"left": 117,
"top": 131,
"width": 172,
"height": 170,
"rotation": 4
},
"face_probability": 1,
"angle" :{
"yaw" : -0.34859421849251
"pitch" 1.9135693311691
"roll" :2.3033397197723
}
"landmark": [
{
"x": 161.74819946289,
"y": 163.30244445801
},
...
],
"landmark72": [
{
"x": 115.86531066895,
"y": 170.0546875
},
...
],
"age": 29.298097610474,
"beauty": 55.128883361816,
"expression": {
"type": "smile",
"probability" : 0.5543018579483
},
"gender": {
"type": "male",
"probability": 0.99979132413864
},
"glasses": {
"type": "sun",
"probability": 0.99999964237213
},
"face_shape": {
"type": "triangle",
"probability": 0.5543018579483
}
"quality": {
"occlusion": {
"left_eye": 0,
"right_eye": 0,
"nose": 0,
"mouth": 0,
"left_cheek": 0.0064102564938366,
"right_cheek": 0.0057411273010075,
"chin": 0
},
"blur": 1.1886881756684e-10,
"illumination": 141,
"completeness": 1
}
}
]
}
5、定义函数
??定义函数获取beauty,传入参数是文件名字
def get_score(file_name):
APP_ID = '24792216'
API_KEY = 'r5dKhE5Yloc74x3mxrhaXdpP'
SECRET_KEY = 'CMPnLas3QvkU2u64W3ItG9dtWchBZXSs'
client = AipFace(APP_ID, API_KEY, SECRET_KEY)
with open("img/" + file_name, mode="rb")as fp:
data = base64.b64encode(fp.read())
imageType = "BASE64"
image = data.decode()
options = {
"face_field": "beauty"
}
result = client.detect(image, imageType, options)
beauty_score = result['result']['face_list'][0]['beauty']
return beauty_score
6、图片爬取函数
def save_pic():
url = 'https://www.huya.com/g/4079'
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.159 Safar"
}
tree = etree.HTML(requests.get(url=url, headers=headers).text)
img_list = tree.xpath('//li[@class="game-live-item"]/a/img/@data-original')
name_list = tree.xpath('//li[@class="game-live-item"]//span[@class="avatar fl"]/i/text()')
for img, name in zip(img_list, name_list):
with open("img/" + name + ".jpg", mode="wb")as fp:
fp.write(requests.get(url=img, headers=headers).content)
7、主函数
if __name__ == '__main__':
save_pic()
path = "./img"
file_name_list = os.listdir(path)
info_list = []
for file_name in file_name_list:
info = {}
try:
beauty_score = get_score(file_name)
info["name"] = file_name[:-4]
info["beauty"] = beauty_score
info_list.append(info)
except Exception as e:
info["name"] = file_name[:-4]
info["beauty"] = 0
info_list.append(info)
8、成果
??读取了20个虎牙主播的封面图片,对其进行颜值打分,通过结果可以看出来这个案例是成功的。 ??其中图片脸部漏出来的大小也会影响评分数,对于有的0分,打开图片观察是因为脸部遮挡,没有完整的识别出来人脸,百度这一方面做的特别好!
四、最后
??最后放上评分最高的主播照片~~~~
|