开源人脸融合 AI换脸工具-FaceFusion

 一、介绍

FaceFusion是一个免费开源的人脸融合-AI换脸工具,使用python开发

二、 安装

提示:安装需要技术技能,不适合初学者。

基本

1.设置你的平台 

Linux

Python

apt install python3.10

PIP

apt install python3-pip

GIT

apt install git-all

FFmpeg

apt install ffmpeg

MacOS

Python

brew install [email protected]

PIP

python -m ensurepip

GIT

brew install git

FFmpeg

brew install ffmpeg

Windows 

 Python

winget install -e --id Python.Python.3.10

PIP

python -m ensurepip

GIT

winget install -e --id Git.Git

FFmpeg

winget install -e --id Gyan.FFmpeg

重新启动系统以使 FFmpeg 正常运行。

shutdown /r

工具集:

Microsoft Visual C++ 2015 可再发行组件

winget install -e --id Microsoft.VCRedist.2015+.x64

Microsoft Visual Studio 2022 构建工具

在安装过程中,请确保选择包含C++包的桌面开发。

winget install -e --id Microsoft.VisualStudio.2022.BuildTools --override "--wait --add Microsoft.VisualStudio.Workload.NativeDesktop --includeRecommended"

2. 克隆存储库

git clone https://github.com/facefusion/facefusion

 3. 安装依赖项

强烈建议使用 venvconda 以避免出现问题。

pip install -r requirements.txt

4. 完成

使用 python run.py 命令运行 FaceFusion。

加速度

CUDA (Nvidia)

1.安装CUDA 工具包 11.8cuDNN for Cuda 11.x

2.安装依赖项:

pip uninstall onnxruntime onnxruntime-gpu
pip install onnxruntime-gpu==1.15.1

3.提供程序可用时的用法:

python run.py --execution-providers cuda

CoreML (Apple)

Apple Silicon

1.安装依赖项:

pip uninstall onnxruntime onnxruntime-silicon
pip install onnxruntime-silicon==1.13.1

2.提供程序可用时的用法:

python run.py --execution-providers coreml

Apple Legacy

1.安装依赖项:

pip uninstall onnxruntime onnxruntime-coreml
pip install onnxruntime-coreml==1.13.1

2.提供程序可用时的用法: 

python run.py --execution-providers coreml

DirectML (Windows)

1.安装依赖项:

pip uninstall onnxruntime onnxruntime-directml
pip install onnxruntime-directml==1.15.1

2.提供程序可用时的用法:

python run.py --execution-providers dml

OpenVINO (英特尔)

1.安装依赖项:

pip uninstall onnxruntime onnxruntime-openvino
pip install onnxruntime-openvino==1.15.0

2.提供程序可用时的用法:

python run.py --execution-providers openvino

三、故障排除

平台相关:

错误的依赖项解析

确保运行 Python 3.10 以防止依赖项冲突。

没有名为“xxx”的模块

ModuleNotFoundError 表示依赖项未正确安装。

pip install -r requirements.txt

模块“xxx”没有属性“xxx”

属性错误表示依赖项未正确安装。

pip install -r requirements.txt

大多数OpenCV错误的解决方案

在大多数情况下,重新安装 opencv-python 依赖项会有所帮助。

pip uninstall opencv-python opencv-python-headless

pip install opencv-python

大多数Protobuf错误的解决方案

在大多数情况下,重新安装提供 insightfaceopennsfw2 等模型的所有依赖项会有所帮助。

找不到 DNN 库

确保安装了最新的 CuDNN 运行时,因为第三方库可能会使用更高版本进行编译。

非法指令

这可能是由缺少 CPU 的指令集引起的。您可以从源代码编译张量流,也可以降级它。

pip install [email protected]

用法相关:

无类型对象没有属性形状

确保删除 -s/--source-path、-t/--target-path 和 -o/--output-path 参数中的特殊字符和 unicode。

无法分配内存

处理过程中的内存异常通常是在 GPU 耗尽 VRAM 时引起的。尝试将 --execution-thread-count 降低到 1,然后慢慢增加它。

泄露的信号量对象

处理过程中信号量泄漏通常是在 GPU 耗尽 VRAM 时引起的。尝试将 --execution-thread-count 降低到 1,然后慢慢增加它。

仅使用中央处理器

不要同时安装 onnxruntime 和 onnxruntime-xxx

pip uninstall onnxruntime onnxruntime-xxx

pip install onnxruntime-xxx

Linux

无法加载库拉斯 Lt.so.12

确保安装全局 libcublas 依赖项。

sudo apt-get install libcublas-12-0

用于洞察力的构建轮失效

确保安装全局生成基本依赖项。

sudo apt install build-essential

MacOS

非法硬件指令

不要通过 Rosetta 仿真运行 Python。

模糊的面孔

请不要将 onnxruntime 升级到 requirements.txt 文件中定义的版本以外的版本。

Windows

未设置CUDA_PATH

当库在您的系统上找不到 CUDA 时,会发生此错误。确保将 CUDA 安装的二进制路径添加到 环境变量中的$PATH

CUDA_PATH已设置,但无法加载 CUDA

看来您的 CUDA 安装$PATH的二进制路径 是错误的。

找不到 CUDA 或 ZLIB dll 文件

似乎您在$PATH中安装的二进制路径 丢失或错误。

用于洞察力的构建轮失效

确保安装了最新版本的 Microsoft Visual C++可再发行组件和  Microsoft C++生成工具。

四、Workshop

在Cloud中运行 

略 

在Docker中运行

安装

克隆存储库:

