Musetalk-Stream: 未来数字人的智能语音交互革命“

news2024/9/30 23:10:06

实时交互流式数字人,实现音视频同步对话。基本可以达到商用效果
ernerf效果musetalk效果wav2lip效果

Features
⦁    支持多种数字人模型: ernerf、musetalk、wav2lip
⦁    支持声音克隆
⦁    支持数字人说话被打断
⦁    支持全身视频拼接
⦁    支持rtmp和webrtc
⦁    支持视频编排:不说话时播放自定义视频


1.安装
在 Ubuntu 20.04、Python3.10、Pytorch 1.12 和 CUDA 11.3 上测试

1.1 安装依赖项
conda create -n nerfstream python=3.10
conda activate nerfstream
conda install pytorch==1.12.1 torchvision==0.13.1 cudatoolkit=11.3 -c pytorch
pip install -r requirements.txt
#如果只用musetalk或者wav2lip模型,不需要安装下面的库
pip install "git+https://github.com/facebookresearch/pytorch3d.git"
pip install tensorflow-gpu==2.8.0
pip install --upgrade "protobuf<=3.20.1"

2. 快速入门
默认采用ernerf模型,webrtc推流到srs
2.1 运行srs

export CANDIDATE='<服务器外网ip>'
docker run --rm --env CANDIDATE=$CANDIDATE \
  -p 1935:1935 -p 8080:8080 -p 1985:1985 -p 8000:8000/udp \
  registry.cn-hangzhou.aliyuncs.com/ossrs/srs:5 \
  objs/srs -c conf/rtc.conf

2.2 启动数字人:

python app.py

如果访问不了hugingface,在运行前
export HF_ENDPOINT=https://hf-mirror.com

使用浏览器打开http://serverip:8010/rtcpushapi.html,在文本框中输入任意文字,提交。数字人播报该段文字
备注:服务端需要开放端口 tcp:8000,8010,1985; UDP:8000
3. 更多用途
分别选择数字人模型、传输方式、tts模型
3.1 数字人模型
支持3种模型:ernerf、musetalk、wav2lip,默认用ernerf
3.1.1 ER-Nerf
python app.py --model ernerf
還沒有編號參數配置
3.1.1.1 音频特征用hubert
默认用的wav2vec,如果训练模型时用的hubert提取音频特征,用如下命令启动数字人
python app.py --asr_model facebook/hubert-large-ls960-ft 
3.1.1.2 设置头部背景图片
python app.py --bg_img bc.jpg 
3.1.1.3 全身视频贴回
⦁    1. 切割训练用视频
ffmpeg -i fullbody.mp4 -vf crop="400:400:100:5" train.mp4 
用train.mp4训练模型
⦁    2. 提取全身图片
ffmpeg -i fullbody.mp4 -vf fps=25 -qmin 1 -q:v 1 -start_number 0 data/fullbody/img/%d.jpg
⦁    3.启动数字人

python app.py --fullbody --fullbody_img data/fullbody/img --fullbody_offset_x 100 --fullbody_offset_y 5 --fullbody_width 580 --fullbody_height 1080 --W 400 --H 400

⦁    --fullbody_width、--fullbody_height 全身视频的宽、高
⦁    --W、--H 训练视频的宽、高
⦁    ernerf训练第三步躯干如果训练的不好,在拼接处会有接缝。可以在上面的命令加上--torso_imgs data/xxx/torso_imgs,躯干不用模型推理,直接训练用数据集里的躯干图片这种方式可能头颈处会有些人工痕迹。
3.1.2 模型使用musetalk
暂不支持rtmp推送

⦁	安装依赖库
conda install ffmpeg
pip install --no-cache-dir -U openmim 
mim install mmengine 
mim install "mmcv>=2.0.1" 
mim install "mmdet>=3.1.0" 
mim install "mmpose>=1.1.0"

