检测:年龄、 颜值、表情、脸型、性别、眼镜、情绪,人种等属性
第一步引用
from aip import AipFace
import base64
import tkinter.filedialog
from tkinter import messagebox
第二步调用百度AI的方法
def imgdata(file):
""" 你的 APPID AK SK """
APP_ID = 'XXXXX'
API_KEY = 'XXXXXX'
SECRET_KEY = 'XXXXXX'
client = AipFace(APP_ID, API_KEY, SECRET_KEY)
with open(file, "rb") as f:
data = f.read()
encodestr = base64.b64encode(data)
images = str(encodestr, 'utf-8')
image = images
imageType = "BASE64"
""" 参数 """
options = {}
options["face_field"] = "age,beauty,expression,face_shape,gender,glasses,emotion,race"
""" 带参数调用人脸检测 """
error = client.detect(image, imageType, options)
if error["error_msg"] == "SUCCESS":
error2 = error["result"]
num = error2["face_num"]
error3 = error2["face_list"][0]
age = error3["age"]
beauty = error3["beauty"]
exp = {'none': "不笑", 'smile': "微笑", 'laugh': "大笑"}
expression = error3["expression"]['type']
if expression in exp:
expressions = exp[expression]
else:
expressions = "未知"
face = {'square': '正方形', 'triangle': '三角形', 'oval': '椭圆', 'heart': '心形', 'round': '圆形'}
face_shape = error3["face_shape"]['type']
if face_shape in face:
face_shapes = face[face_shape]
else:
face_shapes = "未知"
gen = {'male': '男', 'female': '女'}
gender = error3["gender"]['type']
if gender in gen:
genders = gen[gender]
else:
genders = "未知"
gla = {'none': '无眼镜', 'common': '普通眼镜', 'sun': '墨镜'}
glasses = error3["glasses"]['type']
if glasses in gla:
glassess = gla[glasses]
else:
glassess = "未知"
emo = {'angry': '愤怒', 'disgust': '厌恶', 'fear': '恐惧', 'happy':'高兴', 'sad': '伤心', 'surprise': '惊讶', 'neutral': '无情绪'}
emotion = error3["emotion"]['type']
if emotion in emo:
emotions = emo[emotion]
else:
emotions = "未知"
ra={'yellow':'黄种人','white':'白种人','black':'黑种人'}
race=error3["race"]['type']
if race in ra:
race=ra[race]
else:
race="未知"
print("年龄:%d, 颜值:%d, 表情:%s, 脸型:%s, 性别:%s, 是否戴眼镜:%s, 情绪:%s, 人种:%s"
%(age, beauty, expressions, face_shapes, genders, glassess, emotions,race))
第三步选取图片
root = tkinter.Tk()
root.withdraw()
file_path = tkinter.filedialog.askopenfilename(title=u'选择文件')
if(file_path.lower().endswith(('.bmp', '.dib', '.png', '.jpg', '.jpeg', '.pbm', '.pgm', '.ppm', '.tif', '.tiff'))):
else:
messagebox.showinfo("提示","请选择正确的图片格式!")
完整代码
from aip import AipFace
import base64
import tkinter.filedialog
from tkinter import messagebox
def imgdata(file):
""" 你的 APPID AK SK """
APP_ID = 'XXXX'
API_KEY = 'XXXX'
SECRET_KEY = 'XXXX'
client = AipFace(APP_ID, API_KEY, SECRET_KEY)
with open(file, "rb") as f:
data = f.read()
encodestr = base64.b64encode(data)
images = str(encodestr, 'utf-8')
image = images
imageType = "BASE64"
""" 参数 """
options = {}
options["face_field"] = "age,beauty,expression,face_shape,gender,glasses,emotion,race"
""" 带参数调用人脸检测 """
error = client.detect(image, imageType, options)
if error["error_msg"] == "SUCCESS":
error2 = error["result"]
num = error2["face_num"]
error3 = error2["face_list"][0]
age = error3["age"]
beauty = error3["beauty"]
exp = {'none': "不笑", 'smile': "微笑", 'laugh': "大笑"}
expression = error3["expression"]['type']
if expression in exp:
expressions = exp[expression]
else:
expressions = "未知"
face = {'square': '正方形', 'triangle': '三角形', 'oval': '椭圆', 'heart': '心形', 'round': '圆形'}
face_shape = error3["face_shape"]['type']
if face_shape in face:
face_shapes = face[face_shape]
else:
face_shapes = "未知"
gen = {'male': '男', 'female': '女'}
gender = error3["gender"]['type']
if gender in gen:
genders = gen[gender]
else:
genders = "未知"
gla = {'none': '无眼镜', 'common': '普通眼镜', 'sun': '墨镜'}
glasses = error3["glasses"]['type']
if glasses in gla:
glassess = gla[glasses]
else:
glassess = "未知"
emo = {'angry': '愤怒', 'disgust': '厌恶', 'fear': '恐惧', 'happy':'高兴', 'sad': '伤心', 'surprise': '惊讶', 'neutral': '无情绪'}
emotion = error3["emotion"]['type']
if emotion in emo:
emotions = emo[emotion]
else:
emotions = "未知"
ra={'yellow':'黄种人','white':'白种人','black':'黑种人'}
race=error3["race"]['type']
if race in ra:
race=ra[race]
else:
race="未知"
print("年龄:%d, 颜值:%d, 表情:%s, 脸型:%s, 性别:%s, 是否戴眼镜:%s, 情绪:%s, 人种:%s"
%(age, beauty, expressions, face_shapes, genders, glassess, emotions,race))
root = tkinter.Tk()
root.withdraw()
file_path = tkinter.filedialog.askopenfilename(title=u'选择文件')
if(file_path.lower().endswith(('.bmp', '.dib', '.png', '.jpg', '.jpeg', '.pbm', '.pgm', '.ppm', '.tif', '.tiff'))):
imgdata(file_path)
else:
messagebox.showinfo("提示","请选择正确的图片格式!")