ITPub博客

首页 > 数据库 > 数据库开发技术 > 测一测你是颜值爆表,还是洪水猛兽

测一测你是颜值爆表,还是洪水猛兽

原创 数据库开发技术 作者:阿黎逸阳的代码 时间:2021-06-06 22:52:22 0 删除 编辑

上一篇文章介绍了应用百度AI的文字识别功能对身份证进行识别。

本文介绍应用百度AI的人脸识别功能对年龄、性别、颜值等进行识别,感兴趣的朋友一起来看看效果吧。

由于安装baidu-aip模块和获取百度AI接口密钥在之前的文章(百度AI文字识别—以营业执照为例)中已经进行阐述,本文不再赘述。

本文目录
  1. 应用百度AI实现颜值评价效果

  2. 调用百度接口进行人脸属性识别

  3. 根据年龄和性别对颜值进行评价

  4. 批量识别人脸属性

  5. 自定义窗口语音播报颜值得分

  6. 明星颜值评价


一、应用百度AI实现颜值评价效果

在正式进入代码讲解之前,先来看下本文的实现效果。

为了效果更真实,采用了我本人的照片,颜值评分大家不要过多关注。

对该视频中的颜值评价感兴趣的朋友,可以看本文的后续实现代码。


二、调用百度接口进行人脸属性识别

安装好baidu-aip模块,获取了百度AI接口密钥后,即可调用百度接口进行人脸属性识别了。

首先以杨紫的图片为例进行年龄、性别、颜值的识别。

具体python代码如下:‍

import osimport base64from aip import AipFace

os.chdir(r'F:\公众号\28.人脸识别')#设置图片存放的路径
pictureName = '1_yz.jpg'def get_picture_content(pictureName): with open(pictureName, 'rb') as fp: content = base64.b64encode(fp.read()) return content.decode('utf-8')#定义读取图片的函数

APP_ID = 'XXX'API_KEY = 'XXXXXXXX'SECRET_KEY = 'XXXXXXXXXXXX'#百度账号和密钥

options = {}imageType = 'BASE64'options["face_field"] = "age, gender, beauty"aipFace = AipFace(APP_ID, API_KEY, SECRET_KEY)result = aipFace.detect(get_picture_content(pictureName), imageType, options)print(result)

注:其中os.chdir中的内容应该替换成你存储图片的地址,APP_ID、API_KEY、SECRET_KEY应该替换成第二章末尾你获取的百度密钥。

得到结果如下:

其中,age对应的值为年龄,gender对应的值为性别,beauty对应的值为颜值分。

为进一步规范输出成标准格式,通过如下代码进行规范化:

import pandas as pd
face_character = pd.DataFrame({"age":[result['result']['face_list'][0]['age']], "gender":[result['result']['face_list'][0]['gender']['type']], "beauty":[result['result']['face_list'][0]['beauty']] })

得到结果如下:

可以发现杨紫的颜值得分还是很高的,后续文章也会对其它一些明星进行测试。


三、根据年龄和性别对颜值进行评价

根据性别和颜值分,对识别结果进行评价,具体代码如下:

if face_character['beauty'][0]>80:    if face_character['gender'][0] == 'female':        print("小姐姐颜值爆表")    else:        print("小哥哥颜值爆表") elif face_character['beauty'][0]>70:    if face_character['gender'][0] == 'female':        print("小姐姐天生美颜")    else:        print("小哥哥天生美颜") elif face_character['beauty'][0]>60:    if face_character['gender'][0] == 'female':        print("小姐姐颜值尚可")    else:        print("小哥哥颜值尚可") elif face_character['beauty'][0]>40:    if face_character['gender'][0] == 'female':        print("小姐姐先天不够,后天来凑")    else:        print("小哥哥先天不够,后天来凑") else:    if face_character['gender'][0] == 'female':        print("小姐姐洗洗睡吧")    else:        print("小哥哥洗洗睡吧")

得到结果:


四、批量识别人脸属性

