Python调用百度AI实现颜值评分功能
作者:阿黎逸阳 发布时间:2023-07-30 22:53:40
一、调用百度接口进行人脸属性识别
安装好baidu-aip模块,获取了百度AI接口密钥后,即可调用百度接口进行人脸属性识别了。首先以杨紫的图片为例进行年龄、性别、颜值的识别。
具体python代码如下:
import os
import base64
from 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 os
import re
import time
import base64
from 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"] = 2
aipFace = 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 os
import re
import time
import base64
import pandas as pd
import tkinter as tk
from aip import AipFace
from 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"] = 2
options["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, ImageTk
from 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://blog.csdn.net/qq_32532663/article/details/121442490
猜你喜欢
- 本文介绍的函数其实是PHP手册上本来就有的,但是由于这些函数独立性较强,查找不易,所以单独介绍一下,方便查阅。 1. 获取所有可用的模块 -
- 不久之前,笔者一个在企业中从事网管工作的朋友向我求助关于SQL Server服务器内存升级后遇到的问题。原来,他们企业准备上一个企业邮箱系统
- 从PJBlog 2.7开始,验证码的功能就很好很强大了,但是同时也给手工输入带来了不小的麻烦——经常输错。之前我写了一个《自己写的一个PJB
- 迄今为止,导出/导入工具集仍是跨多个平台转移数据所需劳动强度最小的首选实用工具,尽管人们常常抱怨它速度太慢。导入只是将每条记录从导出转储文件
- SOLyog的下载、安装以及使用很简单。我去了相关网站下载,它只有384K字节大小。它把两个文件(一个可执行文件.exe和一个动态链接库文件
- PDOStatement::closeCursorPDOStatement::closeCursor — 关闭游标,使语句能再次被执行。(P
- Sun公司和Zmanda在3月18号声称他们正在一起合作,为MySQL Enterprise用户交付一种全面、全局数据备份与恢复解决方案。现
- 在工作实践和学习中,如何开启 MySQL 数据库的远程登陆帐号算是一个难点的问题,以下内容便是在工作和实践中总结出来的两大步骤,能帮助DBA
- 最好的方法: 先说一下基本的东西: <%@ codepage=65001%>UTF-8 <%@&nbs
- 一、json_encode() 对变量进行JSON编码语法:json_encode($value[,$options=0])注意: 
- 在静态页面里需要显示浏览次数的地方加上这个:浏览次数:<SCRIPT language='javascript
- 其实所有的死锁最深层的原因就是一个:资源竞争。表现一:一个用户A 访问表A(锁住了表A),然后又访问表B
- 第一步 : 从清华大学开源软件镜像站下载Anaconda:https://mirrors.tuna.tsinghua.edu.cn/anac
- 在项目中,尤其是pc端的时候,我们在用户登录后会给前端返回一个标识,来判断用户是否登录,这个标识大多数都是用户的id  
- 目前,我们要在网页中使用圆角效果,总是通过切图然后嵌套很多div,用背景来实现圆角效果。对于前端开发工程师来说,圆角的确是一个让人又爱又恨的
- 上个月,我写了一篇关于微软如何在向jQuery贡献代码的文章,也谈到了在第一批贡献的代码中的一些功能:jQuery模板和数据链接支持.今天,
- 最近在研究雨哲软件采集程序的时候,需要获取真实软件地址时遇到了需要读取跳转页面跳转后的真实地址的问题。在网上找了很多方法,使用WinHttp
- 关于 游标 if,for 的例子 create or replace procedure peace_if is cursor var_c
- 近期对数据库进行巡检,发现数据库业务用户(非 SYS/Public)下存在失效对象。对失效对象进行分析,主要包括失效的视图、物化视图、函数、
- 本文介绍使用aspjpeg组件实现图片的半透明描边的效果,描边效果演示:参数说明'big 原图路径(相对)'small 生成