颜值打分实战

1概述

近年来随着人脸识别技术的发展,颜值打分也受到了广泛的关注与研究。可即使人来打分,大家也口味各异,御姐萝莉各有所爱。计算机又岂能判断人的美丑呢?实际上科学家研究过人脸的"颜值",并一直在开发相对应的”颜值算法”。【1】“平均脸” 的思想是通过算法检测特征点,然后将人脸图像划分成不同区域再做分段放射变换与加权平均,综合考虑人脸的形状特征和纹理特征,合成的图如下:

这里写图片描述
五官匀称,轮廓对称,肤色美观的脸更容易受到大众的喜欢,这一点在颜值中可算达到脸共识,也就是“丑人多作怪,美人一个胚”。正因如此,颜值算法才有了可行性,国内各大公司开发了颜值打分应用,我们看看。

同一张图在不同应用中的测定
这里写图片描述

不同的人脸在同一应用中测定(百度AI为例)
在这里插入图片描述

不同年龄不同肤色在颜值打分系统中评分测试(例旷视科技,列出部分测试):
在这里插入图片描述
颜值测定是一项娱乐的应用,我们从下面的数据集中随机拿了几张图做测试,结果如下

  1. 不同肤色给出分数无明显差异

  2. 评分多在60分左右
    这里写图片描述
    总的来说表现都差不多,娱乐为主吧。

2.人脸颜值数据集与标价指标

地址在https://github.com/HCIILAB/SCUT-FBP5500-Database-Release
在这里插入图片描述
数据集共5500个正面人脸,年龄分布为15-60,全部都是自然表情。包含不同的性别分布和种族分布(2000亚洲女性,2000亚洲男性,750高加索男性,750高加索女性),数据分别来自于数据堂,USAdult database等。每一张图由60个人进行评分,共评为5个等级,这60个人的年龄分布为18~27岁,均为年轻人。适用于基于apperance/shape等的模型研究。同时,每一个图都提供了86个关键点的标注。各类人群的颜值分布如下:
在这里插入图片描述
颜值分数都使用包含两个主成分的混合高斯模型去拟合,红色和绿色分别是低颜值和高颜值的分布曲线,可见对于这4类人群,平均高颜值在4,低颜值在2.5左右。

另外文【2】中还列出了一些数据集,大家可以自行了解。
在这里插入图片描述
2.2 评价准则 2.2.1 Pearson correlation coefficient用来度量数据间是否存在线性关系,也表征了变量间线性关系的强弱。它通过计算两个数据集合之间的距离用来衡量两个数据集合的线性相关度。设 N 幅人脸图像的人工评分值为{ x1,x2,…,xi,…,xN} ,计算得到的分值为{ y1,y2,…,yi,…,yN } ,其中 xi 表示第i幅图像的真值,yi 表示第i幅图像的人脸颜值预测结果。相关系数 r 计算公式如式如下:
在这里插入图片描述
r 值越高,表示人工分类结果与本文方法预测结果越接近,该方法的性能就越好,反之,则越差,如下图所示。
在这里插入图片描述
2.2.2 Maxumum absolute error和root mean square error

Maxumum absolute error就是真值和预测值的绝对差值,rootmean square error就是误差平方和的根,比较简单就不列出公式了。

03传统方法研究思路

传统方法研究思路,自然就是手动提取特征,我们基于参考文献【3】来做说明。
分为几何特征与表观特征,几何特征包括人脸关键特征点位置、关键位置距离信息以及人脸各器官面积比例;表观特征包括LBP纹理特征。将这两种特征进行串联得到融合特征。
下面是具体的步骤。
3.1图像预处理
人脸图像收集时质量不同且伴有噪声,明暗灰度也差异较大,对图像进行预处理有助于后续对人脸特征的提取与计算。图像预处理包括灰度化处理、位置检测以及倾斜校正处理。

  1. 将图像转化为灰度图
  2. 利用Haar分类器截取人脸的大致区域
  3. 计算倾斜角并矫正
    3.2 几何特征提取
    3.2.1 全局特征
    根据ASM算法将68个人脸特征点的横纵坐标连接起来构成表征人脸几何特征关键点的特征向量,这就是全局特征。但是由于原始图像角度问题会导致向量在计算过程中会出现误差,所以要对向量进行归一化处理,具体包括(1)平移不变处理(2)尺度不变处理(3)旋转不变处理
    3.2.2 人脸距离特征
    人到一定年龄以后,面部的器官位置信息将不再随着年龄的增长而变化( 手术或意外情况除外) ,基于ASM-68向量定义18个距离特征如下:
    在这里插入图片描述
    3.2.3 面积特征

