天问

图像技术在直播中的应用 | 架构师实践日


近几年来,直播平台的竞争花样百出,但都离不开颜值的高低,美颜等图像技术功能几乎是直播的标配功能。沉浸图像技术多年的 Tusdk CTO 邱彦林在七牛架构师实践日中,根据自身多年实践经验,对图像技术在直播中的应用进行了剖析分享。以下是对他演讲内容的整理。


邱彦林

10 年以上开发经历,国内最早一批 Flash 开发人员中的一员。曾出版 2 本 Flash 中文技术书籍,擅长程序架构设计。在图像处理、视频处理、Web 架构设计等领域均有涉猎。现以技术合伙人身份加入涂图团队,专注于图像技术,以及机器学习在图像处理中的实际应用。


图像技术在直播中的应用

图像技术在直播中的应用,从发展趋势上看有:

  • 美颜

  • 智能美颜

  • 动态贴纸

  • 实时鉴黄

  • AR/VR

在直播中,美颜基本已经成为一个标配。除此之外,还有瘦脸、扩瞳等智能美颜功能。最近比较火的动态贴纸,也是图像技术的一种应用。动态贴纸会跟随人脸移动,这其中人脸识别技术是关键。随着政策进一步缩紧,鉴黄也成为了直播平台不可少的话题。AR/VR 日趋火热的态势也渐渐融入到了直播中。以上提及的只是图像技术的一部分,下面着重讲述人脸识别相关的技术。


美颜

美颜-原理:


所谓美颜,通俗点讲是原图首先需要经过磨皮处理。磨皮是美颜的关键点,它主要解决的是去痘、去斑,通过调整两个图的混合权重,来控制磨皮的程度,达到所需的效果。最后一步是美肤,比如想把皮肤肤色调得白一点、红嫩一点,或者一些特殊的需求都可以实现。


美颜-技术框架:


直播里美颜用的主流技术是 OpenGL ES,OpenGL ES 是 OpenGL 的切入版本,有比较好的实现。OpenGL ES 有以下的特点:

  • 跨平台 (Android、iOS)

  • 性能高,功耗小

  • 现成的开源库,如 GPUImage、Google Grafika、网上开发者开源方案等  


美颜-算法:


如果相临的两个区域灰度值相差比较大,这就意味着存在噪点。在美颜算法中,模型算法的核心是去噪,比如脸上有个痘,这个痘在一个像素里等同于一个噪点,因为跟周边像素的亮度差比较大,做去除处理后皮肤看起来就会比较平滑,从而达到美颜效果。


去噪的算法有很多,如果简单的把斑去掉有很多的办法。但是在美颜里面的算法要保持边界,同时做到平滑,这叫做滤波算法。一般的滤波算法比较常见的是双边滤波,这也是比较高效的算法,更适合在移动端上。虽然 GPU 是并行运算的 ,但 GPU 有一定的局限性,在手机直播时,超过一定范围十分耗电,因此需要在精度计算里,把精度降低一点,达到在移动产品上能够比较好的应用效果,做一个平衡。


美颜-美肤:


美肤即肤色调整, 肤色调整的出现是因为现有的很多平台都使用了美颜效果,但是没有经过肤色检测直接使用美颜,整体处理图片,就会造成整体偏色。实际上美颜仅仅是针对人脸美颜,对人脸的范围做美化,其他的部分比如背景是不做处理的,比较常见的做法是用肤色检测,达到局部指定美颜的效果。    


肤色检测-人脸的颜色值是在一个固定的颜色空间范围,常见的颜色空间就是 RGB、YUV、HSV。YUV 和 RGB 相比可以节省带宽进行传输;RGB 是常见的色彩空间,日常用的显示设备就是基于 RGB 空间,不需要压缩,但鉴定肤色时,需要三原色同时满足肤色的颜色范围,才可以肤色检测;HSV 的优势是只需要对 H 值(H值在25-50之间即可判断为肤色)进行考虑,其他两个元素不用考虑,运算量会减少。在直播的不同阶段,要分别使用这三种色彩空间,不停地把这三种色彩空间进行相互转换。


除算法外,美工和设计也会起很大的作用。例如美化的强度、最终的美化效果都需要美工和设计的协助才可做到最好的美化效果。


此外,光照的影响也是不容忽视的,因此需要一些技术手段结合起来去测试,做优化。


美颜-性能


iOS 端:iOS 平台性能问题不大,比如 GPUImage 是第三方的,实现了很多效果,上述提到的算法,在 GPUImage 上有简单版的实现,包括怎么写脚本、运行、做双边滤波等, GPUImage 上都有简单的实现,效果也很好。而且在做直播的时,GPUImage 可以作为客户端扩展,唯一需要做的事情是加一个推流,因为 GPUImage 包含从客户端的采集、处理到每一帧的数据,可以根据需要输出获取所要资源( YUV 或 RGB 都可以输出来),然后获取到美图的数据之后就可以推流。


安卓端:安卓平台,厂商、设备、系统版本都很多,相互间比较难兼容。安卓端需要注意的有三个问题:


1)同一款 GPU ,在不同的机器上跑起来的效果不一样,因此需要基于 GPU 性能分级调整算法复杂度,如 PowerVR (三星,MTK),ARM Mali (三星、华为),  高通 Adreno, Nvidia,就需要调整算法适配,保证在大部分环境下使用。


2)GPU 加速,安卓端会涉及到编码,这也是 GPU 加速比较好的方式,但是 GPU 加速也遇到问题,比如安卓上面 4.3 以上才支持这个编码方式,安卓 4.0 之前只能直接从相机采集里面获取到一个纹理,即 GL TEXTURE EXTERNAL ,相机直接把采集到的画面转给 GPU ,全部通过 GPU 加速。安卓 4.3 之后相机直接把采集到的画面转给 GPU ,再通过 GPU 加速。从相机采集到处理到编码,应用 GPU 加速,效果是最好最快的,但同时这对系统的兼容要求是最高的。


3)输出 YUV,很多直播平台都需要支持输出 YUV,比如连麦,编码出来的数据,都要求输出 YUV 的数据。这些 YUV 的数据就涉及到 CPU 和 GPU 的转换过程,如果处理是在CPU 上运行的,GPU 不能直接输出,需要从 CPU 到 GPU 的转换输出,目前没有比较好的解决方案,有的时候可以通过 GRAONCBUTTER 来实现。CPU 到 GPU 的转换,可以达到毫秒级别。但直接从 GPU 转换到 CPU,好的设备也会花费 20 毫秒左右,这样导致数据预测是 24 帧,可能就会出现掉帧的情况。但在主流上影响不大,大部分情况下都是可以接受的。


以上的内容都属于美颜 1.0 的概念,而目前最新的美颜技术已经发展到了 2.0 概念。如果美颜 1.0 只是化妆的话,美颜 2.0 基本就能达到整容的效果——把眼睛变大,把圆脸变成瓜子脸。而实现这一效果的基础就是人脸识别。因此,图像处理技术的发展以及涉猎范围会越来越广,应用方面将会越来越多。

「七牛架构师实践日」—— 这里只谈架构

 

七牛架构师实践日是由七牛云发起的线下技术沙龙活动,联合业内资深技术大牛以及各大巨头公司和创业品牌的优秀架构师,致力于为业内开发者、架构师和决策者提供最前沿、最有深度的技术交流平台,帮助大家知悉技术动态,学习经验成果。


想了解更多关于架构师实践日详情,观看活动视频及下载 PPT 可点击「阅读原文」进行了解。 

博客地址:http://blog.yoqi.me/?p=1343
扫我捐助哦
喜欢 0

这篇文章还没有评论

发表评论