- 通过上一篇文章
StyleGAN
生成的人脸:https://segmentfault.com/a/1190000043559982
- 人脸图片都是比拟中规中矩的,如果可能给人脸减少一些表情的话,会让人脸显得更加的天然和真切
- 那么调整人脸的年龄、颜值、笑容、情绪等细节,就显得十分的重要了
- 在上一篇文章中,咱们晓得生成人脸是通过
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
文件夹中
- 能够依据图片去做一个突变的视频,比方人物年龄从儿童转变到老龄,视觉效果很不错