⦁    下载模型
下载MuseTalk运行需要的模型,提供一个下载地址https://caiyun.139.com/m/i?2eAjs2nXXnRgr 提取码:qdg2解压后,将models下文件→到本项目的models下
下载数字人模型,链接: https://caiyun.139.com/m/i?2eAjs8optksop 提取码:3mkt,解压后将整个文件夹→到本项目的data/avatars下
⦁    运行
python app.py --model musetalk --transport webrtc
用浏览器打开http://serverip:8010/webrtcapi.html
可以设置--batch_size提高显卡利用率,设置--avatar_id运行不同的数字人
替换成自己的数字人

git clone https://github.com/TMElyralab/MuseTalk.git
cd MuseTalk
修改configs/inference/realtime.yaml,将preparation改为True
python -m scripts.realtime_inference --inference_config configs/inference/realtime.yaml
运行后将results/avatars下文件拷到本项目的data/avatars下
方法二
执行
cd musetalk 
python simple_musetalk.py --avatar_id 4  --file D:\\ok\\test.mp4
支持视频和图片生成 会自动生成到data的avatars目录下
3.1.3 模型使用wav2lip
暂不支持rtmp推送
⦁    下载模型
下载wav2lip运行需要的模型,链接: https://pan.baidu.com/s/1yOsQ06-RIDTJd3HFCw4wtA 密码: ltua将s3fd.pth 到本项目wav2lip/face_detection/detection/sfd/s3fd.pth, wav2lip.pth→到本项目的models下
数字人模型文件wav2lip_avatar1.tar.gz,解压后将整个文件夹→到本项目的data/avatars下
⦁    运行
python app.py --transport webrtc --model wav2lip --avatar_id wav2lip_avatar1
用器浏览打开http://serverip:8010/webrtcapi.html
可以设置--batch_size提高显卡效率,设置--avatar_id运行不同的数字人
替换成自己的数字人
cd wav2lip
python genavatar.py --video_path xxx.mp4
运行后将results/avatars下文件拷到本项目的data/avatars下
3.2 传输模式
默认支持webrtc、rtcpush、rtmp,用rtcpush
3.2.1 webrtc p2p
这种模式不需要srs
python app.py --transport webrtc
服务端需要开放端口 tcp:8010; udp:50000~60000
用浏览器打开http://serverip:8010/webrtcapi.html
3.2.2 webrtc推送到srs
⦁    启动srs
export CANDIDATE='<服务器外网ip>'
docker run --rm --env CANDIDATE=$CANDIDATE \
  -p 1935:1935 -p 8080:8080 -p 1985:1985 -p 8000:8000/udp \
  registry.cn-hangzhou.aliyuncs.com/ossrs/srs:5 \
  objs/srs -c conf/rtc.conf
