欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 房产 > 家装 > metahuman-stream - 数字人实时交互

metahuman-stream - 数字人实时交互

2025/5/17 0:01:10 来源:https://blog.csdn.net/lovechris00/article/details/140882735  浏览:    关键词:metahuman-stream - 数字人实时交互

文章目录

    • 一、关于 metahuman-stream
      • 功能
      • TODO
    • 二、安装
    • 三、快速使用
      • 2.1 运行srs
      • 2.2 启动数字人:
    • 四、更多用法
      • 3.1 使用LLM模型进行数字人对话
      • 2、声音克隆
        • 2.1 gpt-sovits
        • 2.2 xtts
      • 3、音频特征用hubert
      • 4、设置背景图片
      • 5、全身视频拼接
        • 5.1 切割训练用的视频
        • 5.2 提取全身图片
        • 5.3 启动数字人
      • 6、不说话时用自定义视频替代
      • 7、webrtc p2p
      • 8、rtmp推送到srs
      • 9、模型用musetalk
        • 替换成自己的数字人
      • 10、模型用wav2lip
        • 替换成自己的数字人
    • 五、Docker Run
    • 六、数字人模型文件
    • 七、性能分析


一、关于 metahuman-stream

metahuman-stream 是实时交互流式数字人库,实现音视频同步对话。基本可以达到商用效果。

  • github :https://github.com/lipku/metahuman-stream
  • 文档:https://zhuanlan.zhihu.com/p/675131165
  • 效果 :ernerf | musetalk | wav2lip

功能

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

TODO

  • 添加chatgpt实现数字人对话
  • 声音克隆
  • 数字人静音时用一段视频代替
  • MuseTalk
  • Wav2Lip
  • SyncTalk

如果本项目对你有帮助,帮忙点个star。也欢迎感兴趣的朋友一起来完善该项目。
知识星球: https://t.zsxq.com/7NMyO 沉淀高质量常见问题、最佳实践经验、问题解答
微信公众号:数字人技术


二、安装

测试于: Ubuntu 20.04, Python3.10, Pytorch 1.12 和 CUDA 11.3

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"

  • 安装常见问题 FAQ : https://github.com/lipku/metahuman-stream/blob/main/assets/faq.md
  • linux cuda环境搭建可以参考这篇文章:https://zhuanlan.zhihu.com/p/674972886

三、快速使用

默认采用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

如果访问不了huggingface,在运行前

export HF_ENDPOINT=https://hf-mirror.com

用浏览器打开http://serverip:8010/rtcpushapi.html, 在文本框输入任意文字,提交。数字人播报该段文字
备注:服务端需要开放端口 tcp:8000,8010,1985; udp:8000


四、更多用法


3.1 使用LLM模型进行数字人对话

目前借鉴数字人对话系统LinlyTalker的方式,LLM模型支持Chatgpt,Qwen和GeminiPro。需要在app.py中填入自己的api_key。

用浏览器打开 http://serverip:8010/rtcpushchat.html


2、声音克隆

可以任意选用下面两种服务,推荐用 gpt-sovits


2.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中语音内容,时长不宜过长


2.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、音频特征用hubert

如果训练模型时用的hubert提取音频特征,用如下命令启动数字人

python app.py --asr_model facebook/hubert-large-ls960-ft 

4、设置背景图片

python app.py --bg_img bc.jpg 

5、全身视频拼接


5.1 切割训练用的视频
ffmpeg -i fullbody.mp4 -vf crop="400:400:100:5" train.mp4 

train.mp4 训练模型


5.2 提取全身图片
ffmpeg -i fullbody.mp4 -vf fps=25 -qmin 1 -q:v 1 -start_number 0 data/fullbody/img/%d.jpg

5.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 如果训练的不好,在拼接处会有接缝。
    可以在上面的命令加上 --torso_imgs data/xxx/torso_imgs,torso 不用模型推理,直接用训练数据集里的torso图片。
    这种方式可能头颈处会有些人工痕迹。

6、不说话时用自定义视频替代

  • 提取自定义视频图片
ffmpeg -i silence.mp4 -vf fps=25 -qmin 1 -q:v 1 -start_number 0 data/customvideo/img/%d.png

  • 运行数字人
python app.py --customvideo --customvideo_img data/customvideo/img --customvideo_imgnum 100

7、webrtc p2p

此种模式不需要srs

python app.py --transport webrtc

服务端需要开放端口 tcp:8010; udp:50000~60000
用浏览器打开 http://serverip:8010/webrtcapi.html


8、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


9、模型用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 目录下


10、模型用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


五、Docker Run

不需要前面的安装,直接运行。

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步

另外提供autodl镜像: https://www.codewithgpu.com/i/lipku/metahuman-stream/base

autodl教程 : https://github.com/lipku/metahuman-stream/blob/main/autodl/README.md


六、数字人模型文件

可以替换成自己训练的模型(https://github.com/Fictionarry/ER-NeRF)

.
├── data
│   ├── data_kf.json
│   ├── au.csv			
│   ├── pretrained
│   └── └── ngp_kf.pth

七、性能分析

  1. 帧率
    在Tesla T4显卡上测试整体fps为18左右,如果去掉音视频编码推流,帧率在20左右。用4090显卡可以达到40多帧/秒。
    优化:新开一个线程运行音视频编码推流
  2. 延时
    整体延时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-latency

2024-08-03(六)
早上好 (^_^)/

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词