一、介绍
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 python@3.10
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. 安装依赖项
强烈建议使用 venv
或 conda
以避免出现问题。
pip install -r requirements.txt
4. 完成
使用 python run.py
命令运行 FaceFusion。
加速度
CUDA (Nvidia)
1.安装CUDA 工具包 11.8和cuDNN 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错误的解决方案
在大多数情况下,重新安装提供 insightface
和 opennsfw2
等模型的所有依赖项会有所帮助。
找不到 DNN 库
确保安装了最新的 CuDNN
运行时,因为第三方库可能会使用更高版本进行编译。
非法指令
这可能是由缺少 CPU 的指令集引起的。您可以从源代码编译张量流,也可以降级它。
pip install tensorflow@1.5
用法相关:
无类型对象没有属性形状
确保删除 -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
文章来源地址https://www.toymoban.com/news/detail-716888.html
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 布局
人脸词汇
人脸分析仪
描述软件中负责检测和识别人脸的部分。
人脸参考
描述在处理帧期间用于人脸识别的人脸的快照。
人脸识别
描述将两个人脸与给定阈值(称为人脸距离)进行比较的过程。
面距
描述两个人脸的相似程度。
面部弹跳
将处理帧期间人与人之间的闪烁描述为人脸识别失败。
六、项目获取
地址:点击下载 文章来源:https://www.toymoban.com/news/detail-716888.html
到了这里,关于开源人脸融合 AI换脸工具-FaceFusion的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!