⦁    运行数字人
python app.py --transport rtcpush --push_url 'http://localhost:1985/rtc/v1/whip/?app=live&stream=livestream'
使用浏览器打开http://serverip:8010/rtcpushapi.html
3.2.3 rtmp推送到srs
⦁    安装rtmpstream库
参照https://github.com/lipku/python_rtmpstream
⦁    启动srs
docker run --rm -it -p 1935:1935 -p 1985:1985 -p 8080:8080 registry.cn-hangzhou.aliyuncs.com/ossrs/srs:5
⦁    运行数字人
python app.py --transport rtmp --push_url 'rtmp://localhost/live/livestream'
使用浏览器打开http://serverip:8010/echoapi.html
3.3 TTS模型
支持edgetts、gpt-sovits、xtts,默认用edgetts
3.3.1 gpt-sovits
服务配置gpt-sovits
运行
python app.py --tts gpt-sovits --TTS_SERVER http://127.0.0.1:9880 --REF_FILE data/ref.wav --REF_TEXT xxx
REF_TEXT为REF_FILE中语音内容,时长不宜过长
3.3.2 xtts
运行xtts服务,参照https://github.com/coqui-ai/xtts-streaming-server
docker run --gpus=all -e COQUI_TOS_AGREED=1 --rm -p 9000:80 ghcr.io/coqui-ai/xtts-streaming-server:latest
然后运行,其中ref.wav为需要克隆的声音文件
python app.py --tts xtts --REF_FILE data/ref.wav --TTS_SERVER http://localhost:9000
3.4 视频编排
⦁    1,生成素材
ffmpeg -i xxx.mp4 -s 576x768 -vf fps=25 -qmin 1 -q:v 1 -start_number 0 data/customvideo/image/%08d.png
ffmpeg -i xxx.mp4 -vn -acodec pcm_s16le -ac 1 -ar 16000 data/customvideo/audio.wav
其中-s与输出视频大小一致
⦁    2,编辑data/custom_config.json
指定imgpath和audiopath。
设置audiotype,说明:0表示推理视频,不用设置;1表示静音视频,如果不设置默认用推理视频代替; 2以上自定义配置
⦁    3,运行
python app.py --transport webrtc --customvideo_config data/custom_config.json
⦁    4,打开http://:8010/webrtcapi-custom.html
填写custom_config.json中配置的音频类型,点击切换视频
3.5 使用LLM模型进行数字人对话
目前已形成数字人对话系统LinlyTalker的方式,LLM模型支持Chatgpt、Qwen和GeminiPro。需要在app.py中填入自己的api_key。
使用浏览器打开http://serverip:8010/rtcpushchat.html
3.6 更多功能集成
⦁    语音输入、知识库问答⦁    Fay
⦁    虚拟主播,字幕镜头⦁    Luna
4. Docker 运行
无需前面的安装,直接运行。
docker run --gpus all -it --network=host --rm registry.cn-beijing.aliyuncs.com/codewithgpu2/lipku-metahuman-stream:vjo1Y6NJ3N
代码在/root/metahuman-stream,先git pull拉一下最新代码,然后执行命令同第2、3步
5.ernerf数字人模型文件
.
├── data
│   ├── data_kf.json
│   ├── au.csv                  
│   ├── pretrained
│   └── └── ngp_kf.pth
6. 性能分析
⦁    帧率
在Tesla T4显卡上测试整体fps为18左右,如果去掉音视频编码推流,帧率在20左右。用4090显卡可以达到40多帧/秒。
优化:新开一个线程运行音视频编码推流
⦁    延迟
整体延迟3s左右
(1)tts延迟1.7s左右,目前用的edgetts,需要将每句话转完后一次性输入,可以优化tts改成流式输入
(2)wav2vec延迟0.4s ,需要服务器18帧音频做计算 (3)srs转发延迟,设置srs服务器减少缓冲延迟。具体配置可看⦁    https://ossrs.net/lts/zh-cn/docs/v5/doc/low-⦁    延迟

编译过程中遇到的问题
在编译源码时,出现 build srt-1-fit failed, ret=127 错误。在编译srt依赖时出现configure失败的问题,打开 3rdparty/srt-1-fit/configuer文件一看,第一行为 #!/usr/bin/tclsh

而我的系统无tclsh,直接安装tcl即可

sudo apt-get install tcl

 然后再重新执行第2步的编译命令即可完成编译

SRS编译完成!


启动服务器SRS:

打开本地:http://localhost:8080/
测试一下FFmpeg推流
命令行输入以下命令: 
ffmpeg -re -i ./doc/source.200kbps.768x320.flv -c copy -f flv rtmp://localhost/live/livestream
 

我们启动musetalk流式测试一下:

效果还行

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

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

相关文章

C语言中的预处理器字符串化与拼接操作符:底层原理及实现细节

引言 在C语言中&#xff0c;预处理器是一个重要的工具&#xff0c;它在编译前对源代码进行处理&#xff0c;从而实现了诸如条件编译、宏定义等功能。本文将深入探讨两种预处理器操作符&#xff1a;# 和 ##&#xff0c;它们分别用于字符串化和拼接标识符。 字符串化操作符 # …

