需要源码请点赞关注收藏后评论区留下QQ~~~
本系统根据已有的模型上改写,添加了在给照片打分的同时可以显示照片,这样显得更加直观和真实
一、百度API文档
如需要请自行前往官网查询文档相关内容
部分内容如下
接口能力
- 人脸检测:检测图片中的人脸并标记出位置信息。
- 人脸关键点:展示人脸的核心关键点信息,及150个关键点信息。
- 人脸属性值:展示人脸属性信息,如年龄、性别等。
- 人脸质量信息:返回人脸各部分的遮挡、光照、模糊、完整度、置信度等信息。
- 业务应用
典型应用场景:如人脸属性分析,基于人脸关键点的加工分析,人脸营销活动等。
说明:检测响应速度,与图片中人脸数量相关,人脸数量较多时响应时间会有些许延长。
- 质量检测
如果需要判断一张图片中的人脸,是否符合后续识别或者对比的条件,可以使用此接口,在请求时在face_field
参数中请求quality
。基于返回结果quality
中,以下字段及对应阈值,进行质量检测的判断,以保证人脸质量符合后续业务操作要求。
指标 | 字段与解释 | 推荐数值界限 |
遮挡范围 | occlusion,取值范围[0~1],0为无遮挡,1是完全遮挡 含有多个具体子字段,表示脸部多个部位 通常用作判断头发、墨镜、口罩等遮挡 |
left_eye : 0.6, #左眼被遮挡的阈值 right_eye : 0.6, #右眼被遮挡的阈值 nose : 0.7, #鼻子被遮挡的阈值 mouth : 0.7, #嘴巴被遮挡的阈值 left_cheek : 0.8, #左脸颊被遮挡的阈值 right_cheek : 0.8, #右脸颊被遮挡的阈值 chin_contour : 0.6, #下巴被遮挡阈值 |
模糊度范围 | blur,取值范围[0~1],0是最清晰,1是最模糊 | 小于0.7 |
光照范围 | illumination,取值范围[0~255] 脸部光照的灰度值,0表示光照不好 以及对应客户端SDK中,YUV的Y分量 |
大于40 |
姿态角度 | Pitch:三维旋转之俯仰角度[-90(上), 90(下)] Roll:平面内旋转角[-180(逆时针), 180(顺时针)] Yaw:三维旋转之左右旋转角[-90(左), 90(右)] |
分别小于20度 |
人脸完整度 | completeness(0或1),0为人脸溢出图像边界, 1为人脸都在图像边界内 |
视业务逻辑判断 |
人脸大小 | 人脸部分的大小 建议长宽像素值范围:80*80~200*200 |
人脸部分不小于100*100像素 |
二、结果展示
世界杯正在如火如荼的进行中 让我们看看球星C罗的颜值打分评价
可见系统里可以测出人物的相当多特征,包括年龄 性别 种族 表情等等
别惊讶 在AI的认知里 57.28分已经不低了
再让我们看看下一张照片的评分
篮球传奇巨星科比呢 看看他的评价 可见对于种族的判断还是十分准确
在看一看著名港星的 也是经典梗的出处 评分暂且不论 对于种族的判断依然准确
三、代码
部分代码如下
全部源码请点赞关注收藏后评论区留下QQ~~~
import tkinter as tk from tkinter import filedialog, ttk import base64 import json import requests from PIL import Image,ImageTk win = tk.Tk() win.title("颜值检测") #root=tk.Tk() #root.title("展示图片") photo=None img=None # 打开文件对话框 def getfile(): file_path = filedialog.askopenfilename() to global img file_path = filedialog.askopenfilename() fpath.set(file_path) img=Image.open(file_path) photo=ImageTk.PhotoImage(img) imglabel=tk.Label(win,image=photo) imglabel.grid(row=0,column=0,columnspan=3) def face_baidu(): class BaiduPicIndentify: def __init__(self, img): self.AK = "juqVLsljMBigcM4soXoVmMGr" self.SK = "g5EgLoGOxEs3jogREqGVWUYl1e5tLkUL" self.img_src = img self.headers = { "Content-Type": "application/json; charset=UTF-8" } def get_accessToken(self): host = 'https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id=' + self.AK + '&client_secret=' + self.SK response = requests.get(host, headers=self.headers) json_result = json.loads(response.text) return json_result['access_token'] def img_to_BASE64(slef, path): with open(path, 'rb') as f: base64_data = base64.b64encode(f.read()) return base64_data def detect_face(self): # 人脸检测与属性分析 img_BASE64 = self.img_to_BASE64(self.img_src) request_url = "https://aip.baidubce.com/rest/2.0/face/v3/detect" post_data = { "image": img_BASE64, "image_type": "BASE64", "face_field": "gender,age,beauty,gender,race,expression", "face_type": "LIVE" } access_token = self.get_accessToken() request_url = request_url + "?access_token=" + access_token response = requests.post(url=request_url, data=post_data, headers=self.headers) json_result = json.loads(response.text) if json_result['error_msg'] != 'pic not has face': t1 = tk.Label(win, text=json_result['result']['face_num']).grid(row=4, column=1) t2 = tk.Label(win, text=json_result['result']['face_list'][0]['age']).grid(row=5, column=1) t3 = tk.Label(win, text=json_result['result']['face_list'][0]['beauty']).grid(row=6, column=1) t4 = tk.Label(win, text=json_result['result']['face_list'][0]['gender']['type']).grid(row=7, column=1) t5 = tk.Label(win, text=json_result['result']['face_list'][0]['race']['type']).grid(row=8, column=1) t6 = tk.Label(win, text=json_result['result']['face_list'][0]['expression']['type']).grid(row=9, column=1) if __name__ == '__main__': img_src = fpath.get() baiduDetect = BaiduPicIndentify(img_src) baiduDetect.detect_face() #win = tk.Tk() #win.title("颜值检测") win.geometry("400x200") fpath = tk.StringVar() #ttk.Button(root,text='show',command=show).grid(row=1,column=1) #root.mainloop() l = tk.Label(win, text='颜值检测系统-由百度AI提供', bg='brown', font='黑体,20,bold', fg='white') l.grid(row=1, column=0) command=show()).grid(row=2,column=1) ttk.Entry(win, textvariable=fpath).grid(row=2, column=1) l1 = tk.Label(win, text='人脸数:') l1.grid(row=4, column=0) l2 = tk.Label(win, text='人物年龄:') l2.grid(row=5, column=0) l3 = tk.Label(win, text='人物颜值评分:') l3.grid(row=6, column=0) l4物表情:') l6.grid(row=9, column=0) b = tk.Button(win, text="点我检测", width=15, height=2, command=face_baidu) b.grid(row=10, column=0) win.mainloop()
创作不易 觉得有帮助请点赞关注收藏~~~