专栏名称: GitHubStore
分享有意思的开源项目
目录
相关文章推荐
他化自在天  ·  2月第4周祝福语「二笑江湖」 & ... ·  23 小时前  
他化自在天  ·  《从艺术家,取长补短》(营销艺术入门1/la ... ·  2 天前  
廣告狂人  ·  “好炸鸡自有答案”,系列整活简直王炸! ·  3 天前  
销售与市场  ·  投入上千万,商超巨头扎堆拜师胖东来 ·  3 天前  
他化自在天  ·  《爆改产品整活用(阳谋级推广入门1/Last ... ·  3 天前  
51好读  ›  专栏  ›  GitHubStore

实时交互流式数字人

GitHubStore  · 公众号  ·  · 2024-07-29 16:32

正文

项目简介

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


特点


  1. 支持多种数字人模型: ernerf、musetalk、wav2lip

  2. 支持声音克隆

  3. 支持数字人说话被打断

  4. 支持全身视频拼接

  5. 支持rtmp和webrtc

  6. 支持视频编排:不说话时播放自定义视频



安装

安装依赖

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

linux cuda环境搭建可以参考这篇文章 https://zhuanlan.zhihu.com/p/674972886


2. Quick Start

默认采用ernerf模型,webrtc推流到srs

2.1 运行srs

export CANDIDATE=''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


3. More Usage

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

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

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

3.2 声音克隆

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


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

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

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

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

3.4 设置背景图片

python app.py --bg_img bc.jpg


3.5 全身视频拼接

3.5.1 切割训练用的视频

ffmpeg -i fullbody.mp4 -vf crop="400:400:100:5" train.mp4 

用train.mp4训练模型

3.5.2 提取全身图片

ffmpeg -i fullbody.mp4 -vf fps=25 -qmin 1 -q:v 1 -start_number 0 data/fullbody/img/%d.jpg

3.5.2 启动数字人

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图片。这种方式可能头颈处会有些人工痕迹。


3.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


3.7 webrtc p2p

此种模式不需要srs

python app.py --transport webrtc

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

3.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

3.9 模型用musetalk

暂不支持rtmp推送

  • 安装依赖库


    conda install ffmpegpip 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.gitcd MuseTalk修改configs/inference/realtime.yaml,将preparation改为Truepython -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.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 wav2lippython genavatar.py --video_path xxx.mp4运行后将results/avatars下文件拷到本项目的data/avatars下

4. Docker Run

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

docker run --gpus all -it --network=host --rm registry.cn-beijing.aliyuncs.com/codewithgpu2/lipku-metahuman-stream:vjo1Y6NJ3N






请到「今天看啥」查看全文