PaddleBoBo,有手就能用飞桨造一个虚拟主播(人)
元宇宙时代已经来临,当你看到网络新闻上形形色色的虚拟人的时候,是不是有些心动?
你是否跟以前的我一样会想创造虚拟人需要很大的成本和技术投入,普通人根本无法办得到?
现在这些都不再是问题,PaddleBoBo帮你实现!
PaddleBoBo是基于飞桨PaddlePaddle深度学习框架和PaddleSpeech、PaddleGAN等开发套件的虚拟主播快速生成项目。PaddleBoBo致力于简单高效、可复用性强,只需要一张带人像的图片和一段文字,就能快速生成一个虚拟主播的视频;并能通过简单的二次开发更改文字输入,实现视频实时生成和实时直播功能。
效果演示
技术原理
PaddleBoBo主要集成了PaddleGAN和PaddleSpeech的超能力,目前具体集成的是PaddleGAN的FOM、Wav2Lip模块和PaddleSpeech的TTS模块。
技术实现原理如下:
首先,把图像放入FOM进行面部表情迁移,让虚拟主播的表情更加逼近真人,既然定位是一个主播,那表情都参考当然是要用“国家级标准”的,所以BoBo参考的对象是梓萌老师~
同时,通过PaddleSpeech的TTS模块,将输入的文字转换成音频输出。
得到面部表情迁移的视频和音频之后,通过Wav2Lip模块,将音频和视频合并,并根据音频内容调整唇形,使得虚拟人更加接近真人效果。
目前PaddleBoBo项目已完成对以上模块的二次封装并开源,如需二次开发,参考general_demo.py文件引入对应的GAN和TTS模块即可快速实现表情迁移、文字转语音和唇形合成。
使用教程
1. 下载项目代码
!git clone https://gitee.com/xiejiehang/PaddleBoBo.git -b develop
2. 安装PaddleGAN和PaddleSpeech依赖
!pip install ppgan paddlespeech
!wget https://paddlespeech.bj.bcebos.com/Parakeet/tools/nltk_data.tar.gz
!tar zxvf nltk_data.tar.gz
3. 静态图像转虚拟主播动画
这一步用到了default.yaml的配置文件,如果你只是尝试的话使用默认配置即可,如果你需要生成另一个人像,请修改default.yaml配置,目前配置项还在持续开发中,具体参数说明详见github:https://github.com/JiehangXie/PaddleBoBo
%cd PaddleBoBo
!python create_virtual_human.py --config default.yaml
4. 让虚拟主播说话
!python general_demo.py --human ./file/input/test.mp4 --output ../output.mp4 --text 各位开发者大家好,我是您的专属虚拟主播,很高兴能为您服务。
提示:如果显示内存溢出,请缩短句子长度,或更换至尊版运行环境。
高阶玩法
上面的是通用场景的demo,下面给大家介绍一下这个项目的高阶玩法。通过上面的demo可以知道通过Paddlebobo能快速实现文本到虚拟主播视频的转换,那么,如果我们只要找到一个24小时不断更新的文字直播源,我们就可以通过循环不断将文字更新输入到程序当中,实现一个能24小时不间断直播的虚拟主播。事实上,我已经实现了,代码就放在项目下的news_app.py里面,下载到本地之后持续运行就能不断生成新的新闻视频,同时运行play.py即可实现实时和循环播放生成的视频。效果如下:
Some Bugs and Todo
PaddleBoBo项目已完整开源至Github:https://github.com/JiehangXie/PaddleBoBo
- 项目目前最大的BUG是输入图像经过FOM推理后整体图像颜色加深导致跟背景融合时会出现一个较明显的黑框,之后有时间再定位一下问题,也希望依欣姐姐看到能给予帮助!(可怜巴巴.jpg~)
- play.py播放视频时间隔有卡帧情况,目前已修复得到初步改善。
- 后续会增加声音克隆、男声支持等,欢迎持续关注项目,star star star~
- 如果大佬们有兴趣,欢迎提交PR成为项目contributor,小弟在此先跪谢!
致谢
感谢PaddleGAN和PaddleSpeech的支持,尤其感谢PaddleSpeech子龙姐姐在语音合成推理部分的指导和技术帮助!
示范视频的虚拟形象来自seeprettyface数据集
Thanks to dataset provider:Copyright(c) 2018, seeprettyface.com, BUPT_GWY contributes the dataset.