刚刚,我用三行代码创建了一个虚拟主播

刚刚,我花了10分钟,写了三行代码创建一个具有明星脸的虚拟主播

先看看效果:

语音播报虚拟主播2

实现简易的虚拟数字人非常简单,需要调用三个模型:

(1)First Order Motion(表情迁移)

(2)Text to Speech(文本转语音)

(2)Wav2Lip(唇形合成)
具体技术步骤如下:
1,把图像放入First Order Motion模型进行面部表情迁移,让虚拟主播的表情更加逼近真人,既然定位是一个主播,那表情都参考当然是要用“国家级标准”的,所以参考的对象选择了梓萌老师~
2,通过Text to Speech模型,将输入的文字转换成音频输出。
3,得到面部表情迁移的视频和音频之后,通过Wav2Lip模型,将音频和视频合并,并根据音频内容调整唇形,使得虚拟人更加接近真人效果。

1、运行依赖安装

In [ ]

# 升级PaddleHub
!pip install --upgrade paddlehub

In [ ]

# 下载nltk_data
!wget https://paddlespeech.bj.bcebos.com/Parakeet/tools/nltk_data.tar.gz
!tar zxvf nltk_data.tar.gz

In [ ]

# 安装ParaKeet
%cd Parakeet/
!pip install -e.
%cd ..

In [ ]