1、Java简介+DOS命令+java的编译运行(字节码/机器码、JRE/JVM/JDK的区别)+一个简单的Java程序

​ Java类型&#xff1a; JavaSE 标准版&#xff1a;以前称为J2SE&#xff0c;主要用来开发桌面应用程序或简单的服务器应用程序。JavaEE 企业版&#xff1a;建立在 Java SE 的基础上&#xff0c;包含了支持企业级应用程序开发和部署的标准和规范&#xff08;如Servlet、Jsp、…

自建 git 服务器

所有老板&#xff08;至少 99%&#xff09;都一样&#xff0c;想花一分钱办两分钱的事&#xff0c;想招十块钱的人干二十块钱的事……我表示理解&#xff08;A Pei ~~ 既想马儿跑得快&#xff0c;又想马儿不吃草&#xff09; 在老板眼中&#xff0c;我恰好是那个性价比最高的人…

AI赚钱成功案例|像素级拆解一键生成提示词 文生图 图生视频

本文背景 之前弄了个诗词转画面大师&#xff0c;就是你给个句子&#xff0c;它就能给你画面提示词&#xff0c;接着用 AI 绘图软件能生成很棒的画面&#xff0c;再把图片弄成视频&#xff0c;最后能出个不错的作品。 最近看到那些漫剪大师的作品&#xff0c;配的歌好听&#xf…

设计模式结构型模式之适配器模式

结构型模式之适配器模式 一、概述和使用场景1、概述2、使用场景&#xff1a;3、主要分类 二、 代码示例1、类适配器模式2、接口适配器3、对象适配器 四、总结1、适配器模式2、适配器模式的优点3、适配器模式的缺点 一、概述和使用场景 1、概述 适配器模式是一种结构型设计模式…

会声会影分离的音频怎么导出 会声会影分离音频后如何合并 视频剪辑制作教程软件

出色的音频编辑&#xff0c;可以显著提升剪辑作品的质量。一款优秀的视频剪辑软件&#xff0c;必定拥有强大的音频编辑能力。以会声会影视频剪辑软件为例&#xff0c;它不仅具备丰富的音频编辑功能&#xff0c;还允许用户自定义音频导出参数。有关会声会影分离的音频怎么导出&a…

深入学习SQL优化的第五天(最后一天)

子查询 1321 餐 馆 营 业 额 变 化 增 长 1321. 餐馆营业额变化增长 表: Customer------------------------ | Column Name | Type | ------------------------ | customer_id | int | | name | varchar | | visited_on | date | | amount …

【曾哥分享-1】云 WAF 绕过

幕布链接&#xff1a;【曾哥分享-1】云 WAF 绕过 - 幕布

【DSP+FPGA】基于Virtex-7 FPGA + C6678 DSP的高性能实时信号处理平台

DSP FPGA 协同处理架构板载 1 个TMS320C6678 多核DSP处理节点板载 1 片 XC7VX690T FPGA处理节点板载 1 个FMC 接口板载4路SFP光纤接口FPGA 与 DSP 之间采用高速Rapid IO互联 基于Virtex-7 FPGA的高性能实时信号处理平台&#xff0c;该平台采用1片TI的KeyStone系列多核DSP TMS3…

【DSP+FPGA】基于2 个TMS320C6678+ XC7VX690T FPGA 的6U VPX 总线架构的高性能实时信号处理平台

6U VPX架构&#xff0c;符合VITA46规范板载 2 个TMS320C6678 多核DSP处理节点板载 1 片 XC7VX690T FPGA处理节点板载 2 个FMC 接口背板之间具有 4 路 x4 高速 GTH 互联&#xff0c;支持RapidIO、PCI ExpressFPGA 与 DSP 之间采用高速Rapid IO互联 基于6U VPX架构的高性能实时信…

变分自编码器(Variational Autoencoder, VAE):深入理解与应用

