本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
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; 跟随人脸转动: 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不会存在过多问题的。 声明:以上内容均为作者本人原创,转载需注明作者及原文链接,欢迎转载分享。
|