写点什么

StyleGAN 调整面部表情,让虚拟人脸更生动

作者:极客飞兔
  • 2023-03-21
    俄罗斯
  • 本文字数:1991 字

    阅读完需:约 7 分钟

StyleGAN 调整面部表情,让虚拟人脸更生动

🎈 人脸表情

  • 通过上一篇文章 StyleGAN 生成的人脸:https://xie.infoq.cn/article/ac66798d019aa199f60f46d40

  • 人脸图片都是比较中规中矩的,如果能够给人脸增加一些表情的话,会让人脸显得更加的自然和逼真

  • 那么调整人脸的年龄、颜值、笑容、情绪等细节,就显得非常的重要了

人脸表情调整


🎈 调整步骤

  • 在上一篇文章中,我们知道生成人脸是通过 main.py 这个程序

  • 其实在项目 main.py 同级目录下,还有一个 edit_photo.py 程序

  • 这个程序就是用来调整生成的人脸的表情的

  • 只要稍微这个程序的源码就可以知道,它改变人物的表情主要是通过 main.py 生成图片的同时,也会生成每个人物的潜码,保存在 results\generate_codes 文件夹下面

  • 改变人脸细节主要通过潜码去修改,从源码中知道可以自定义年龄、人脸角度、笑容、人脸宽高、脸型、戴眼镜还有各种情绪都是可以去改变的

  • 源码中默认选择 networks/generator_star-stylegan2-config-f.pkl 明星人脸模型,并且通过第 9 个潜码 0008.txt,去修改第 9 张图片的 age.npy,也就是年龄图

  • 其中 direction_file = 'age.npy' 就是可以自定义改变人脸调整的方向

  • 其中 networks/generator_star-stylegan2-config-f.pkl 要跟第一步生成人脸图片的模型对应上

  • 其中 read_feature('results/generate_codes/0008.txt') 就是你想选择调整的是哪一张图片

  • 其中 coeffs = [-15., -12., -9., -6., -3., 0., 3., 6., 9., 12.] 就是你想调整的程序,一个元素对应一张图片,所以处理结果也会生成对应的 10 张图片

def main():    # 在这儿选择生成器    tflib.init_tf()    with open('networks/generator_star-stylegan2-config-f.pkl', "rb") as f:        generator_network, discriminator_network, Gs_network = pickle.load(f)
# 这是一些配置参数,不要动它 w_avg = Gs_network.get_var('dlatent_avg') noise_vars = [var for name, var in Gs_network.components.synthesis.vars.items() if name.startswith('noise')] Gs_syn_kwargs = dnnlib.EasyDict() Gs_syn_kwargs.output_transform = dict(func=tflib.convert_images_to_uint8, nchw_to_nhwc=True) Gs_syn_kwargs.randomize_noise = False Gs_syn_kwargs.minibatch_size = 1 truncation_psi = 0.5
# 在这儿选择人物的潜码,注意要与生成器相匹配。潜码来自生成目录下有个generate_codes文件夹里的txt文件。 face_latent = read_feature('results/generate_codes/0008.txt') z = np.stack(face_latent for _ in range(1)) tflib.set_vars({var: np.random.randn(*var.shape.as_list()) for var in noise_vars}) # [height, width] w = Gs_network.components.mapping.run(z, None) w = w_avg + (w - w_avg) * truncation_psi
# 在这儿选择调整的方向,共有21种调整方式,它们的名称与分别对应的功能如下所示。 ''' age.npy - 调整年龄 angle_horizontal.npy - 在左右方向上调整人脸角度 angle_vertical.npy - 在上下方向上调整人脸角度 beauty.npy - 调整颜值 emotion_angry.npy - 调整此项可增添/减弱一些生气的情绪(调整步幅建议缩小) emotion_disgust.npy - 调整此项可增添/减弱一些厌恶的情绪(调整步幅建议缩小) emotion_easy.npy - 调整此项可增添/减弱一些平静的情绪(调整步幅建议缩小) emotion_fear.npy - 调整此项可增添/减弱一些害怕的情绪(调整步幅建议缩小) emotion_happy.npy - 调整此项可增添/减弱一些开心的情绪(调整步幅建议缩小) emotion_sad.npy - 调整此项可增添/减弱一些伤心的情绪(调整步幅建议缩小) emotion_surprise.npy - 调整此项可增添/减弱一些惊讶的情绪(调整步幅建议缩小) eyes_open.npy - 调整眼睛的闭合程度 face_shape.npy - 调整脸型 gender.npy - 调整性别 glasses.npy - 调整是否戴眼镜 height.npy - 调整脸的高度 race_black.npy - 调整此项可接近/远离向黑种人变化 race_white.npy - 调整此项可接近/远离向白种人变化 race_yellow.npy - 调整此项可接近/远离向黄种人变化 smile.npy - 调整笑容 width.npy - 调整脸的宽度 ''' direction_file = 'age.npy' # 从上面的编辑向量中选择一个
# 在这儿选择调整的大小,向量里面的值表示调整幅度,可以自行编辑,对于每个值都会生成一张图片并保存。 coeffs = [-15., -12., -9., -6., -3., 0., 3., 6., 9., 12.]
# 开始调整并保存图片 move_latent_and_save(w, direction_file, coeffs, Gs_network, Gs_syn_kwargs)
复制代码


🎈 调整结果

  • 运行结果会存放在 results\age 文件夹中

  • 可以根据图片去做一个渐变的视频,比如人物年龄从儿童转变到老龄,视觉效果很不错

人脸年龄调整结果


发布于: 刚刚阅读数: 2
用户头像

极客飞兔

关注

希望我写的软件能给别人带来一份全职工作。 2023-03-02 加入

CSDN专家博主,领域之星 阿里天猫精灵首席测评官,专家博主 华为云云享专家 思否2022年度先锋榜单

评论

发布
暂无评论
StyleGAN 调整面部表情,让虚拟人脸更生动_人工智能_极客飞兔_InfoQ写作社区