git clone https://github.com/facefusion/facefusion-docker.git

运行 CPU 容器:

docker-compose -f docker-compose.cpu.yml up

运行 CUDA 容器:

docker-compose -f docker-compose.cuda.yml up

运行 ROCM 容器:

docker-compose -f docker-compose.rocm.yml up

用法

浏览 CPU 容器:

http://localhost:7870

浏览 CUDA 容器:

http://localhost:7880

浏览 ROCM 容器:

http://localhost:7890

Linux

安装

apt install nvidia-docker2

设置

nvidia-ctk runtime configure

systemctl restart docker

编写 UI 布局

1. 创建一个新的 Python 文件

facefusion/uis/layouts目录中创建一个文件 example.py

2. 定义钩子

此钩子在程序启动时调用。

pre_check() -> bool

此挂钩在渲染之前调用。

pre_render() -> bool

呈现布局时调用此挂钩。

render() -> gradio.Blocks

调用此挂钩以添加事件侦听器。

listen() -> None

使用此骨架

import gradio

from facefusion.uis.components import example


def pre_check() -> bool:
	return True


def pre_render() -> bool:
	return True


def render() -> gradio.Blocks:
	with gradio.Blocks() as layout:
		example.render()
	return layout


def listen() -> None:
	example.listen()

3. 运行 UI 布局

定义挂钩后,可以运行 UI 布局。

python run.py --ui-layouts example

编写 UI 组件

1. 创建一个新的 Python 文件

facefusion/uis/components 目录中创建一个文件 example.py

2. 定义函数

呈现组件时调用此函数。

render() -> None

调用此函数以添加事件侦听器。

listen() -> None

此函数在组件更改时调用。

update() -> Update

使用此骨架

from typing import Optional
import gradio

from facefusion.uis.typing import Update

EXAMPLE_IMAGE : Optional[gradio.Image] = None


def render() -> None:
	global EXAMPLE_IMAGE

	EXAMPLE_IMAGE = gradio.Image()


def listen() -> None:
	EXAMPLE_IMAGE.change(update, inputs = EXAMPLE_IMAGE, outputs = EXAMPLE_IMAGE)


def update() -> Update:
	return gradio.update()

3. 添加 UI 组件

定义函数后,可以将 UI 组件添加到 UI 布局。

编写帧处理器

1. 创建一个新的 Python 文件

facefusion/processor/frame/modules 目录中创建一个文件 example.py

2. 定义钩子

此挂钩返回帧处理器的实例。

get_frame_processor() -> Any

此挂钩清除帧处理器的实例。

clear_frame_processor() -> None

此钩子在程序启动时调用。

pre_check() -> bool

此挂钩在处理之前调用。

pre_process(mode : ProcessMode) -> bool

此钩子在处理后调用,可用于清除内存。

post_process() -> None

调用此挂钩以处理单个帧。

process_frame(source_face : Face, reference_face : Face, temp_frame : Frame) -> Frame

调用此挂钩以处理多个帧并更新进度条。

process_frames(source_path : str, temp_frame_paths : List[str], update: Callable[[], None]) -> None

处理图像时调用此挂钩。 

process_image(source_path : str, target_path : str, output_path : str) -> None

处理视频时调用此挂钩。 

process_video(source_path : str, temp_frame_paths : List[str]) -> None

使用此骨架 

from typing import Any, List, Callable

from facefusion.typing import Face, Frame

FRAME_PROCESSOR = None
NAME = 'FACEFUSION.FRAME_PROCESSOR.EXAMPLE'


def get_frame_processor() -> Any:
	pass


def clear_frame_processor() -> None:
	pass


def pre_check() -> bool:
	return True


def pre_process(is_preview : bool = False) -> bool:
	pass


def post_process() -> None:
	pass


def process_frame(source_face : Face, reference_face : Face, temp_frame : Frame) -> Frame:
	pass


def process_frames(source_path : str, temp_frame_paths : List[str], update: Callable[[], None]) -> None:
	pass


def process_image(source_path : str, target_path : str, output_path : str) -> None:
	pass


def process_video(source_path : str, temp_frame_paths : List[str]) -> None:
	pass

3. 运行帧处理器

定义所需的钩子后,即可运行帧处理器。

python run.py --frame-processors example

 五、知识库

高级功能

执行提供程序

onnxruntime 执行提供程序会根据您的 GPU 或 CPU 加速处理。

参数: --执行提供程序

默认值:[中央处理器]

示例:--执行提供程序 cpu cuda

执行线程计数

控制并行运行以处理帧的线程数。

参数 --执行线程计数

默认值:1

示例:--执行线程计数 1

执行队列计数

控制每个线程处理的帧数。

参数 --执行队列计数

默认值:1

示例:--执行队列计数 1

帧处理器

通过向管道添加更多帧处理器来提高输出。

参数: --帧处理器

默认值:[face_swapper]

示例:--帧处理器face_swapper face_enhancer

用户界面布局

根据需要混合和匹配不同的 UI 布局。

参数:--ui-layouts

默认值:[默认]

示例:默认 --ui 布局

人脸词汇

人脸分析仪

描述软件中负责检测和识别人脸的部分。

人脸参考

描述在处理帧期间用于人脸识别的人脸的快照。

人脸识别

描述将两个人脸与给定阈值(称为人脸距离)进行比较的过程。

面距

描述两个人脸的相似程度。

面部弹跳

将处理帧期间人与人之间的闪烁描述为人脸识别失败。

六、项目获取 

地址:点击下载 

猜你喜欢

转载自blog.csdn.net/weixin_59360988/article/details/132595755