深度学习系列65:数字人openHeygen详解

1. 主流程分析

从inference.py函数进入,主要流程包括:
1) 使用cv2获取视频中所有帧的列表,如下:
在这里插入图片描述
2)定义Croper。核心代码为69行:full_frames_RGB, crop, quad = croper.crop(full_frames_RGB)。其中crop是头肩位置,quad是人脸位置,得到的新的full_frames_RGB为人脸区域的截图。(此函数在ffhq_preprocess.py中),此时图像如下:
在这里插入图片描述

  1. 将头肩区域full_frames_RGB重新resize到(256,256)得到frames_pil,然后使用KeypointExtractor(face3d库,调用的是face_alignment包)获取关键点lm。lm在frames_pil上的图如下:
    在这里插入图片描述
  2. 加载3d人脸重建模型(这里是一个resnet50模型),并用face3d库的lm3d函数加载BFM模型,生成人脸模型参数semantic_npy,并加载表情expression.mat,得到img_stablized。这里使用中性表情,处理后的结果如下:
    在这里插入图片描述

5)进行图像增强,使用的是GPEN-BFR-512模型,图片变高清了:
在这里插入图片描述
6)接下来加载wav语音文件,并拆成块
7)进行lipSync,如下图
在这里插入图片描述
8) 将lipsync的结果贴到原图上,然后找嘴部的mask
在这里插入图片描述
在这里插入图片描述
9) 使用mask,将新图和原图进行poisson blending即可:
在这里插入图片描述

2. dlib做人脸和关键点检测

参见http://dlib.net/face_landmark_detection.py.html
使用模型为:http://dlib.net/files/shape_predictor_68_face_landmarks.dat.bz2
做人脸检测部分:detector = dlib.get_frontal_face_detector()
关键点检测部分predictor = dlib.shape_predictor(‘checkpoints/shape_predictor_68_face_landmarks.dat’)

对应项目的utils.ffhq_preprocess.Croper。结果绘制如下:

for lmi in lm:rr, cc=draw.ellipse(lmi[1],lmi[0],10,10)draw.set_color(img,[rr,cc],[255,0,0])
rr, cc=draw.polygon_perimeter([y1,y1,y2,y2],[x1,x2,x2,x1])
draw.set_color(img,[rr,cc],[255,0,0])
plt.imshow(img,plt.cm.gray)

在这里插入图片描述

3. face3D库做人脸3dmm

定义的代码为88-89行:
net_recon = load_face3d_net(args.face3d_net_path, device)
lm3d_std = load_lm3d(‘checkpoints/BFM’)

其中加载模型结构load_face3d_net引用的是utils.inference_utils。
加载参数load_lm3d引用的是third_part.face3d.util.load_mats
计算获得coeff,并加载expression表情参数。

4. GPEN库做人脸增强

third_part.GPEN.gpen_face_enhancer import FaceEnhancement
接下来使用DNet进行人脸增强。DNet首先学习一个GAN来生成高质量人脸图像,然后把它嵌入到一个U型的DNN里面作为先验的decoder,然后再利用合成的低质量人脸图像微调这个’嵌入GAN先验的DNN’。

5. 使用ENet做lipsync

这段是核心部分,很费时间。加载包含LNet的ENet模型。
incomplete, reference = torch.split(img_batch, 3, dim=1)
pred, low_res = model(mel_batch, img_batch, reference)

6. 使用GFPGAN做人脸增强

代码入下:

cropped_faces, restored_faces, restored_img = restorer.enhance(ff, has_aligned=False, only_center_face=True, paste_back=True)# 0,   1,   2,   3,   4,   5,   6,   7,   8,  9, 10,  11,  12,
mm = [0,   0,   0,   0,   0,   0,   0,   0,   0,  0, 255, 255, 255, 0, 0, 0, 0, 0, 0]
mouse_mask = np.zeros_like(restored_img)
tmp_mask = enhancer.faceparser.process(restored_img[y1:y2, x1:x2], mm)[0]
mouse_mask[y1:y2, x1:x2]= cv2.resize(tmp_mask, (x2 - x1, y2 - y1))[:, :, np.newaxis] / 255.
height, width = ff.shape[:2]
restored_img, ff, full_mask = [cv2.resize(x, (512, 512)) for x in (restored_img, ff, np.float32(mouse_mask))]
img = Laplacian_Pyramid_Blending_with_mask(restored_img, ff, full_mask[:, :, 0], 10)
pp = np.uint8(cv2.resize(np.clip(img, 0 ,255), (width, height)))
pp, orig_faces, enhanced_faces = enhancer.process(pp, xf, bbox=c, face_enhance=False, possion_blending=True)
plt.imshow(pp)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/3102.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Android MVVM架构 + Retrofit完成网络请求

关于Retrofit,这个应该不是一个很新颖的东西了,简单过一下吧 1.由Square公司开发,基于Type-safe的REST客户端。 2.使用注解来定义API接口,使得HTTP请求变得简洁且易于维护。 3.支持同步和异步请求,可与RxJava、Corouti…

【安卓13】解决带GMS编译报super分区空间不足错误

1、错误信息 2、解决方案 不同供应商修改分区大小的文件路径不一样,但是万变不离其宗,根据报错信息全局搜索关键词BOARD_SUPER_PARTITION_SIZE 这里以RK供应商和AML供应商修改为例: (1)RK改法: 根目录下…

全光谱灯对人体的危害?谨记全光谱灯选购要避开的四大套路

全光谱灯对人体的危害有多大?近年来网上关于护眼台灯对视力有害的言论有很多,引发了很多人空前的关注,事实上这未必是一件坏事,因为随着护眼台灯的热度持续上涨,市面上浑水摸鱼的行为增多了不少,有着不少劣…

STM32H7使用FileX库BUG,SD卡挂载失败

问题描述: 使用STM32H7ThreadXFileX,之前使用swissbit牌的存储卡可正常使用,最近项目用了金士顿的存储卡,发现无法挂载文件系统。 原因分析: 调试过程发现,关闭D-Cache可以挂载使用exfat文件系统。 File…

一文看够,植物线粒体基因组分析套路

线粒体堪称生命活动的“能量供给站”,植物线粒体是线粒体基因组研究中难度最高的,其基因组大小差异较大,100kb-10Mb,大部分由非编码DNA序列组成,且有许多同源序列,占基因组总长的2%-60%,基因间区…

制作github.io学术个人主页

制作如图的学术个人主页。About me - Xianwen Ling’s Blog 学术个人主页是一个学者展示个人学术成果和研究方向的重要工具。个人主页可以集中展示学者的研究论文、出版物、演讲和发布的项目等学术成果,这样其他人可以更方便地了解和评估学者的研究贡献。个人主页可…

Maven 安装及配置教程(Windows)【安装】

文章目录 一、 下载1. 官网下载2. 其它渠道 二、 安装三、 配置四、 验证五、 本地仓储配置六、 配置镜像七、 配置JDK八、完整配置九、常用命令十、IDEA 中配置 Maven1. 配置当前项目2. 配置新建 / 新打开 项目 软件 / 环境安装及配置目录 一、 下载 1. 官网下载 安装地址&a…

书生·浦语大模型第二期实战营第七节-OpenCompass 大模型评测实战 笔记和作业

来源: 视频教程:https://www.bilibili.com/video/BV1Pm41127jU/?spm_id_from333.788&vd_sourcef4a51f7f5a63e756f73ad0dff318c1a3 文字教程:https://github.com/InternLM/Tutorial/blob/camp2/opencompass/readme.md 作业来源&#x…

【Hadoop】- MapReduce YARN 初体验[9]

目录 提交MapReduce程序至YARN运行 1、提交wordcount示例程序 1.1、先准备words.txt文件上传到hdfs,文件内容如下: 1.2、在hdfs中创建两个文件夹,分别为/input、/output 1.3、将创建好的words.txt文件上传到hdfs中/input 1.4、提交MapR…

HotSpot JVM 中的应用程序/动态类数据共享

