本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
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是一件既省时省力还省钱的事情,何乐而不为? 声明:以上内容均为作者本人原创,转载需注明作者及原文链接,欢迎转载分享。
|