魔扣论坛

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

人脸动态贴纸sdk算法详解,人脸动态贴纸功能如何实现

[复制链接]
  • TA的每日心情

    2 小时前
  • 签到天数: 35 天

    [LV.5]经常留意

    35

    主题

    39

    帖子

    198

    积分

    初级魔扣

    Rank: 2

    魔扣币
    359
    贡献
    145
    威望
    0
    发表于 2019-9-19 16:32:44 | 显示全部楼层 |阅读模式
    魔扣币兑换比例:【 50以下 : ¥1 = 10 魔扣币 】丨【 50 - 100 :¥1 = 20 魔扣币】丨【 100以上:¥1 = 30 魔扣币 】
    淘宝、天猫优惠券

    本帖子中包含更多资源

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

    x
    泛娱乐行业在互联网领域中发展趋势逐渐增强,而直播、短视频、视频社交等作为头部产品受到了众多用户的关注和喜爱。为了能够更好的满足用户体验,众多APP纷纷开始接入人脸动态贴纸sdk, 以新颖有趣的人脸动态贴纸功能为引,增强用户对平台的活跃度和黏性程度,从而带动平台自身的发展。
    说白了,动态贴纸其实就是静态贴纸的循环播放,现在要想实现人脸动态贴纸功能的话,其算法可以大概分为两个部分。
    人脸检测和关键点识别
    既然是人像贴纸,那么肯定要涉及到人脸检测和关键点识别的内容,因为只有在有人脸的情况下获取到必须的关键点,这样才能准确的“打上”贴纸。像一些专门做贴纸的APP,其中的贴纸通常都是经过数十几个人脸特征点的模板配置,这样一来才可以有效的捕捉用户的面部,实现最终的动态贴纸效果。
    怎样将贴纸进行融合
    在开发人脸动态贴纸sdk时,拥有了人脸特征点之后,接下来就是考虑怎样将贴纸融合到适当的未知,可以简单概括为以下几点:
    1.计算基准点
    通常取人脸中的5个特征点,经过计算后得到三个关键点,这三个关键点在人脸中是变化比较小的,但是又可以同时覆盖整个人脸面部区域,所以具有整张人脸的代表性。
    2.构建基准点
    将图像或视频中标定出三个人脸关键点的位置,并将其位置信息进行记录。
    3.构建贴纸模板
    将想要使用的贴纸放置到图像或视频中在前端展现出来的位置,然后保存两个贴纸模板,这样就可以制作成为贴纸模板。
    4.贴图
    经过前面的几步流程之后,将用户照片像素映射到贴纸模板中,然后根据贴纸模板像素的透明度进行alpha混合,从而实现最终的人脸动态贴纸功能。
    最后给大家简单分享一部分实现人脸动态贴纸功能的代码,仅供参考使用。
    #include"Trent_Sticker.h"
    #include"Trent.h"
    voidGetTexTransMatrix(float x1, float y1, float x2, float y2, float x3, floaty3,float tx1, float ty1, float tx2, float ty2, float tx3, float ty3,float*texMatrix)
    {
           float detA;
           detA = tx1*ty2 + tx2*ty3 + tx3*ty1 -tx3*ty2 - tx1*ty3 - tx2*ty1;
           float A11, A12, A13, A21, A22, A23, A31,A32, A33;
           A11 = ty2 - ty3;
           A21 = -(ty1 - ty3);
           A31 = ty1 - ty2;
           A12 = -(tx2 - tx3);
           A22 = tx1 - tx3;
           A32 = -(tx1 - tx2);
           A13 = tx2*ty3 - tx3*ty2;
           A23 = -(tx1*ty3 - tx3*ty1);
           A33 = tx1*ty2 - tx2*ty1;  
           texMatrix[0] = (x1*A11 + x2*A21 + x3*A31)/ detA;  
           texMatrix[1] = (x1*A12 + x2*A22 + x3*A32)/ detA;  
           texMatrix[2] = (x1*A13 + x2*A23 + x3*A33)/ detA;  
           texMatrix[3] = (y1*A11 + y2*A21 + y3*A31)/ detA;
           texMatrix[4] = (y1*A12 + y2*A22 + y3*A32)/ detA;      
           texMatrix[5] = (y1*A13 + y2*A23 + y3*A33)/ detA;  
    }
    以上就是关于人脸动态贴纸sdk的算法详解,其实对于具备一定技术实力的人来讲,动态贴纸即循环播放的静态贴纸,但是对于不具备技术实力的人来讲,实现起来是非常困难的,建议找专业的人脸动态贴纸sdk服务商。毕竟对于开发者和运营者来讲,接入三方sdk是一件既省时省力还省钱的事情,何乐而不为?
    声明:以上内容均为作者本人原创,转载需注明作者及原文链接,欢迎转载分享。

    该用户从未签到

    1

    主题

    219

    帖子

    437

    积分

    中级魔扣

    Rank: 3Rank: 3

    魔扣币
    218
    贡献
    218
    威望
    0
    发表于 2019-9-19 16:44:16 | 显示全部楼层
    我也来顶一下..
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

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