假设文件夹中有数张人脸图片,想批量对这批图片进行颜值打分,可执行如下代码:

import osimport reimport timeimport base64from aip import AipFace

os.chdir(r'F:\公众号\28.人脸识别')#设置图片存放的路径
pictureName = '6_brzp.jpg'def get_picture_content(pictureName): with open(pictureName, 'rb') as fp: content = base64.b64encode(fp.read()) return content.decode()#定义读取图片的函数
APP_ID = 'XXX'API_KEY = 'XXXXXXXX'SECRET_KEY = 'XXXXXXXXXXXX'#百度账号和密钥

options = {}imageType = 'BASE64'options["face_field"] = "beauty"options["max_face_num"] = 2aipFace = AipFace(APP_ID, API_KEY, SECRET_KEY)
root_path = r'F:\公众号\28.人脸识别'list = os.listdir(root_path) # 列出文件夹下所有的目录与文件
for i in range(0, len(list)): time.sleep(1) path = os.path.join(root_path, list[i]) if os.path.isfile(path): result = aipFace.detect(get_picture_content(path), imageType, options) print(list[i] + ' 评分为:' + str(result['result']['face_list'][0]['beauty']))#显示出所有图片的颜值得分

得到结果:

可以发现杨紫的那张照片颜值分很高,有八十几分。

为了更好的用户体验,我们设置一个窗口,显示评价照片并语音播报颜值得分。


五、自定义窗口语音播报颜值得分

为了更清晰地评价人的颜值,把图片和结果用tkinter库和语音播放库包装起来,效果会更好。

具体代码如下:

import osimport reimport timeimport base64import pandas as pdimport tkinter as tkfrom aip import AipFacefrom tkinter import filedialog
root = tk.Tk()root.withdraw()Folderpath = filedialog.askdirectory(title = '请选择图片存放的文件夹') picturePath = filedialog.askopenfilename(title = '请选择要进行颜值评价的图片')root.destroy()os.chdir(Folderpath)#设置图片存放的路径
def get_picture_content(picturePath): with open(picturePath, 'rb') as fp: content = base64.b64encode(fp.read()) return content.decode()#定义读取图片的函数
APP_ID = 'XXX'API_KEY = 'XXXXXXXX'SECRET_KEY = 'XXXXXXXXXXXX'#百度账号和密钥

options = {}options["max_face_num"] = 2options["face_field"] = "gender"aipFace = AipFace(APP_ID, API_KEY, SECRET_KEY)imageType = 'BASE64'result = aipFace.detect(get_picture_content(picturePath), imageType, options)gender = result['result']['face_list'][0]['gender']['type']options["face_field"] = "age"time.sleep(1)result = aipFace.detect(get_picture_content(picturePath), imageType, options)age = result['result']['face_list'][0]['age']options["face_field"] = "beauty"time.sleep(2)result = aipFace.detect(get_picture_content(picturePath), imageType, options)beauty = result['result']['face_list'][0]['beauty']#获取年龄、性别、颜值信息
face_character = pd.DataFrame({"age":age, "gender":gender, "beauty":beauty},index = ['value'])if face_character['beauty'][0]>80: if face_character['gender'][0] == 'female': str_list = "小姐姐芳龄:"+ str(age) + ",颜值爆表"+ ',最终颜值得分为:'+str(beauty) else: str_list = "小哥哥贵庚:"+ str(age) + ",颜值爆表"+ ',最终颜值得分为:'+str(beauty)elif face_character['beauty'][0]>70: if face_character['gender'][0] == 'female': str_list = "小姐姐芳龄:"+ str(age) + ",天生美颜"+ ',最终颜值得分为:'+str(beauty) else: str_list = "小哥哥贵庚:"+ str(age) + ",天生美颜"+ ',最终颜值得分为:'+str(beauty)elif face_character['beauty'][0]>50: if face_character['gender'][0] == 'female': str_list = "小姐姐芳龄:"+ str(age) + ",颜值尚可"+ ',最终颜值得分为:'+str(beauty) else: str_list = "小哥哥贵庚:"+ str(age) + ",颜值尚可"+ ',最终颜值得分为:'+str(beauty)elif face_character['beauty'][0]>30: if face_character['gender'][0] == 'female': str_list = "小姐姐芳龄:"+ str(age) + ",先天不够,后天来凑"+ ',最终颜值得分为:'+str(beauty) else: str_list = "小哥哥贵庚:"+ str(age) + ",先天不够,后天来凑" + ',最终颜值得分为:'+str(beauty)else: if face_character['gender'][0] == 'female': str_list = "小姐姐芳龄:"+ str(age) + ",早点洗洗睡吧"+ ',最终颜值得分为:'+str(beauty) else: str_list = "小哥哥贵庚:"+ str(age) + ",早点洗洗睡吧"+ ',最终颜值得分为:'+str(beauty)#颜值定义
from tkinter import *from PIL import Image, ImageTkfrom win32com.client import Dispatch#导入包

