- 多平台兼容:支持NVIDIA和AMD等主流显卡平台,满足不同用户的硬件需求。
- 多种处理模式:提供人脸替换、人脸高清修复和背景高清修复等多种策略,每种策略下包含多个模型可自由切换。
- 自定义设置:用户可以自定义执行线程、执行队列、最大内存和输出路径,电脑配置好的情况下可以适当调大这些参数。
- 预览功能:提供预览功能,可以自由选择换脸对象和多人换脸,单人换脸通过方位选择人脸、年龄选择人脸、以及性别选择人脸。
- 唇形同步:引入wave2lip处理器,同步口型动作,使视频更加自然。
- 面部对齐改进:通过68比5的地标变换,提高面部对齐的精确度。
- 新模型支持:增加uniface_256模型,提供更高质量的换脸选项;集成yoloface作为默认的人脸检测器模型,提升检测效率。
换脸这个东西,起之前也尝试过faceswap,然而,这个东西使用起来的确麻烦,需要提供的素材数量比较多,训练过程比较繁琐,并且最终的效果在样本数量不够大的时候就会发现实际效果一般:
当然,图片换脸目前腾讯元宝提供了免费的传图换脸的功能,整体效果还是挺不错的。下面的是基于腾讯元宝来实现的:
不过,对于视频换脸的免费工具(手机上可用的),目前我还没发现,前端时间看到这个东西,于是尝试了一下。网上有个facefusion2.6.1压缩包版本,实际下载安装后,效果一般,由于缺少文件会导致无法运行,如果要使用的话,复制一个png文件,放到facefusion2.6.1\dependency\res目录下,命名为main.png即可。在运行过程中会显示这个图片。
之前还下载了一个DeepFaceLab_NVIDIA_RTX3000_series,这个东西要用比较麻烦的一点在于,只能靠命令一条一条的执行,看着目录下的文件就感觉头大了。
最终还是决定尝试下FaceFusion的最新版本,安装可以参考这个链接:Installation | FaceFusion
最简单方法,访问这个链接购买安装包:Windows Installer 20美元,解决了后面全部的问题。如果不想花20,那么继续往下看。
具体的步骤简单概述,以win11为准:
1.安装git conda ffmpeg
GIT winget install -e --id Git.Git Conda winget install -e --id Anaconda.Miniconda3 --override "/AddToPath=1" FFmpeg winget install -e --id Gyan.FFmpeg
conda安装之后配置环境路径,添加到path下:
重启powershell继续后面的操作。
2.准备conda环境:
Initialize conda for your terminal: conda init --all Create the environment: conda create --name facefusion python=3.12 pip=25.0 Activate the environment: conda activate facefusion
3.安装gpu支持,我只有conda:
conda install conda-forge::cuda-runtime=12.8.1 conda-forge::cudnn=9.8.0.87
4.下载代码
git clone https://gitee.com/facefusion/facefusion cd facefusion
5.安装(cuda)
python install.py --onnxruntime cuda
6.重新激活环境:
conda deactivate conda activate facefusion
7.运行系统:
python facefusion.py run --open-browser
启动之后会自动下载各种特征文件,如果下载不动就多试几次,或者尝试挂个全局代理
现在就可以尝试换脸了:
按图选择模块进行换脸,此时就完成之后就可以下载了:
实际效果:
另外一个视频520AM:
实际效果就是这样的,不过安装的时候需要注意用户名路径不要存在中文。另外,这个东西貌似处理a片有问题,会报下面的错误,感觉还是视频文件问题,谁知道怎么解决的还望不吝赐教:
Traceback (most recent call last): File "C:\Users\obaby\.conda\envs\facefusion\Lib\site-packages\gradio\queueing.py", line 625, in process_events response = await route_utils.call_process_api( ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\obaby\.conda\envs\facefusion\Lib\site-packages\gradio\route_utils.py", line 322, in call_process_api output = await app.get_blocks().process_api( ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\obaby\.conda\envs\facefusion\Lib\site-packages\gradio\blocks.py", line 2146, in process_api result = await self.call_function( ^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\obaby\.conda\envs\facefusion\Lib\site-packages\gradio\blocks.py", line 1664, in call_function prediction = await anyio.to_thread.run_sync( # type: ignore ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\obaby\.conda\envs\facefusion\Lib\site-packages\anyio\to_thread.py", line 56, in run_sync return await get_async_backend().run_sync_in_worker_thread( ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\obaby\.conda\envs\facefusion\Lib\site-packages\anyio\_backends\_asyncio.py", line 2470, in run_sync_in_worker_thread return await future ^^^^^^^^^^^^ File "C:\Users\obaby\.conda\envs\facefusion\Lib\site-packages\anyio\_backends\_asyncio.py", line 967, in run result = context.run(func, *args) ^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\obaby\.conda\envs\facefusion\Lib\site-packages\gradio\utils.py", line 884, in wrapper response = f(*args, **kwargs) ^^^^^^^^^^^^^^^^^^ File "E:\facefusion3\facefusion\facefusion\uis\components\job_runner.py", line 91, in run if job_id and job_runner.run_job(job_id, process_step): ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "E:\facefusion3\facefusion\facefusion\jobs\job_runner.py", line 11, in run_job if run_steps(job_id, process_step) and finalize_steps(job_id): ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "E:\facefusion3\facefusion\facefusion\jobs\job_runner.py", line 72, in run_steps if not run_step(job_id, index, step, process_step): ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "E:\facefusion3\facefusion\facefusion\jobs\job_runner.py", line 58, in run_step if job_manager.set_step_status(job_id, step_index, 'started') and process_step(job_id, step_index, step_args): ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "E:\facefusion3\facefusion\facefusion\core.py", line 323, in process_step error_code = conditional_process() ^^^^^^^^^^^^^^^^^^^^^ File "E:\facefusion3\facefusion\facefusion\core.py", line 340, in conditional_process return process_video(start_time) ^^^^^^^^^^^^^^^^^^^^^^^^^ File "E:\facefusion3\facefusion\facefusion\core.py", line 418, in process_video if analyse_video(state_manager.get_item('target_path'), trim_frame_start, trim_frame_end): ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "E:\facefusion3\facefusion\facefusion\content_analyser.py", line 102, in analyse_video if analyse_frame(vision_frame): ^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "E:\facefusion3\facefusion\facefusion\content_analyser.py", line 77, in analyse_frame nsfw_scores = detect_nsfw(vision_frame) ^^^^^^^^^^^^^^^^^^^^^^^^^ File "E:\facefusion3\facefusion\facefusion\content_analyser.py", line 115, in detect_nsfw temp_vision_frame = fit_frame(vision_frame, model_size) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "E:\facefusion3\facefusion\facefusion\vision.py", line 243, in fit_frame height, width = vision_frame.shape[:2] ^^^^^^^^^^^^^^^^^^ AttributeError: 'NoneType' object has no attribute 'shape'
系统默认缓存目录为:
C:\Users\obaby\AppData\Local\Temp\facefusion
要修改这个路径,修改 facefusion.ini文件:
[paths] temp_path = ./temp jobs_path = source_paths = target_path = output_path =
修改完重启即可:
2.6.1版本安装包:
https://www.123pan.com/s/5DsaTd-5YGc.html
链接:https://pan.quark.cn/s/11bffd2d5993
提取码:ankQ
14 comments
感觉容易被人利用来给A片换脸然后传黄谣
现在这个东西,主要也是用来干这个的。
自己先换了,把这条路堵死,啊哈哈哈
牛啊,姐妹
这相当自然啊
效果还是不错的。
不过现在换脸片和有码片我都直接叉掉了。索然无味。
现在这种片也的确多。
你身材变得这么好啊,说是真的也看不出来😂😂😂
原以为下载了就能马上用,这个看起来还要专门配置,也挺麻烦的哈。
安装包是可以的,直接能运行。
exe版本,补到文章末尾了。
真不错
最近的研究方向,多少有点刑啊。