其他分享
首页 > 其他分享> > ⚡几行代码测出你的颜值有度高!!!⚡

⚡几行代码测出你的颜值有度高!!!⚡

作者:互联网

⚡几行代码测出你的颜值有度高!!!⚡


完成目标:
  利用百度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"
# image_type:
# 图片类型 BASE64:图片的base64值,base64编码后的图片数据,编码后的图片大小不超过2M;
# URL:图片的 URL地址( 可能由于网络等原因导致下载图片时间过长);
# FACE_TOKEN: 人脸图片的唯一标识,调用人脸检测接口时,会为每个人脸图片赋予一个唯一的FACE_TOKEN,同一张图片多次检测得到的FACE_TOKEN是同一个

""" 调用人脸检测 """
client.detect(image, imageType);

""" 如果有可选参数 """
options = {}
options["face_field"] = "age"
#face_field 
#包括 age,beauty,expression,face_shape,gender,glasses,landmark,landmark72,landmark150,quality,eye_status,emotion,face_type信息逗号分隔. 
# 默认只返回face_token、人脸框、概率和旋转角度
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)
	
	#以为base64读取图片
    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 # 返回beauty的值

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分,打开图片观察是因为脸部遮挡,没有完整的识别出来人脸,百度这一方面做的特别好!
在这里插入图片描述

四、最后

  最后放上评分最高的主播照片~~~~

在这里插入图片描述

标签:info,name,beauty,颜值,list,几行,face,KEY,有度
来源: https://blog.csdn.net/qq_41541253/article/details/120109718