speaker = Dispatch("SAPI.SpVoice")def roll_call(): speaker.Speak(str_list)#控制播放语音

os.chdir(Folderpath)#设置文件路径
root = Tk()root.title("颜值测试小程序")root.iconbitmap("pikaqiu2.ico")#设置窗口
image = Image.open(picturePath)#加载图片
root.geometry("400x300")#根据图片大小设置窗口大小
img_pic = ImageTk.PhotoImage(image)label = Label(root, image=img_pic)label.pack()
b2 = tk.Button(root, bg='lightyellow', text='颜值评价', font=("KaiTi", 8), width=8, height=2, command=roll_call)b2.place(x=0, y=0)
root.mainloop()
注:如需本文直接可执行的代码和图片(明星图),请到公众号中回复”颜值识别“即可免费获取。

该程序得到结果即为第一章节的效果视频。


六、明星颜值评价

最后我们来看下明星的颜值评分吧。


 1   刘亦菲

颜值评价结果:

'小姐姐芳龄:21,颜值尚可,最终颜值得分为:64.19'

对于这个结果,我也比较吃惊,所以颜值得分大家当成娱乐就好。


 2   贾玲

颜值评价结果:

'小姐姐芳龄:37,先天不够,后天来凑,最终颜值得分为:30.67'
颜值得分仅供参考,请勿当真。
我的有些照片测出来也是三十多分,可能跟背景、光线、表情都有一定的关系,大家当成娱乐就好。

 3   肖战

颜值评价结果:

'小哥哥贵庚:23,颜值尚可,最终颜值得分为:63.9'

颜值得分仅供参考,请勿当真,认为我的代码有问题的可以自行下载图片和代码进行尝试。


 4   宋小宝

颜值评价结果:

'小哥哥贵庚:40,先天不够,后天来凑,最终颜值得分为:45.18'

颜值得分仅供参考,请勿当真。

从上面的颜值得分可以发现,普遍颜值得分较低,八十多分的已经算高分了,也算是为杨紫的颜值正名了吧。

至此,调用百度接口颜值识别已讲解完毕,感兴趣的朋友自己实现一遍吧。

参考文献
https://www.jb51.net/article/173228.htmhttps://www.cnblogs.com/pywjh/p/9527828.htmlhttps://blog.csdn.net/zhyl4669/article/details/88947571https://blog.csdn.net/weixin_29501693/article/details/112828210
往期回顾:

情人节表白烟花

520表白代码合集
黑客帝国中的代码雨
用python绘制皮卡丘
娱乐圈排行榜动态条形图绘制
Python人脸识别—我的眼里只有你
3D星空图V2版——添加背景图片和音乐


扫一扫关注我

13162366985

投稿微信号、手机号


原文作者:阿黎逸阳的代码;如有侵权,请联系管理员删除。

请登录后发表评论 登录
全部评论

注册时间:2020-02-15

  • 博文量
    282
  • 访问量
    130897