Docker 环境检查
执行docker info
查看环境种是否有安装docker,否则首先安装好docker 运行环境。在线环境安装执行执行两条指令即可
sudo apt install docker
sudo apt-get install docker-ce
sudo apt-get install docker-compose
sudo systemctl restart docker
GPU环境检查
没有GPU环境忽略该步骤,但后面的所有过程跑起来可能就不会那么流畅。
nvidia-smi --query-gpu=name,memory.total,memory.free --format=csv,noheader
NVIDIA Container Toolkit 安装
为确保能用上nvidia的gpu,需要安装改toolkit。详细参见
【安装NVIDIA Container Toolkit】
自定义创建容器镜像
下载Dockerfile文件及地址:
FROM python:3.8.16-bullseye
ARG DEBIAN_FRONTEND=noninteractive
RUN echo > /etc/apt/sources.list
RUN echo "deb https://mirrors.aliyun.com/debian/ bullseye main non-free contrib"> /etc/apt/sources.list
RUN echo "deb-src https://mirrors.aliyun.com/debian/ bullseye main non-free contrib">> /etc/apt/sources.list
RUN echo "deb https://mirrors.aliyun.com/debian-security/ bullseye-security main">> /etc/apt/sources.list
RUN echo "deb-src https://mirrors.aliyun.com/debian-security/ bullseye-security main">> /etc/apt/sources.list
RUN echo "deb https://mirrors.aliyun.com/debian/ bullseye-updates main non-free contrib">> /etc/apt/sources.list
RUN echo "deb-src https://mirrors.aliyun.com/debian/ bullseye-updates main non-free contrib">> /etc/apt/sources.list
RUN echo "deb https://mirrors.aliyun.com/debian/ bullseye-backports main non-free contrib">> /etc/apt/sources.list
RUN echo "deb-src https://mirrors.aliyun.com/debian/ bullseye-backports main non-free contrib">> /etc/apt/sources.list
RUN apt-get update
RUN apt-get install -y --no-install-recommends \
software-properties-common \
wget \
git \
build-essential \
libgl1 \
libssl-dev \
libffi-dev \
libxml2-dev \
libxslt1-dev \
zlib1g-dev \
libjpeg-dev \
libpng-dev \
unzip \
ffmpeg
WORKDIR /app
COPY SadTalker /app/SadTalker/
WORKDIR /app/SadTalker
RUN pip config set global.index-url http://mirrors.aliyun.com/pypi/simple
RUN pip config set install.trusted-host mirrors.aliyun.com
RUN pip install torch==1.12.1+cu113 torchvision==0.13.1+cu113 torchaudio==0.12.1 --extra-index-url https://download.pytorch.org/whl/cu113
RUN pip install dlib-bin
RUN pip install --verbose --use-pep517 -r requirements.txt
ENTRYPOINT ["python3", "inference.py"]
注意:
1、网上很多教程都会让安装conda,主要是因为安装的目标并不是在容器中,这里是容器化部署,环境单一,并不存在多个虚拟环境的情况,所以直接pip 安装即可。
2、网络原因,请务必做好镜像源的配置。 这里包括apt-get 的source 。和pip的国内安装源,大部分错误都源于此处。
3、--verbose --use-pep517
我的环境build时出错,根据错误提示添加这两参数解决问题。为了方便纠错,把–verbose 加上方便显示更多的提示信息
4、默认镜像源为清华源的时候,会有一个报错,此处改为阿里源解决问题。
生存image
进入到Dockerfile所在目录,执行:
docker build -t qingcloudtech/sadtalker:v1.0 .
当然如果不想自己build 的也可以直接运行启动命名:但需要把镜像名称改为:registry.cn-hangzhou.aliyuncs.com/qingcloudtech/sadtalker:v1.0
启动命令
docker run -it --gpus all \
-v ./checkpoints:/app/SadTalker/checkpoints \
-v ./gfpgan/weights:/app/SadTalker/gfpgan/weights \
-v ./results:/app/SadTalker/results \
-v ./data:/app/SadTalker/sample \
qingcloudtech/sadtalker:v1.0 \
--driven_audio /app/SadTalker/examples/driven_audio/chinese_news.wav \
--source_image /app/SadTalker/examples/source_image/art_0.png \
--expression_scale 1.0 \
--result_dir /app/SadTalker/results \
备注:
/app/SadTalker/checkpoints
容器内该目录不能改变/app/SadTalker/gfpgan/weights
容器内该地址不能改变
checkpoinits 和weights 文件都放在宿主机上,方便更新和下载。
运行结果文件放在挂在到本地方便读取结果文件的容器路径需要与--result_dir
一致。
需要操作的音频文件和image样例文件也挂在到宿主机上。
高级设置
inference.py 文件中高级配置选项说明
姓名 | 配置 | 默认 | 说明 |
增强模式 | –enhancer | None | gfpgan或RestoreFormer |
确保已经安装: | |||
pip install gfpgan | |||
背景增强器 | –background_enhancer | None | realesrgan:增强完整视频。 |
确保已经安装: | |||
pip install realesrgan | |||
静止模式 | –still | false | 使用与原始图像相同的姿势参数,减少头部运动。 |
表现模式 | –expression_scale | 1.0 | 值越大,表情运动越强。 |
保存路径 | –result_dir | ./results | 该文件将保存在较新的位置。 |
预处理 | –preprocess | crop | crop: 运行并在裁剪后的输入图像中生成结果 |
resize: 图像将调整为特定分辨率。 | |||
full :运行完整图像动画, | |||
使用–still可以获得更好的效果。 | |||
参考模式 | |||
(眼睛) | –ref_eyeblink | None | 视频路径,我们借用此参考视频中的眨眼来提供更自然的眉毛运动。 |
参考模式 | |||
(姿势) | –ref_pose | None | 视频路径,我们从头部参考视频中借用姿势。 |
3D模式 | –face3dvis | false | 需要额外安装。生成 3D 脸部的更多详细信息可以在此处 |
找到。 | |||
自由观看模式 | –input_yaw, | ||
–input_pitch, | |||
–input_roll | None | 从单个图像生成新颖的视图或自由视图 4D 头部说话。更多详细信息可以在这里 | |
找到。 |
从音频和单个图像生成 4D 自由视图
我们使用input_yaw, input_pitch,input_roll来控制头部姿势。例如,–input_yaw -20 30 10表示输入头偏航度从-20变为30,然后从30变为10。
docker run -it --gpus all \
-v ./checkpoints:/app/SadTalker/checkpoints \
-v ./gfpgan/weights:/app/SadTalker/gfpgan/weights \
-v ./results:/app/SadTalker/results \
-v ./data:/app/SadTalker/sample \
qingcloudtech/sadtalker:v1.0 \
--driven_audio /app/SadTalker/examples/driven_audio/chinese_news.wav \
--source_image /app/SadTalker/examples/source_image/art_0.png \
--expression_scale 1.0 \
--result_dir /app/SadTalker/results \
--input_yaw -20 30 10