out
数字人实时驱动技术不仅推动了技术和艺术的融合,也为各行各业提供了新的工具和方法,使得虚拟与现实的界限日益模糊。
- 互动性:用户可以与数字人实时交互,提供了一种更加动态和吸引人的用户体验。
- 广泛应用:可以用于虚拟客服、在线教育、娱乐等多个领域。
- 训练和模拟:在医疗、军事训练等领域,数字人可以提供高度逼真的交互模拟环境。
DH_live实时驱动:消耗显存不到2G
一、环境部署
项目地址:GitHub - kleinlee/DH_live: 每个人都能用的数字人
cd checkpoint
gzip -d -c render.pth.gz.001 > render.pth
也就是解压render.pth.gz.001,得到 render.pth。
conda create -n dhlive python==3.9
conda activate dhlive
pip install -r requirement.txt
可能安装不完全,缺什么再pip单独安装。
坑点应该是其中的pytorch部分,要求是:torch==2.1.1+cu121
torchvision==0.16.1+cu121,我cuda版本是11.8,安装121的pytorch也可以运行。
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu121
二、素材准备
准备自己的视频,1.mp4.
python data_preparation.py 1.mp4
将生成的front.mp4 和back.mp4复制data中,再次运行python data_preparation.py 1.mp4。
就会在video_data下生成一个文件夹里面包含:circle.mp4和keypoint_rotate.pkl
(但是可能有问题,只生成某一个,我的情况是,windows电脑生成一个,ubuntu服务器生成了另一个)
最新更新:将data_preparation.py 代码中的第90行代码:
for frame_index in tqdm.tqdm(range(totalFrames)):
修改为:for frame_index in range(totalFrames):
即可正常生成circle.mp4和keypoint_rotate.pkl
三、合成视频
将video_data下生成一个文件夹重命名为test1
python demo.py video_data/test1 video_data/audio0.wav out.mp4
就生成了合成视频。
四、实时驱动
python demo_avatar.py
可以通过麦克风,实时驱动嘴型。
import time
import os
import numpy as np
from scipy.io import wavfile
import cv2
import glob
from talkingface.audio_model import AudioModel
from talkingface.render_model import RenderModel
audioModel = AudioModel()
audioModel.loadModel("checkpoint/audio.pkl")
renderModel = RenderModel()
renderModel.loadModel("checkpoint/render.pth")
test_video = "test"
pkl_path = "video_data/{}/keypoint_rotate.pkl".format(test_video)
video_path = "video_data/{}/circle.mp4".format(test_video)
renderModel.reset_charactor(video_path, pkl_path)
wavpath = "video_data/audio0.wav"
rate, wav = wavfile.read(wavpath, mmap=False)
index_ = 0
frame_index__ = 0
import sounddevice as sd
sample_rate = 16000
samples_per_read = int(0.04 * sample_rate)
with sd.InputStream(
channels=1, dtype="float32", samplerate=sample_rate
) as s:
while True:
samples, _ = s.read(samples_per_read) # a blocking read
pcm_data = samples.reshape(-1)
print(pcm_data.shape)
mouth_frame = audioModel.interface_frame(pcm_data)
frame = renderModel.interface(mouth_frame)
cv2.imshow("s", frame)
cv2.waitKey(10)
index_ += 1
-
模块导入和初始化:
- 导入必要的模块,如
time
、os
、numpy
、scipy.io.wavfile
、cv2
和glob
。 - 导入自定义的
AudioModel
和RenderModel
,这些可能是用于处理音频和视频的深度学习模型。
- 导入必要的模块,如
-
模型加载:
- 加载音频和渲染模型的预训练权重。
-
视频和关键点数据处理:
- 为渲染模型设定视频路径和关键点数据路径。
-
音频处理:
- 读取音频文件,并使用
sounddevice
模块实时获取音频输入。
- 读取音频文件,并使用
-
实时音频到视频渲染:
- 实时处理输入的音频数据,将其转换成相应的口型关键帧。
- 使用渲染模型将这些口型关键帧转换为视频帧。
- 通过
cv2.imshow
实时显示这些视频帧。