变分自编码器&#xff08;Variational Autoencoder, VAE&#xff09;&#xff1a;深入理解与应用 在深度学习的广阔领域中&#xff0c;生成模型一直是研究的热点之一。其中&#xff0c;VAE&#xff08;变分自编码器&#xff09;作为AE&#xff08;自编码器&#xff09;的一种扩…

Java | Leetcode题解之第383题赎金信

题目&#xff1a; 题解&#xff1a; class Solution {public boolean canConstruct(String ransomNote, String magazine) {if (ransomNote.length() > magazine.length()) {return false;}int[] cnt new int[26];for (char c : magazine.toCharArray()) {cnt[c - a];}for…

华为集合通信库开源了!HCCL开源链接、架构、拓扑算法、常用接口

激动啊&#xff01;我们华为HCCL终于开源了&#xff01; 视频分享在这&#xff1a; 华为集合通信库开源了&#xff01;HCCL开源链接、拓扑算法、常用接口_哔哩哔哩_bilibili 一、HCCL相关链接 源码位置&#xff08;需注册华为账号才可下载&#xff09; cann-hccl: cann-hc…

渲染引擎实践 - UnrealEngine引擎中启用 Vulkan 和使用 Renderdoc 抓帧

一&#xff1a;方法一&#xff1a; 1. 到 .\Engine\UE_5.2\Engine\Binaries\Win64 目录下&#xff08;以Windows平台为例&#xff09;&#xff0c;找到UnrealEditor, 并创建桌面快捷方式。 2. 右键快捷方式&#xff0c;配置运行参数&#xff1a; -vulkan -AttachRenderDoc 二…

vulhub xxe靶机攻击教程

使用御剑目录扫描工具测试一下&#xff0c;发现有robots.txt文件 访问robots.txt文件&#xff0c;这个文件通常放的是一个网站的目录 我们得到两个目录&#xff0c;试着访问一下 xxe目录下是一个登录页面&#xff0c;xxe/admin.php目录下也是一个登录页面 我们先在xxe页面进行…

idea未加载Marketplace插件问题

今天想用idea安装一些插件&#xff0c;结果迟迟加载不出来 直到我将网络换成手机热点突然就好了&#xff0c;还真的是网络的问题

LIN诊断(2)—— 在CANoe软件中,加载cdd/pdx等诊断数据库时,切换调度表的不同方式选择

&#x1f345; 我是蚂蚁小兵&#xff0c;专注于车载诊断领域&#xff0c;尤其擅长于对CANoe工具的使用&#x1f345; 寻找组织 &#xff0c;答疑解惑&#xff0c;摸鱼聊天&#xff0c;博客源码&#xff0c;点击加入&#x1f449;【相亲相爱一家人】&#x1f345; 玩转CANoe&…

cesium 发光线

发光线也是一种比较常见的可视化效果&#xff0c;cesium 内置的材质已经提供了PolylineGlowMaterialProperty类&#xff0c;实现了发光效果。这种材质在线的中间部分始终会有白色线条&#xff0c;如果想实现纯色的发光线&#xff0c;就需要对这种材质进行改造。本篇通过自定义M…

VTK随笔十:VTK图形处理(封闭性检测、联通区域分析、多分辨率处理)

一、封闭性检测 如果一条边只被一个多边形包含&#xff0c;那么这条边就是边界边。 是否存在边界边是检测一个网格模型是否封闭的重要特征。 vtkFeatureEdges是一个非常重要的类&#xff0c;该类能够提取多边形网格模型中四种类型的边。 1)边界边。即只被一个多边形或者…

解释预测的艺术

如何以人性化的方式解释你的模型 可直接在橱窗里购买&#xff0c;或者到文末领取优惠后购买&#xff1a; 数据科学家职责的一个重要部分是解释模型预测。通常&#xff0c;接受解释的人不是技术人员。如果你开始谈论成本函数、超参数或 p 值&#xff0c;你将会遇到茫然的表情。我…