?一、介紹
FaceFusion是一個免費(fèi)開源的人臉融合-AI換臉工具,使用python開發(fā)
二、 安裝
提示:安裝需要技術(shù)技能,不適合初學(xué)者。
基本
1.設(shè)置你的平臺?
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
重新啟動系統(tǒng)以使 FFmpeg 正常運(yùn)行。
shutdown /r
工具集:
Microsoft Visual C++ 2015 可再發(fā)行組件
winget install -e --id Microsoft.VCRedist.2015+.x64
Microsoft Visual Studio 2022 構(gòu)建工具
在安裝過程中,請確保選擇包含C++包的桌面開發(fā)。
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. 安裝依賴項(xiàng)
強(qiáng)烈建議使用 venv
或 conda
以避免出現(xiàn)問題。
pip install -r requirements.txt
4. 完成
使用 python run.py
命令運(yùn)行 FaceFusion。
加速度
CUDA (Nvidia)
1.安裝CUDA 工具包 11.8和cuDNN for Cuda 11.x
2.安裝依賴項(xiàng):
pip uninstall onnxruntime onnxruntime-gpu
pip install onnxruntime-gpu==1.15.1
3.提供程序可用時的用法:
python run.py --execution-providers cuda
CoreML (Apple)
Apple Silicon
1.安裝依賴項(xiàng):
pip uninstall onnxruntime onnxruntime-silicon
pip install onnxruntime-silicon==1.13.1
2.提供程序可用時的用法:
python run.py --execution-providers coreml
Apple Legacy
1.安裝依賴項(xiàng):
pip uninstall onnxruntime onnxruntime-coreml
pip install onnxruntime-coreml==1.13.1
2.提供程序可用時的用法:?
python run.py --execution-providers coreml
DirectML (Windows)
1.安裝依賴項(xiàng):
pip uninstall onnxruntime onnxruntime-directml
pip install onnxruntime-directml==1.15.1
2.提供程序可用時的用法:
python run.py --execution-providers dml
OpenVINO (英特爾)
1.安裝依賴項(xiàng):
pip uninstall onnxruntime onnxruntime-openvino
pip install onnxruntime-openvino==1.15.0
2.提供程序可用時的用法:
python run.py --execution-providers openvino
三、故障排除
平臺相關(guān):
錯誤的依賴項(xiàng)解析
確保運(yùn)行 Python 3.10 以防止依賴項(xiàng)沖突。
沒有名為“xxx”的模塊
ModuleNotFoundError
表示依賴項(xiàng)未正確安裝。
pip install -r requirements.txt
模塊“xxx”沒有屬性“xxx”
屬性錯誤
表示依賴項(xiàng)未正確安裝。
pip install -r requirements.txt
大多數(shù)OpenCV錯誤的解決方案
在大多數(shù)情況下,重新安裝 opencv-python
依賴項(xiàng)會有所幫助。
pip uninstall opencv-python opencv-python-headless
pip install opencv-python
大多數(shù)Protobuf錯誤的解決方案
在大多數(shù)情況下,重新安裝提供 insightface
和 opennsfw2
等模型的所有依賴項(xiàng)會有所幫助。
找不到 DNN 庫
確保安裝了最新的 CuDNN
運(yùn)行時,因?yàn)榈谌綆炜赡軙褂酶甙姹具M(jìn)行編譯。
非法指令
這可能是由缺少 CPU 的指令集引起的。您可以從源代碼編譯張量流,也可以降級它。
pip install tensorflow@1.5
用法相關(guān):
無類型對象沒有屬性形狀
確保刪除 -s/--source-path
、-t/--target-path
和 -o/--output-path
參數(shù)中的特殊字符和 unicode。
無法分配內(nèi)存
處理過程中的內(nèi)存異常通常是在 GPU 耗盡 VRAM 時引起的。嘗試將 --execution-thread-count
降低到 1
,然后慢慢增加它。
泄露的信號量對象
處理過程中信號量泄漏通常是在 GPU 耗盡 VRAM 時引起的。嘗試將 --execution-thread-count
降低到 1
,然后慢慢增加它。
僅使用中央處理器
不要同時安裝 onnxruntime 和 onnxruntime-xxx
。
pip uninstall onnxruntime onnxruntime-xxx
pip install onnxruntime-xxx
?文章來源地址http://www.zghlxwxcb.cn/news/detail-716888.html
Linux
無法加載庫拉斯 Lt.so.12
確保安裝全局 libcublas
依賴項(xiàng)。
sudo apt-get install libcublas-12-0
用于洞察力的構(gòu)建輪失效
確保安裝全局生成基本
依賴項(xiàng)。
sudo apt install build-essential
?
MacOS
非法硬件指令
不要通過 Rosetta 仿真運(yùn)行 Python。
模糊的面孔
請不要將 onnxruntime
升級到 requirements.txt
文件中定義的版本以外的版本。
Windows
未設(shè)置CUDA_PATH
當(dāng)庫在您的系統(tǒng)上找不到 CUDA 時,會發(fā)生此錯誤。確保將 CUDA 安裝的二進(jìn)制路徑添加到 環(huán)境變量中的$PATH
。
CUDA_PATH已設(shè)置,但無法加載 CUDA
看來您的 CUDA 安裝$PATH的二進(jìn)制路徑 是錯誤的。
找不到 CUDA 或 ZLIB dll 文件
似乎您在$PATH中安裝的二進(jìn)制路徑 丟失或錯誤。
用于洞察力的構(gòu)建輪失效
確保安裝了最新版本的 Microsoft Visual C++可再發(fā)行組件
和??Microsoft C++生成工具。
四、Workshop
在Cloud中運(yùn)行?
略?
在Docker中運(yùn)行
安裝
克隆存儲庫:
git clone https://github.com/facefusion/facefusion-docker.git
運(yùn)行 CPU
容器:
docker-compose -f docker-compose.cpu.yml up
運(yùn)行 CUDA
容器:
docker-compose -f docker-compose.cuda.yml up
運(yùn)行 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
設(shè)置
nvidia-ctk runtime configure
systemctl restart docker
?
?
編寫 UI 布局
1. 創(chuàng)建一個新的 Python 文件
在facefusion/uis/layouts
目錄中創(chuàng)建一個文件 example.py
。
2. 定義鉤子
此鉤子在程序啟動時調(diào)用。
pre_check() -> bool
此掛鉤在渲染之前調(diào)用。
pre_render() -> bool
呈現(xiàn)布局時調(diào)用此掛鉤。
render() -> gradio.Blocks
調(diào)用此掛鉤以添加事件偵聽器。
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. 運(yùn)行 UI 布局
定義掛鉤后,可以運(yùn)行 UI 布局。
python run.py --ui-layouts example
?
編寫 UI 組件
1. 創(chuàng)建一個新的 Python 文件
在 facefusion/uis/components
目錄中創(chuàng)建一個文件 example.py
。
2. 定義函數(shù)
呈現(xiàn)組件時調(diào)用此函數(shù)。
render() -> None
調(diào)用此函數(shù)以添加事件偵聽器。
listen() -> None
此函數(shù)在組件更改時調(diào)用。
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 組件
定義函數(shù)后,可以將 UI 組件添加到 UI 布局。
編寫幀處理器
1. 創(chuàng)建一個新的 Python 文件
在 facefusion/processor/frame/modules
目錄中創(chuàng)建一個文件 example.py
。
2. 定義鉤子
此掛鉤返回幀處理器的實(shí)例。
get_frame_processor() -> Any
此掛鉤清除幀處理器的實(shí)例。
clear_frame_processor() -> None
此鉤子在程序啟動時調(diào)用。
pre_check() -> bool
此掛鉤在處理之前調(diào)用。
pre_process(mode : ProcessMode) -> bool
此鉤子在處理后調(diào)用,可用于清除內(nèi)存。
post_process() -> None
調(diào)用此掛鉤以處理單個幀。
process_frame(source_face : Face, reference_face : Face, temp_frame : Frame) -> Frame
調(diào)用此掛鉤以處理多個幀并更新進(jìn)度條。
process_frames(source_path : str, temp_frame_paths : List[str], update: Callable[[], None]) -> None
處理圖像時調(diào)用此掛鉤。?
process_image(source_path : str, target_path : str, output_path : str) -> None
處理視頻時調(diào)用此掛鉤。?
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. 運(yùn)行幀處理器
定義所需的鉤子后,即可運(yùn)行幀處理器。
python run.py --frame-processors example
?
?五、知識庫
高級功能
執(zhí)行提供程序
onnxruntime
執(zhí)行提供程序會根據(jù)您的 GPU 或 CPU 加速處理。參數(shù): -
-執(zhí)行提供程序
默認(rèn)值:
[中央處理器]
示例:-
-執(zhí)行提供程序 cpu cuda
執(zhí)行線程計(jì)數(shù)
控制并行運(yùn)行以處理幀的線程數(shù)。
參數(shù) -
-執(zhí)行線程計(jì)數(shù)
默認(rèn)值:
1
示例:-
-執(zhí)行線程計(jì)數(shù) 1
執(zhí)行隊(duì)列計(jì)數(shù)
控制每個線程處理的幀數(shù)。
參數(shù) -
-執(zhí)行隊(duì)列計(jì)數(shù)
默認(rèn)值:
1
示例:-
-執(zhí)行隊(duì)列計(jì)數(shù) 1
幀處理器
通過向管道添加更多幀處理器來提高輸出。
參數(shù): -
-幀處理器
默認(rèn)值:
[face_swapper]
示例:-
-幀處理器face_swapper face_enhancer
用戶界面布局
根據(jù)需要混合和匹配不同的 UI 布局。
參數(shù):-
-ui-layouts
默認(rèn)值:
[默認(rèn)]
示例:
默認(rèn) --ui 布局
人臉詞匯
人臉分析儀
描述軟件中負(fù)責(zé)檢測和識別人臉的部分。
人臉參考
描述在處理幀期間用于人臉識別的人臉的快照。
人臉識別
描述將兩個人臉與給定閾值(稱為人臉距離)進(jìn)行比較的過程。
面距
描述兩個人臉的相似程度。
面部彈跳
將處理幀期間人與人之間的閃爍描述為人臉識別失敗。
六、項(xiàng)目獲取?
地址:點(diǎn)擊下載?文章來源:http://www.zghlxwxcb.cn/news/detail-716888.html
?
到了這里,關(guān)于開源人臉融合 AI換臉工具-FaceFusion的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!