# 安装依赖
!hub install first_order_motion==1.0.0
!hub install wav2lip
!hub install fastspeech2_baker==1.0.0
Download https://bj.bcebos.com/paddlehub/paddlehub_dev/first_order_motion.tar.gz
[##################################################] 100.00%
Decompress /home/aistudio/.paddlehub/tmp/tmphcuxe0xl/first_order_motion.tar.gz
[##################################################] 100.00%
[2022-01-07 15:32:45,388] [    INFO] - Installing dependent packages from /home/aistudio/.paddlehub/tmp/tmpvtfv5cjp/first_order_motion/requirements.txt: /

2、 开始创建虚拟人

2.1 表情驱动

通过FOM模型,输入图像和驱动视频,让人像动起来!

In [6]

import cv2
import osfiles = os.listdir('input_data/img/')for f in files:img  =  cv2.imread('input_data/img/'+f)imgshape = img.shaperesimg = cv2.resize(img,(int(img.shape[1]/2),int(img.shape[0]/2)))cv2.imwrite('input_data/'+f,resimg)

In [1]

import paddlehub as hubFOM_Module = hub.Module(name="first_order_motion")
FOM_Module.generate(source_image="input_data/t5.jpeg", # 输入图像driving_video="input_data/zimeng.mp4", # 输入驱动视频ratio=0.4, image_size=256, output_dir='./output/', # 输出文件夹filename='FOM.mp4', # 输出文件名use_gpu=True)
/opt/conda/envs/python35-paddle120-env/lib/python3.7/site-packages/matplotlib/__init__.py:107: DeprecationWarning: Using or importing the ABCs from 'collections' instead of from 'collections.abc' is deprecated, and in 3.8 it will stop workingfrom collections import MutableMapping
/opt/conda/envs/python35-paddle120-env/lib/python3.7/site-packages/matplotlib/rcsetup.py:20: DeprecationWarning: Using or importing the ABCs from 'collections' instead of from 'collections.abc' is deprecated, and in 3.8 it will stop workingfrom collections import Iterable, Mapping
/opt/conda/envs/python35-paddle120-env/lib/python3.7/site-packages/matplotlib/colors.py:53: DeprecationWarning: Using or importing the ABCs from 'collections' instead of from 'collections.abc' is deprecated, and in 3.8 it will stop workingfrom collections import Sized
W0108 00:26:51.097970 19449 device_context.cc:447] Please NOTE: device: 0, GPU Compute Capability: 7.0, Driver API Version: 11.0, Runtime API Version: 10.1
W0108 00:26:51.104054 19449 device_context.cc:465] device: 0, cuDNN Version: 7.6.
[01/08 00:26:56] ppgan INFO: Found /home/aistudio/.cache/ppgan/GPEN-512.pdparams
1 persons have been detected
100%|██████████| 300/300 [00:36<00:00,  8.31it/s]

2.2 文本转语音

输入你想让虚拟数字人说的话,转换生成一段音频。

In [4]

sentences = ['开发者你好,欢迎使用飞桨,我是你的专属虚拟人。'] # 输入说话内容TTS_Module = hub.Module(name='fastspeech2_baker',version='1.0.0')
wav_files =  TTS_Module.generate(sentences)
print(f'声音已生成,音频文件输出在{wav_files}')
[2022-01-07 15:48:35,288] [    INFO] - Load fastspeech2 params from /home/aistudio/.paddlehub/modules/fastspeech2_baker/assets/fastspeech2_nosil_baker_ckpt_0.4/snapshot_iter_76000.pdz
[2022-01-07 15:48:35,671] [    INFO] - Load vocoder params from /home/aistudio/.paddlehub/modules/fastspeech2_baker/assets/pwg_baker_ckpt_0.4/pwg_snapshot_iter_400000.pdz
Building prefix dict from the default dictionary ...
[2022-01-07 15:48:35] [DEBUG] [__init__.py:113] Building prefix dict from the default dictionary ...
Dumping model to file cache /tmp/jieba.cache
[2022-01-07 15:48:36] [DEBUG] [__init__.py:147] Dumping model to file cache /tmp/jieba.cache
Loading model cost 0.791 seconds.
[2022-01-07 15:48:36] [DEBUG] [__init__.py:165] Loading model cost 0.791 seconds.
Prefix dict has been built successfully.
[2022-01-07 15:48:36] [DEBUG] [__init__.py:166] Prefix dict has been built successfully.
[2022-01-07 15:48:48,064] [    INFO] - 1 wave files have been generated in /home/aistudio/wavs
声音已生成,音频文件输出在['/home/aistudio/wavs/1.wav']

2.3 唇形合成

把刚刚得到的动态视频和音频文件输入到Wav2Lip模型中,让唇形根据说话的内容动态改变。

In [2]

import paddlehub as hub
W2F_Module = hub.Module(name="wav2lip")W2F_Module.wav2lip_transfer(face='output/FOM.mp4', audio='wavs/bo.wav', output_dir='./transfer_result/', use_gpu=True) 

虚拟的主播的图片可以随意更改,这里随便百度了两张明星图片,原图就不放了,看下一些效果

最后效果:

效果1:

语音播报虚拟主播1

效果2:

语音播报虚拟主播2

AI Stdio 可直接运行,欢迎fork paddle虚拟数字主播播新闻 - 飞桨AI Studio - 人工智能学习与实训社区

【虚拟主播】刚刚,我用三行代码创建了一个虚拟主播相关推荐

  1. 这是我第一次使用代码创建出一个窗口【python 游戏实战 01】

    前言 本系列文章将会以通俗易懂的对话方式进行教学,对话中将涵盖了新手在学习中的一般问题.此系列将会持续更新,包括别的语言以及实战都将使用对话的方式进行教学,基础编程语言教学适用于零基础小白,之后实战课 ...

  2. 20分钟,我用简单的Python代码创建了一个完整的区块链!想学吗?

    作者 | Gerald Nash 编译 | 科科.kou.木星 这是篇技术文,我们会用Python一步步搭建一个完整的区块链.不过,在此之前,咱们还是先说说你什么你该学习如何从零搭建一个区块链. 有人 ...

  3. mysql keepalived双主双活_mysql高可用架构方案之中的一个(keepalived+主主双活)

    Mysql双主双活+keepalived实现高可用 文件夹 1.前言... 4 2.方案... 4 2.1.环境及软件... 4 2.2.IP规划... 4 2.3.架构图... 4 3.安装设置MY ...

  4. virsh 创建一个虚拟交换机,虚拟网络

    vim /etc/libvirt/qemu/networks/vbr.xml #创建一个名为vbr的虚拟网络 <network><name>vbr</name> # ...

  5. paddlepaddle系列之三行代码从入门到精通

    PaddlePaddle系列之三行代码从入门到精通 前言 这将是PaddlePaddle系列教程的开篇,属于非官方教程.既然是非官方,自然会从一个使用者的角度出发,来教大家怎么用,会有哪些坑,以及如何 ...

  6. 教你如何用 Python 三行代码做动图!

    作者 | 小F  责编 | 张文 头图 | CSDN 下载自东方 IC 来源 | 法纳斯特(ID:walker398) 关于动态条形图,小F以前推荐过 Bar. Chart. Race 这个库.三行代 ...

  7. 抖音上火的电脑代码cmd_抖音很火的:仅靠三行代码,帮妹子“修电脑”?如何做到的!...

    摘要: 本文将讲述其原理. 引言: 最近阁主在抖音或者微视上都刷到了一个号称[仅靠三行代码,帮妹子"修电脑"的方法!].看到该段子,阁主也只能跪了,确实要相信:"重启是万 ...

  8. 可用!三行代码高仿高德地图三段式抽屉效果

    三行代码 废话不在前面说,直接上代码! 将 XML 根布局设置为 CoordinatorLayout <android.support.design.widget.CoordinatorLayo ...

  9. PaddlePaddle 系列之三行代码从入门到精通

    本文介绍 PaddlePaddle 系列之三行代码从入门到精通. 前言 这将是 PaddlePaddle 系列教程的开篇,属于非官方教程.既然是非官方,自然会从一个使用者的角度出发,来教大家怎么用,会 ...

  10. 10年代码经验程序员UP主复刻“阴间”超级马里奥,获赞27万,马里奥:我头呢?

    本文转载自 大数据文摘 <超级马里奥兄弟>是很多人童年的回忆,对B站up主"M木糖M"来说也不例外. 为了纪念自己的童年,我们这位代码经验丰富的up主决定自己动手复刻一 ...

最新文章

  1. 装在u盘的linux
  2. 智能车竞赛接入工程训练竞赛相关事项-建议稿件
  3. 中国高中生近视率高达81%,眼科专家:源头在小学阶段
  4. 参加浙江中医药大学第十二届程序设计竞赛(ACM赛制)的小记
  5. php pdo 参数绑定,PDO预处理之参数绑定和列绑定
  6. 如何基于 Flink 生成在线机器学习的样本?
  7. laravel整合workerman做聊天室
  8. 功能强大的相片管理软件ACDSee Photo Manager 12.0.342注册码序列号中文版
  9. 用类描述计算机中CPU的速度和硬盘的容量,要求Java应用程序有4个类,名字分别为:pc CPU harddisk 和Test ,其中TEST是主类。
  10. mac 无法对计算机进行更改,解析深度技术win10 MAC不能修改的原因和解决成功的技巧...
  11. virtualbox虚机无法上网
  12. 什么是PPI,有什么作用?
  13. python入门经典教程-Python经典入门教程ppt
  14. h5 vue利用canvas实现手机签名并且可旋转功能
  15. 一些著名软件的开发语言概述
  16. 12 道腾讯前端面试真题及答案整理
  17. 《数字图像处理》自学笔记(一)
  18. iphone手机如何用计算机讲游戏,电脑怎么玩ios手游?电脑上玩苹果手机应用和游戏方法...
  19. 繁体中文和简体中文编码
  20. EasyRecovery最新中文Win/Mac全版本下载安装激活数据恢复软件

热门文章

  1. Flink-sql之当前日期
  2. 硬件描述测试软件库中74138,杭电数电实验课内题设计答案.docx
  3. WindowsXP相关设置对应的注册表位置
  4. 解决vscode中getch()函数报错。C语言。getch()的头文件。
  5. Linux笔记五 grep文件过滤、find文件/目录查找
  6. Linux性能优化(九)——Kernel Bypass
  7. 关于黑莓8700刷ROM4.5后使用五笔输入法出现问号的处理
  8. Mac SecureCRT 下载、安装详细步骤
  9. struts2继承ActionSupport
  10. 解决2345劫持主页的办法--火绒2345专杀