简析视频美颜SDK中常见的人像特效算法

  [复制链接]
查看: 390|回复: 1
发表于 2019-10-22 16:36:21 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

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

x
美颜功能大多数都是用来美化图片和视频的,而视频美颜SDK所实现的美颜效果通常是以视频形式为主。一个视频美颜SDK中可以包含多种功能,也可以应用多种特效算法,毕竟现在所面向的平台和用户都比较广泛,所以需要提前做好相应的“准备”。本文来简单分享下基于抠图的人像特效算法。
在这里需要提到两种算法,一种是CNN,另一种是FCN,关于这两个名词的具体含义在这里就不再继续展开,可以理解的是这两种算法是专门针对人像抠图的。在人像抠图过程中,会用到CNN或FCN,只不过CNN相对是一种比较传统的算法,所以选择FCN更多一些。
美颜sdk20.png
两者之间的优缺点对比
优点:
1.    比起CNN更加高效,可以避免由于使用像素块而带来的重复存储和计算卷积的问题。
2.    可接受任意大小的输入图像,并不要求所有的训练图像和侧视图像尺寸相同。
缺点:
1.    无法充分考虑像素与像素之间的关系,丢失了对空间信息的考量。
2.    无法得到足够精细的结果,最终采样结果比较模糊和平滑,对图像中的细节部分不够敏感。
美颜sdk13.png
部分参考代码如下
    current = image
    for i, name in enumerate(layers):
        if name in ['conv3_4', 'relu3_4','conv4_4', 'relu4_4', 'conv5_4', 'relu5_4']:
            continue
        kind = name[:4]
        if kind == 'conv':
            kernels, bias =weights[0][0][0][0]
            # matconvnet: weights are [width,height, in_channels, out_channels]
            # tensorflow: weights are [height,width, in_channels, out_channels]
            kernels =utils.get_variable(np.transpose(kernels, (1, 0, 2, 3)), name=name +"_w")
            bias =utils.get_variable(bias.reshape(-1), name=name + "_b")
            current =utils.conv2d_basic(current, kernels, bias)
        elif kind == 'relu':
            current = tf.nn.relu(current,name=name)
            if FLAGS.debug:
                utils.add_activation_summary(current)
        elif kind == 'pool':
            current =utils.avg_pool_2x2(current)
        net[name] = current
return net
美颜sdk12.png
基于抠图的人像特效算法从字面上来看可能还是比较难理解,比如景深模糊的展现效果,就是以抠图为核心的人像特效算法,除此之外还有马赛克之类特效都是基于此实现的。
从应用场景方面来看,视频美颜SDK所对应的偏动态更多一些,换句话说视频美颜SDK应用在直播或短视频这一类场景后,需要着重考虑的算法和机制可以说是重点部分了。
由此可见,随着人们不断增强的美颜需求,美颜效果的选择和美颜所面对的用户群体也随之发生了很大变化,这样一来,视频美颜SDK在开发和算法选择等方面都要多加考虑才行。
声明:以上内容均为作者本人原创,转载需注明作者及原文链接,欢迎转载分享。

发表于 2020-6-20 17:55:03 | 显示全部楼层
全局回复4
回复

使用道具 举报

高级模式
B Color Image Link Quote Code Smilies

本版积分规则

 
 
工作时间:
8:00-18:00
客服热线:
15368564009
客服微信