0.前言 本文的目的是详细讨论 HotSpot JVM 自 JDK 1.5 以来提供的一项功能,该功能可以减少启动时间,但如果在多个 JVM 之间共享相同的类数据共享 (CDS) 存档,则还可以减少内存占用。 1.类数据共享 (CDS) CDS 的想法是使用特定格式将预处理…

状态模式和策略模式对比

状态模式和策略模式都是行为型设计模式,它们的主要目标都是将变化的行为封装起来,使得程序更加灵活和可维护。之所以将状态模式和策略模式进行比较,主要是因为两个设计模式的类图相似度较高。但是,从状态模式和策略模式的应用场景…

Pulsar Meetup 深圳 2024 会务介绍

“ Hi,各位热爱 Pulsar 的小伙伴们,Pulsar Meetup 深圳 2024 报名倒计时啦,快来报名。这里汇集了腾讯、华为和谙流科技等大量 Pulsar 大咖,干货多多,礼品多多,不容错过啊。 ” 活动介绍 由 AscentStream 谙…

Python 0基础_变现_38岁_day 16(文件操作)

在python,使用内置函数open()进行文件的一些读写操作 文件操作格式:open(文件路径,访问模式,字符编码) 前面两个参数是必备参数,后面的字符编码为选填,但是大多数情况下都会协商字符编码 访问模式 r 只读 w…

数码摄影色彩构成,数码相机色彩管理

一、资料描述 本套摄影色彩资料,大小58.54M,共有6个文件。 二、资料目录 《抽象彩色摄影集》.阿瑟.pdf 《色彩构成》.pdf 《色彩学》.星云.扫描版.pdf 《摄影色彩构成》.pdf 《数码相机色彩管理》.pdf 数码摄影进阶之4《色彩篇》.pdf 三、资料下…

解决IDEA中Tomcat控制台乱码问题(包括sout输出乱码)

文章目录 前言一、控制台直接输出乱码二、sout输出内容在控制台显示乱码 前言 今天在使用Tomcat的时候发现控制台输入出现了乱码问题,其实之前就出现过一次,解决了,但是新创建一个项目后又会出现sout的内容在控制台输出的乱码问题&#xff0…

Windows下Git的使用

目录 一、克隆远程仓库到本地二、git的三板斧2.1 add-将代码添加到本地仓库2.2 commit-提交代码到本地仓库2.3 push-推送本次添加操作到远程仓库2.4 gitee只有三板斧吗? 三、推送后没有出现绿点四、push到远程时报错五、git图形化界面下载链接 一、克隆远程仓库到本…

sql题目练习

cookie注入 解题思路和之前的整数型注入一样,只是比整数型注入多了一步,题目没有给输入框,提示“尝试找找cookie吧”cookie的中文翻译是曲奇,小甜饼的意思。cookie其实就是一些数据信息,类型为“小型文本文件”&#…

【CSS】CSS实现元素逐渐消失(实现元素透明逐渐消失/模糊)

mask-image: linear-gradient(to bottom, rgba(0, 0, 0, 0) 0%, rgba(0, 0, 0, 1) 10%);mask-image 属性用于定义一个遮罩,它可以隐藏元素的一部分或全部内容。在这个示例中,我们使用 mask-image 属性来定义一个线性渐变的遮罩,使得列表项的内…

如何用微信发布考试成绩(如月考、期中、期末等)

自教育部《未成年人学校保护规定》颁布后,教育部明确表示:学校不得公开学生的考试成绩、排名等信息!同时学校应采取措施,便利家长知道学生的成绩等学业信息,对于教师来说,如何用微信发布考试成绩(如:月考、期中、期末等)就成了一道难题... 公开吧,会伤害到学生自尊心,甚至被投诉…

区块链 | OpenSea 相关论文:Toward Achieving Anonymous NFT Trading(三)

🥑原文: Toward Achieving Anonymous NFT Trading VII 讨论:关于匿名性与市场平台的困境 在本文的这一部分,我们将讨论关于隐藏 NFT 所有者地址的困境,以及为什么像 OpenSea 这样的 NFT 市场平台几乎必须得到完全的信…