魔扣论坛

魔扣源码论坛业务
查看: 576|回复: 1

美颜贴纸SDK中功能的实现原理

[复制链接]
  • TA的每日心情
    慵懒
    2020-4-9 16:53
  • 签到天数: 89 天

    [LV.6]每天都来

    88

    主题

    4

    回帖

    492

    积分

    中级魔扣

    Rank: 3Rank: 3

    魔扣币
    899
    贡献
    359
    威望
    1
    发表于 2019-12-18 16:17:32 | 显示全部楼层 |阅读模式
    魔扣币兑换比例:【 50以下 : ¥1 = 10 魔扣币 】丨【 50 - 100 :¥1 = 20 魔扣币】丨【 100以上:¥1 = 30 魔扣币 】

    本帖子中包含更多资源

    您需要 登录 才可以下载或查看,没有账号?立即注册

    x
    随着音视频和美颜美型技术的发展,我们不仅可以通过手机进行拍照录像,还可以实时处理视频数据,添加美颜,美型,让我们的拍摄既能变漂亮,又可以在录制的时候添加贴纸,使得原本有些枯燥乏味的拍摄越来越有趣。那么美颜贴纸贴纸SDK中功能是怎样实现的呢,下面来简单分享下相关的原理。
    1.需要利用OpenGL的混合模式将原始图像和贴纸相融合。代码如下:
    glEnable(GL_BLEND);
    glBlendEquation(GL_FUNC_ADD);
    glBlendFuncSeparate(GL_ONE, GL_ONE_MINUS_SRC_ALPHA, GL_ONE, GL_ONE);
    2.需要根据时间按顺序将某张贴纸图片加载到一个纹理中,这一步可以理解为帧动画。
    3.需要人脸识别类库所提供的人脸关键点,然后根据人脸关键点来定位贴纸所在的位置。
    4.需要实现美颜贴纸SDK中远小近大并且跟随人脸转动的效果,这里面我们需要通过仿射变换得到一个变换矩阵,然后在顶点着色器里面用原始坐标与这个变换矩阵相乘,这样我们就会获得一个顶点坐标的矩形区域。代码如下:
    顶点着色器:
    gl_Position = uMVPMatrix*position;
    跟随人脸转动:
    图片1.png
    Matrix.rotateM(mModelMatrix, 0, rollAngle, 0, 0, 1);
    Matrix.rotateM(mModelMatrix, 0, yawAngle, 0, 1, 0);
    Matrix.rotateM(mModelMatrix, 0, pitchAngle, 1, 0, 0);
    5.关闭混合模式。
    glDisable(GL_BLEND);
    综上,利用了人脸关键点,矩阵变换和OpenGL渲染的混合模式来做到了动态人脸的效果,从而实现美颜贴纸SDK中的各种类型的贴纸功能,这样看下来,实现功能的原理也比较清晰。
    不过相比起来,一些有美颜贴纸需求的平台在选择接入SDK时都会有一些顾虑,但其实只要选择好的服务商,并且事先做好考察,比如产品的演示、功能种类、数量等等,最后选择到的SDK不会存在过多问题的。
    声明:以上内容均为作者本人原创,转载需注明作者及原文链接,欢迎转载分享。

    该用户从未签到

    3

    主题

    236

    回帖

    475

    积分

    中级魔扣

    Rank: 3Rank: 3

    魔扣币
    236
    贡献
    236
    威望
    0
    发表于 2019-12-18 16:18:30 | 显示全部楼层
    楼下的接上
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    • 联系我们
    • 新浪微博 :
    • 在线客服 :魔扣科技 
    • 源码QQ群 :魔扣源码论坛官方总群
    • 联系邮箱 :charlin#morko.net
    • 微信扫一扫
    快速回复 返回顶部 返回列表