背景
随着移动设备的发展,美颜已成为多媒体内容生成链路中不可缺少的一种基本能力,尤其是在来疯直播秀场业务的场景下,主播的颜值就意味着生产力,直接影响主播及平台的收入。
美颜的目的就是要让人看起来更美,包括皮肤细腻、白皙、光滑,脸部各个器官及脸型可以进行细致的调整,通过美妆调节可以达到快速上妆的效果。为达成上述人脸美颜效果的诉求,我们从技术上主要通过如下四个关键步骤来实现:
技术实现
1. 获取人脸关键点信息
美颜处理依赖于人脸关键点,基于这些关键点,我们可以精准的知道脸部各个器官的位置信息,从而进行美化处理:
首先,我们基于AliFace实现人脸关键点基本信息的获取,主要包括眉毛、眼睛、鼻子、嘴巴、脸部外轮廓这106个关键点;
其次,基于检测出的106个关键点,我们需要对脸部关键点进行稠密化处理,插入额外的关键点,如额头区域和脸部外围限制区域,使其能够覆盖整个脸部区域;
最后,基于稠密化以后的人脸关键点,对其构建整张脸的三角网格,实现对整个脸部区域的三角剖分(Delaunay Triangulation),三角剖分将人脸切分成多个无重叠的三角区域,进而可以使用openGL或者D3D进行绘制渲染处理,从而实现对脸部器官的各种美化处理。基础人脸关键点、稠密后人脸关键点、三角网格图片分别见下图:
2. 皮肤美化处理
皮肤美化处理主要包括磨皮和美白,磨皮需要把脸部皮肤区域处理得细腻、光滑,美白则需要将皮肤区域处理得白皙、红润。具体的处理模块见下图:
其主要包含如下几个关键步骤:
1)图像平滑
磨皮主要是通过使用保边滤波器对脸部非器官区域进行平滑,达到脸部皮肤区域光滑的效果。一般来说常用的保边滤波器主要有双边滤波、导向滤波、表面模糊滤波、局部均值滤波等,考虑到性能和效果的平衡,一般都采用双边滤波或者导向滤波。
双边滤波考虑了窗口区域内像素的欧式距离和像素强度差异这两个维度,使得其在进行平滑时具有保护边缘的特性。其优点是在GPU侧计算量小,资源消耗低,其缺点是无法去除色差较大的孤立点,如痘痘、黑痣等,且磨皮后的效果较为生硬。
而导向滤波则是根据窗口区域内纹理的复杂程度来进行平滑程度的调节,在平坦区域趋近于均值滤波,在纹理复杂的区域则趋近于原图,窗口区域内纹理的复杂程度跟均值和方差强相关,既能够很好地处理平坦区域的各种噪点,又能较完整的保存好轮廓区域的信息,且在GPU侧的计算并不复杂,所以结合我们的业务需求,我们采用了引导滤波作为磨皮处理的保边滤波器。导向滤波(Guide Filter)的算法如下图所示:
在磨皮这种场景下,导向滤波的引导图即为原图本身,并且其均值滤波的中间结果可用于后续的锐化处理以提升性能。
2)人脸ROI(Region of interest)处理
为了解决磨皮效果的精度和质量,我们标定了一个人脸美颜的遮罩图片,该图片的rgb三个通道分别对应脸部器官(眼睛、眉毛、鼻子、嘴等)区域的Mask1,法令纹区域和眼袋区域的遮罩Mask2,脸部高、低光区域的遮罩Mask3,高、低光遮罩的Mask3如下图所示
通过人脸关键点信息结合该遮罩图片,利用三角剖分的方法实时生成与当前人脸所对应的脸部遮罩Mask,对经过平滑后的图像和原图进行融合处理。Mask1会保护脸部各个器官不被平滑,保证了脸部磨皮区域的精准性,Mask2增强了法令纹区域和眼袋区域的磨皮程度,达到去除法令纹和眼袋的目的,Mask3则通过高、低光的处理使得磨皮后的五官更为立体。
之所以将上述三个遮罩mask合并成一张图片,是为了降低在GPU侧获取像素值的频次以达到提升性能的目的。与此同时,在非脸部区域通过肤色检测实现对肤色区域磨皮,不是肤色的区域则拒绝被平滑,从而实现对整图的磨皮处理。
3)纹理增强及肤色映射
磨皮后的图像在整体上被模糊化处理,使得整个图像不够通彻透亮,所以需要再对其进行锐化处理。为提升性能,我们结合导向滤波过程中的均值滤波结果和人脸ROI区域mask,采用近似USM锐化的方式对图像进行增强,从而实现对纹理细节的凸显。
为实现肤色美白,我们通过采用颜色查找表的方式来将肤色映射到理想的颜色范围。颜色查找表基本原理如下所示:
其本质上相当于一个离散函数,给定任意的rgb颜色值,都可以在颜色查找表图片中找到对应的颜色值内插出相应的转换结果。美白颜色查找表的生成需要设计师根据肤色所处的大致颜色范围,基于基准颜色查找表经过一系列的色彩调整后生成一张新的颜色查找表的图片,如下图所示左边为基准颜色查找表,右边为调色后的肤色美白颜色查找表。
上述就是皮肤美化的几个重要步骤,经过皮肤美化后的效果对比图如下:
3. 脸部器官美型处理
脸部美型处理主要包括脸型调整和脸部器官调整,实现上述功能的核心步骤是基于人脸关键点通过图像形变的形式来实现脸部各个器官的形状调整。我们所采用的图像形变算法主要是局部扭曲算法和三角剖分,局部扭曲算法一般包括局部缩放、局部平移、局部旋转等,如大眼功能即可通过局部缩放来实现。三角剖分的方法则是通过对三角网顶点进行平移,再将平移后的顶点更新到对应的纹理坐标,通过openGL或者D3D进行绘制渲染,从而实现整个关联三角网的变形。具体的脸部美型效果如下图所示:
4. 美妆处理
美妆效果的好坏强依赖于素材模板精准的标定数据和准确的人脸关键点数据,具体的实现流程主要包括如下几个步骤:
1)妆容素材的管理及解析。结合各种妆容及贴纸素材,我们构建了一套完整的绘制机制,根据对妆容效果描述文件(Json)的解析,结合顶点绘制规则对各个类型的素材进行绘制处理及融合。
2)素材模板和当前人脸器官进行对齐。素材的描述文件中存有相应的标定信息,结合当前图像的人脸关键点,采用三角剖分的方式实现对素材模板的变形,达到与当前人脸器官对齐的目的。
3)不同器官的定制化处理。由于不同器官的处理流程不一样,需要针对不同的器官采用不同的处理方式。如美齿时需要结合牙齿区域的mask模板通过美齿颜色查找表实现牙齿区域颜色的调整;眉毛的处理则需先将当前图像的眉毛结合当前眉毛模板的素材进行眉毛区域的形变调整,同时将当前图像的眉毛部分进行减弱,再和对齐后的眉毛模板进行融合。
4)图像融合。由于素材模板和脸部器官的差异性,我们需要采取不同的融合方式来实现图层的融合处理。如腮红我们可以直接基于素材的半透明通道进行融合,修容处理则需采用高反差算法进行融合处理。
当然,上述美妆处理的流程也适用于人脸2D贴纸。
结果及落地
性能方面,在iphone6p等中低端机型上,可实现720p 24fps 实时人脸美颜;效果方面,通过对皮肤的处理,可使人脸皮肤达到白皙细腻的效果,同时主播可按照自己的喜好对脸部的任意器官进行调整。目前人脸美颜功能已在来疯直播(移动端和PC端)、优来播移动端及淘宝直播PC端落地,来疯移动端主播日均开播人数实现一倍增长。具体的人脸美颜效果如下图所示:
一些思考
1. 结合业务特性,建立"美"的标准。什么是“美”,在人类的普世观里面是有个基础标准的,但针对不同的历史时期、地域、场景会有所差别,例如,东方人的审美观点集中在:“三庭五眼”、“四高三低”、“中轴丰字布局”等,而在表演类的秀场场景下,则更会突出:“大眼”、“瘦脸”、“尖下巴” 、“胶质感皮肤”等,因此,结合我们的业务场景,用数学的方式定义“秀场”类的“美学”标准客观评价体系,一方面帮助我们的用户更简单、快捷的进行美化处理。另一方面,为我们后续的迭代优化、完善研发工作提供数据支撑。
2. 妆容迁移。目前的美妆都是基于多个素材来实现,其开发成本相对较高。而妆容迁移可脱离对美妆素材的强依赖,降低开发成本。用户只需选取一张好看的效果图即可实现美妆,这是我们后续努力的方向。
参考文献
【1】 https://www.ti.inf.ethz.ch/ew/Lehre/CG13/lecture/Chapter 6.pdf
【2】 http://homepages.inf.ed.ac.uk/rbf/CVonline/LOCAL_COPIES/MANDUCHI1/Bilateral_Filtering.html
【3】 http://kaiminghe.com/eccv10/index.html
【end】