FaceFusion是一款可以直接换脸的项目,支持图片换脸和视频换脸,且不需要进行模型训练,是roop项目的迭代项目。
Github: https://github.com/facefusion/facefusion
安装
安装文档:https://docs.facefusion.io/installation
代码语言:javascript复制git clone https://github.com/facefusion/facefusion
conda create -n facefusion2 python=3.11 -y
conda activate facefusion2
cd facefusion
# 该命令运行中需要手动选择安装依赖的类型,建议选择cuda
python install.py
# pip install -r requirements
python run.py
常见问题
FFMpeg依赖问题
若出现FFMpeg依赖找不到,则需要安装FFMpeg,
Conda install该方式的版本不一定是最新的。
代码语言:javascript复制conda install ffmpeg -y
ffmpeg -version
也可以下载源码编译安装
代码语言:javascript复制wget http://www.ffmpeg.org/releases/ffmpeg-6.0.tar.xz
tar -xf ffmpeg-6.0.tar.xz
cd ffmpeg-6.0
#执行: ./configure --prefix=/usr/local/ffmpeg
#报错: nasm/yasm not found or too old. Use --disable-x86asm for a crippled build.
#安装: yum install yasm
./configure --prefix=/usr/local/ffmpeg
make && make install
cd /usr/local/ffmpeg/bin
./ffmpeg -version
访问问题
若想非本机可访问,则需要修改如下代码,添加server_name属性。
代码语言:javascript复制# facefusion/uis/layouts/default.py
def run(ui : gradio.Blocks) -> None:
ui.launch(show_api = False, server_name='0.0.0.0')
DNN库版本不一致
上传图片和视频后运行换脸报错,可能是本地cudnn和代码编译的版本不一致,需要升级本地cudnn版本。
代码语言:javascript复制2023-10-27 17:39:29.913787: E tensorflow/compiler/xla/stream_executor/cuda/cuda_dnn.cc:425] Loaded runtime CuDNN library: 8.2.1 but source was compiled with: 8.6.0. CuDNN library needs to have matching major version and equal or higher minor version. If using a binary install, upgrade your CuDNN library. If building from sources, make sure the library loaded at runtime is compatible with the version specified during compile configuration.
查看本地cudnn版本
代码语言:javascript复制ls /usr/local/cuda/lib64/libcudnn*
在conda环境中安装高版本的CuDNN,你可以使用以下步骤:
首先,你需要确定你的CUDA版本。因为CuDNN的版本需要与CUDA版本兼容。你可以使用以下命令来查看CUDA的版本:
代码语言:javascript复制nvcc --version
然后,你可以使用conda search
命令来查找可用的CuDNN版本。例如,如果你的CUDA版本是11.0,你可以使用以下命令来查找可用的CuDNN版本:
conda search cudnn
运行结果如下:
代码语言:javascript复制# conda search cudnn
Loading channels: done
# Name Version Build Channel
cudnn 7.0.5 cuda8.0_0 pkgs/main
cudnn 7.1.2 cuda9.0_0 pkgs/main
cudnn 7.1.3 cuda8.0_0 pkgs/main
cudnn 7.2.1 cuda9.2_0 pkgs/main
cudnn 7.3.1 cuda10.0_0 pkgs/main
cudnn 7.3.1 cuda9.0_0 pkgs/main
cudnn 7.3.1 cuda9.2_0 pkgs/main
cudnn 7.6.0 cuda10.0_0 pkgs/main
cudnn 7.6.0 cuda10.1_0 pkgs/main
cudnn 7.6.0 cuda9.0_0 pkgs/main
cudnn 7.6.0 cuda9.2_0 pkgs/main
cudnn 7.6.4 cuda10.0_0 pkgs/main
cudnn 7.6.4 cuda10.1_0 pkgs/main
cudnn 7.6.4 cuda9.0_0 pkgs/main
cudnn 7.6.4 cuda9.2_0 pkgs/main
cudnn 7.6.5 cuda10.0_0 pkgs/main
cudnn 7.6.5 cuda10.1_0 pkgs/main
cudnn 7.6.5 cuda10.2_0 pkgs/main
cudnn 7.6.5 cuda9.0_0 pkgs/main
cudnn 7.6.5 cuda9.2_0 pkgs/main
cudnn 8.2.1 cuda11.3_0 pkgs/main
cudnn 8.9.2.26 cuda11_0 pkgs/main
根据你的CUDA版本(nvidia-smi命令可查看)和需要的CuDNN版本,
你可以使用conda install
命令来安装CuDNN。例如,如果你的CUDA版本是11.0,你想安装CuDNN 8.9.2.26,你可以使用以下命令:
conda install cudnn=8.9.2.26
conda的库也可以
代码语言:javascript复制cp /install/anaconda3-env/envs/facefusion2/lib/libcudnn* /usr/local/cuda-11.0/include/
cp /install/anaconda3-env/envs/facefusion2/include/cudnn* /usr/local/cuda-11.0/lib64/
找不到DNN库
运行推断的时候报错如下:
代码语言:javascript复制DNN library is not found.
下载最新的cudnn,根据cuda版本选择,如cuda11对对应的8.9.5
代码语言:javascript复制# https://developer.nvidia.com/cudnn
# 解压编译好的二进制文件夹压缩包
cp include/cudnn* /usr/local/cuda-11.0/include/
cp lib/libcudnn* /usr/local/cuda-11.0/lib64/
Web使用
上传图片和视频
中间SOURCE部分只能上传图片(想换的新脸),TARGET部分可以上传图片和视频(需要被替换的素材)。
右侧PREVIEW部分是换脸的预览图片效果。
右侧的REFERENCE FACE DISTANCE部分是原图和目标素材中的人脸相似程度,用的是欧式距离,值越小表示两者越相似,可以根据实际的相似情况调节该值让换脸更逼真。
默认情况下的换脸后会出现脸部模糊的现象,可以勾选左侧上方的face_enhancer,可以让脸部更高清。