StyleGAN 调整面部表情,让虚拟人脸更生动
人脸表情
- 通过上一篇文章
StyleGAN生成的人脸:https://www.cnblogs.com/tinygeeker/p/17236264.html - 人脸图片都是比较中规中矩的,如果能够给人脸增加一些表情的话,会让人脸显得更加的自然和逼真
- 那么调整人脸的年龄、颜值、笑容、情绪等细节,就显得非常的重要了

调整步骤
- 在上一篇文章中,我们知道生成人脸是通过
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文件夹中 - 可以根据图片去做一个渐变的视频,比如人物年龄从儿童转变到老龄,视觉效果很不错

StyleGAN 调整面部表情,让虚拟人脸更生动的更多相关文章
- 会议更流畅,表情更生动!视频生成编码 VS 国际最新 VVC 标准
阿里云视频云的标准与实现团队与香港城市大学联合开发了基于 AI 生成的人脸视频压缩体系,相比于 VVC 标准,两者质量相当时可以取得 40%-65% 的码率节省,旨在用最前沿的技术,普惠视频通话.视频 ...
- 为什么虚拟DOM更优胜一筹
注意: 虚拟DOM只是实现MVVM的一种方案,或者说是视图更新的一种策略.没有虚拟DOM比MVVM更好一说. 我们回顾传统MVC框架,如backbone,它是将某个模板编译成模板函数,需要更新时,是自 ...
- 降低winnt Apache服务的权限,让你的虚拟主机更安全
winnt 安装 Apache 后,在后台的服务默认是以system权限运行的(system是winnt的最高权限),这给服务器带来很大的安全隐患,最近我遇到的就是php的W8C 文件管理既然可以随意 ...
- Learning Face Age Progression: A Pyramid Architecture of GANs-1-实现人脸老化
Learning Face Age Progression: A Pyramid Architecture of GANs Abstract 人脸年龄发展有着两个重要的需求,即老化准确性和身份持久性, ...
- 如何用AR Engine开发一个虚拟形象表情包?
现如今,人们在网上聊天.发帖时越来越爱用表情包,表情包一方面是一种个性化的表达方式,另一方面更能传达出当下的心理活动,可以说在网络社交中表情包是一个不可或缺的存在.加上近年来元宇宙的兴起,3D虚拟形象 ...
- 《虚拟伙伴》AR增强现实应用开发总结
一.概述 1.1选题背景 随着时代的发展,人们的生活节奏越来越快,生活质量也越来越高,但却在繁忙之中忽略或者忘记了关心自己成长时代最重要或者最正确的事情和道理.虽然现在有很多社交平台,如微博,微信,f ...
- 【翻译】Netscaler真实表现性能调整
源地址:https://msandbu.wordpress.com/2014/10/31/netscaler-and-real-performance-tuning/ 作者显然不是以英语为母语的,所以 ...
- 25 行 Python 代码实现人脸识别——OpenCV 技术教程
OpenCV OpenCV 是最流行的计算机视觉库,原本用 C 和 C++ 开发,现在也支持 Python. 它使用机器学习算法在图像中搜索人的面部.对于人脸这么复杂的东西,并没有一个简单的检测能对是 ...
- 25行 Python 代码实现人脸检测——OpenCV 技术教程
这是篇是利用 OpenCV 进行人脸识别的技术讲解.阅读本文之前,这是注意事项: 建议先读一遍本文再跑代码——你需要理解这些代码是干什么的.成功跑一遍不是目的,能够举一反三.在新任务上找出 bug 才 ...
- OpenCV 和 Dlib 人脸识别基础
00 环境配置 Anaconda 安装 1 下载 https://repo.anaconda.com/archive/ 考虑到兼容性问题,推荐下载Anaconda3-5.2.0版本. 2 安装 3 测 ...
随机推荐
- eclipse中同步git代码报错checkout conflict with files
1.Team--->Synchronize Workspace 2.在同步窗口找到冲突文件,把自己本地修改的复制出来 3.在文件上右键选择 Overwrite----->Yes , 4.再 ...
- Python的入门学习之 Day 7——from“夜曲编程”
Day 7 time: 2021.8.4. 今天主要将"if-else"再扩展, 得到"if-elif-else"模型.它与"if-else" ...
- libev中的__attribute__优化
在学习libev的过程中,遇到了大量的__attribute__优化方式,此文章将它们做一个汇总和介绍,并会持续更新 1.unused:使编译器忽略未使用的函数或者变量 源码如下 1 //判断如果gc ...
- HTTP请求向服务器传参方式
请求HttpRequest 提示: 用户发送请求时携带的参数后端需要使用,而不同的发送参数的方式对应了不同的提取参数的方式 所以要学会如何提取参数,我们就需要先了解前端传参数有哪些方式 回想一下,利用 ...
- quartus报错 Error (10054): Verilog HDL File I/O error at sdram_ctrl_tb.v(6): can't open Verilog Design File "Sdram_params.h"
解决方法:包含完整路径. 比如我一开始是:`include "Sdram_params.h" 错误(改为:`include "F:\FPGA\exce\uart2sdra ...
- uniapp+vue3+ts
1. 创建vue3的默认uniapp模板 2. npm init 创建package.json
- Oracle关联表进行修改操作(查询某个表,以某个表作为基础,修改其它表)
merge into tableA a using( SELECT a,b,c from tableB ) b on (a.id = b.id)//这里一定要用括号包起来.... when match ...
- 20200926--矩阵转置(奥赛一本通P95 8 多维数组)
输入一个n行m列的矩阵A,输出它的转置(看下面说明) 输入:第1行包含两个整数n和m(1<=n<=100,1<=m<=100),表示矩阵A的行数和列数.接下来n行,每行m个整数 ...
- 论MVC架构设计及其应用
论MVC架构设计及其应用 张紫诺1 (1. 位石家庄铁道大学,河北 石家庄 050000) 摘要:随着信息化建设的发展,人们愈发需要考虑采用一种良好的架构实现快速构建企业应用程序的目标.而MVC架构正 ...
- LeetCode刷题感想之滑动窗口
发现滑动窗口也是一种经典解题思路,这一篇简单聊一下滑动窗口. 通常在碰到求XX子数组,子字符串,连续XX等题眼,可以考试用滑动窗口的思路来解决问题. 窗口的类型有几种: 1. 固定长度的窗口. 2. ...