人脸数量:1
表情:微笑,概率为0.98
性别:女性,概率为1
年龄:23
眼镜:无眼镜,概率为1
情绪:高兴,概率为0.94
魅力值:81.65
输入任意键结束
百度智能云的打分还比较有水平,腾讯云的打分好像给的都偏高,参考价值不是很高。
强调一下哈,本篇文章并不属于面向过程,而是使用百度智能云的API,也是我最近新发现的比较有意思的玩法,可以供娱乐参考。
百度智能云
其他还有腾讯、阿里云等大厂的各式各样的人工智能服务可以自行浏览。
可以点击立即使用,然后登录,里面有详细的文档、和API使用说明,可以供返回的人脸参数包括:年龄、性别、是否带眼镜、是否带口罩、颜值打分(这个功能比较有意思)等,可以自行探索。
以下呢简单修改了一下官方文档中的代码(并不完整,且修改起来有一定难度),让执行更加简单
获取官方的access_token,这是下一步的基础
# encoding:utf-8
import requests
# client_id 为官网获取的AK, client_secret 为官网获取的SK
host_element = list(map(str,input("输入官网获取的AK和SK,用空格分隔:").split()))
host = 'https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id={0}&client_secret={1}'.format(host_element[0],host_element[1])
response = requests.get(host)
if response:
print(response.json())
输入个人的AK、SK即可直接得到需要的access_token
人脸识别
# encoding:utf-8
import requests
import base64
import json
'''
人脸检测与属性分析
'''
request_url = "https://aip.baidubce.com/rest/2.0/face/v3/detect"
# 二进制方式打开图片文件
f = open('XX', 'rb') # 本地图片地址
img = base64.b64encode(f.read())
params = {}
params["image"] = img
params["image_type"] = "BASE64" # 官方文档中还有其它格式,这里使用BASE64编码图片
params["face_field"] = "age" # 可以添加其他参数
access_token = 'XXXX' # 填写获取的access_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:
result = response.json()
print(json.dumps(result, indent=4, ensure_ascii=False)) # 格式化输出
返回示例
{
"error_code": 0,
"error_msg": "SUCCESS",
... # 不重要
"result": {
"face_num": 1,
"face_list": [
{
"face_token": "8a4dafe6baccfbd782ed5740c2a2639e",
"location": {
"left": 919.36,
"top": 576.11,
"width": 1057,
"height": 1047,
"rotation": 0
},
"face_probability": 1,
"angle": {
"yaw": -15.11,
"pitch": 0.52,
"roll": -2.4
},
"age": 22,
"beauty": 85.39,
"expression": {
"type": "none",
"probability": 1
},
"face_shape": {
"type": "heart",
"probability": 0.46
},
"gender": {
"type": "female",
"probability": 1
}
}
]
}
}
返回值可以优化,具体参考百度的官方文档
举例,如何输出像文章开头的例子一样的结果:
if response:
result = response.json() # result 是字典格式
print("人脸数量:",end="")
print(result["result"]["face_num"])
# 输出表情
print("表情:",end="")
if result["result"]["face_list"][0]["expression"]['type'] == 'none':
print("不笑,",end="")
elif result["result"]["face_list"][0]["expression"]['type'] == 'smile':
print("微笑,",end="")
elif result["result"]["face_list"][0]["expression"]['type'] == 'laugh':
print("大笑,",end="")
print("概率为",end="")
print(result["result"]["face_list"][0]["expression"]['probability'])
# 输出性别
print("性别:",end="")
if result["result"]["face_list"][0]["gender"]['type'] == "female":
print("女性,",end="")
elif result["result"]["face_list"][0]["gender"]['type'] == "male":
print("男性,",end="")
print("概率为", end="")
print(result["result"]["face_list"][0]["gender"]['probability'])
# 输出年龄
print("年龄:",end="")
print(result["result"]["face_list"][0]["age"])
# 输出是否戴眼镜
print("眼镜:",end="")
if result["result"]["face_list"][0]["glasses"]['type'] == "none":
print("无眼镜,",end="")
elif result["result"]["face_list"][0]["glasses"]['type'] == "common":
print("普通眼镜,",end="")
elif result["result"]["face_list"][0]["glasses"]['type'] == "sun":
print("墨镜,",end="")
print("概率为", end="")
print(result["result"]["face_list"][0]["glasses"]['probability'])
# 输出情绪
print("情绪:",end="")
if result["result"]["face_list"][0]["emotion"]['type'] == 'angry':
print("愤怒,",end="")
elif result["result"]["face_list"][0]["emotion"]['type'] == 'disgust':
print("厌恶,",end="")
elif result["result"]["face_list"][0]["emotion"]['type'] == 'fear':
print("恐惧,",end="")
elif result["result"]["face_list"][0]["emotion"]['type'] == 'happy':
print("高兴,",end="")
elif result["result"]["face_list"][0]["emotion"]['type'] == 'sad':
print("伤心,",end="")
elif result["result"]["face_list"][0]["emotion"]['type'] == 'surprise':
print("惊讶,",end="")
elif result["result"]["face_list"][0]["emotion"]['type'] == 'neutral':
print("无表情,",end="")
elif result["result"]["face_list"][0]["emotion"]['type'] == 'pouty':
print("撅嘴,",end="")
elif result["result"]["face_list"][0]["emotion"]['type'] == 'grimace':
print("鬼脸,",end="")
print("概率为", end="")
print(result["result"]["face_list"][0]["emotion"]['probability'])
# 输出beauty
print("魅力值:",end="")
print(result["result"]["face_list"][0]["beauty"])
input("输入任意键结束")
喜欢的话就赶紧尝试吧!