根据 ASM定位的关键点找到表征各器官面积的三角形,如眼睛、鼻子、下巴、嘴等, 将得到的54个三角形面积特征归一化后就可以得到三角形面积特征。
在这里插入图片描述
3.2 表观特征提取
表观特征表征的是人脸的整体外貌和人脸的皮肤状况等信息。可以反映出如纹理信息、人脸皮肤的状态、颜色深浅面部信息等。表观特征选择比较成熟的LBP特征。
LBP特征,就是在图像的某个区域内,将中心像素点的像素值作为阈值,相邻像素点与其进行对比,大于阈值标记为1,小于或等于则标记为0,产生8位二进制数,该值作为中心像素点的LBP值。当然,Gabor特征也是经常使用的。
3.3 特征融合与分类
3.3.1人脸特征融合
前面提取的几何特征显示了人脸关键特征点信息、人脸各器官间的距离比例信息以及面积特征等,表观特征表征了人脸的全局纹理特性。由于都已经进行了归一化处理,因此可以直接采用串联的方式进行特征融合。
3.3.2 分类
融合了特征之后就可以进入分类器了,常用的是SVM。
在文【2】中分别采用了18维的距离特征和Gabor滤波特征,使用了linear regression,gaussian regression和support vectorregression方法进行比较。效果如下:

在这里插入图片描述

从结果看来,对于几何特征,gaussian regression和support vectorregression表现更好均优于linear regression方法,而对于纹理特征,求取关键点的方法的不同,使得gaussian regression和supportvector regression各有优劣。

04深度学习方法研究思路

基于深度学习的方法,由于已经没有了手设特征的一步,所以就只剩下优化目标的选择和网络的选择。更强大的网络,通常都有更好的性能,我们看看文【2】训练的结果。
在这里插入图片描述
实验结果表明符合我们的预测,网络最强大的ResNext-50取得最优性能,同时,所有的网络都优于最好的传统方法。基于深度学习的方法没有太多可以说的地方,怼数据就是正确答案。

05总结

最后我们做一个总结。人脸颜值打分算法,虽然是一个比较主观的问题,但是也可以取得比较统一的结果。它可以是一个分类问题,也可以是一个回归问题。基于深度学习的方法+更大更高质量的数据集的整理,可以非常完美地解决这个问题。在各大软件当中目前用于娱乐,但颜值算法同样在美容等行业有一定价值,还有待应用。

转载:https://blog.csdn.net/Dulpee/article/details/80833930
  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要实现Python识别人脸颜值打分,可以使用OpenCV和Dlib这两个库。首先利用Dlib库中的人脸检测器检测出人脸,然后使用OpenCV中的颜色空间转换和直方图均衡化等技术对图像进行预处理,最后使用已经训练好的颜值评分模型对人脸进行评分。 以下是一个简单的Python代码示例: ```python import cv2 import dlib # 加载人脸检测器和颜值评分模型 detector = dlib.get_frontal_face_detector() predictor = dlib.shape_predictor("shape_predictor_68_face_landmarks.dat") model = cv2.ml.SVM_load("beauty_svm_model.xml") # 加载图片 img = cv2.imread("test.jpg") # 灰度转换 gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) # 检测人脸 faces = detector(gray) # 遍历每张人脸 for face in faces: # 获取面部特征点 landmarks = predictor(gray, face) # 提取特征 features = [] for i in range(17, 68): features.append((landmarks.part(i).x, landmarks.part(i).y)) # 计算矩形框大小 x, y, w, h = cv2.boundingRect(np.array(features)) # 裁剪人脸图像 face_img = img[y:y+h, x:x+w] # 图像预处理 face_img = cv2.cvtColor(face_img, cv2.COLOR_BGR2GRAY) face_img = cv2.equalizeHist(face_img) face_img = cv2.resize(face_img, (128, 128)) # 特征向量化 feature_vector = face_img.reshape(1, -1) # 预测颜值 score = model.predict(feature_vector)[1][0] # 打印颜值 print("颜值评分:", score) ``` 注意:这是一个简单的示例,实际中需要更多的数据和更复杂的模型来提高准确性。同时,需要注意保护用户隐私,不要将用户的照片和颜值评分信息泄露出去。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值