在制作定制数字人时,有时候为了不侵权,会使用换脸软件将原素材的脸型进行替换,今天一个客户就提出了这样的需求,所以,这里我使用 FaceFusuion 这款软件来进行操作。
FaceFusion 是由 Roop 项目的核心开发者独立发布的,它被官方描述为下一代的人脸交换和增强软件,这个软件可以用于处理图片和视频,可以运行在 GPU 和 CPU 下面。
总体使用起来,界面感觉还挺简单的,如果要求不高的,基本不需要改动什么配置,直接选择源和目标就行了。
官网:https://github.com/facefusion/facefusion
要运行这个软件,可以本地安装、Colab、租用云算力都可以,这款软件本身要求不是很高,但是为了更好的体验,有 GPU 的、内存大一些的肯定会更好。
我开始是用的 Colab ,但是毕竟是免费的算力,要不就是 GPU 不够了,要不就是跑着跑着就报错了,不知道是不是我的源文件有点大,开始有 400M, 后面给剪辑了下,减少到 200M了。
但是还是会报那样的错误,后台任务跑到100%后又重新开始了,就是合成不了视频,折腾了大半天,我放弃了。
如果有兴趣的可以玩一下,地址为 :
·
https://github.com/facefusion/facefusion-colab
打开这个地址后,再打开colab,执行每个单元格代码就行了,能不能就用,就看有没有算力了。
既然免费的不行,那就只能氪金了,我这里用的算力平台是 AutoDL ,它可以按量和时长计费,也能按日、周、月等,还是比较灵活的。
官网地址是:https://www.autodl.com/
打开地址后,有账号的直接登录,没有账号的,自己注册一个账号就行了,很简单
因为后续要租用算力,所以可以先提前给账户充下值,至于充多少这个是随便的,只要能够满足你后面租用机器的钱就行了,当然也可以后面再充,这个看自己的。
根据界面提示,选择或输入充值金额就行了,支持微信和支付宝等
租用算力, 我们点击菜单的 「算力市场」,这里可以选择计费方式,地区,GPU型号等
然后从下面找一个自己能接受的价格就行,「芜湖区」、「佛山区」、「内蒙A区」这几个相对较要便宜一些。
如果机器可以租的话,上面会显示几个卡可租的字样,比如「1卡可租」,如果显示「已租完」,那么就要稍等一下了,多刷新,就会有其它的卡释放的,除非高峰期,要不然还是好租的,不然可能半天都没有卡可租,这个就只能等了。
租的时候,看自己的要求吧,比如「显存」「内存」还有数据盘的大小,能不能扩容等,还有支持的 CUDA 版本,有些软件对这个会有要求,那么就注意一下就行了。
比如像我这个,我就租了一个这样的,这种自己根据需求来就行了,没有限制。
点那个几卡可租的按钮进来,就进行实例的创建,这里就是选择镜像,可以选择「基础镜像」、「社区镜像」等
基础镜像就是只有基本的软件,后面要用的东西,后续自己去安装
社区镜像就是选择别人直接做好的,机器创建好后,可以直接拿来用的
因为FaceFusuion这个,我在社区里面没找到,所以这里我选择的是基础的,只装了一个 Miniconda
如果这里没有创建成功,提示没有机器可用,那么也需要等一下了,如果创建成功了,则就直接开机了,在控制台的 「容器实例」中能看到,然后在 「快捷工具」下面找到 「JupyterLab」点进去,就进入机器实例内部了
进入到机器实例了,这里就可以进行操作了。
在操作之前,需要加一个配置,不能访问不了 github 这些站
在终端输入命令
·
source /etc/network_turbo
参考:https://www.autodl.com/docs/network_turbo/
安装
因为基础镜像有conda了,直接使用。
git clone https://github.com/facefusion/facefusion
conda create -n facefusion2 python=3.11 -y
source /root/miniconda3/bin/activate
conda activate facefusion2
python install.py --skip-venv
选择安装 「cuda」
然后再安装ffmpg
·
·
·
conda install ffmpeg -y
ffmpeg -version
在启动之前,可以提前下载好模型,也可以不下载,这个看自己,我这边操作就没有下载,因为感觉执行下来,速度也还行。
·
·
·
wget https://github.com/facefusion/facefusion-assets/releases/download/models/inswapper_128.onnxwget https://github.com/facefusion/facefusion-assets/releases/download/models/arcface_w600k_r50.onnxwget https://github.com/facefusion/facefusion-assets/releases/download/models/gfpgan_1.4.onnx
运行
直接在项目目录运行 run.py ,这里如果没有提前下载模型的话,可能需要等待一下,看到如下的访问地址就可以了。
·
python run.py --execution-providers cuda --face-swapper-model inswapper_128
这里有个小技巧,如果你的目标视频很大的话,可以先通过 AutoDL 先上传到某上文件夹下面,而不是通过界面来上传,有个好处就是如果换脸中途有报错,那么不需要重新上传,只需要运行的时候,指定下路径就行了。
比如
·
python run.py --execution-providers cuda --face-swapper-model inswapper_128 --source=/tmp/gradio/2c830d29e00280596e3ab670ff6569a32c2ab9de/WechatIMG33.jpg --target=/tmp/gradio/717e7b728adac28ee0b336c8d2c3e90ea92c5f2b/v1.mp4 --output=/tmp/bbbb.mp4
那么就可以直接读取上传好的文件了。
运行完后,就有一个访问地址,127.0.0.1:7860 这样的,这个地址只能内部访问 ,本来改一个文件就可以创建对外地址的,但是我改了也一样不行。
所以要访问的话,就有如下的两种方式
一 本地
因为AutoDL 启动的是类似 http://127.0.0.1:7860 这样的地址,这种只能在内部机器访问 ,而且,我在文件
“facefusion/uis/layouts/default.py”里,把 ui.launch(show_api =False,share=True)的share = True 加上,也不能创建外网地址,会报错
于是用如下的本地方式
在自己本地电脑终端输入下面命令
·
ssh -CNg -L 7860:127.0.0.1:7860 root@region-9.autodl.pro -p 26370
这个命令输入完后,有一个密码,输入界面上显示的那个就行。
然后在本地浏览器输入 http://localhost:7860/ 就能访问了
二 外网
在 AutoDL 的机器 里面操作
1 下载文件 https://cdn-media.huggingface.co/frpc-gradio-0.2/frpc_linux_amd64
2 重命名 frpc_linux_amd64_v0.2
3 移动到 /root/miniconda3/envs/facefusion2/lib/python3.11/site-packages/gradio
但是我用这种方式,下载文件,移动到那个目录下,还是一样报错,报
"Could not create share link. Please check your internet connection or our status page: https://status.gradio.app."
没办法 ,我就用的本地 SSH 的那种方式。
最后,我们打开地址 http://localhost:7860/ 后,就看到如下的界面了
我这里还出现了一个小插曲,我选择好源和目标后,点那个 「start」报如下错误 「INVALID_PROTOBUF : Load model from /root/autodl-tmp/facefusion/.assets/models/arcface_w600k_r50.onnx failed:Protobuf parsing failed.」
整了半天没弄好,把机器重装了也不行,后面我把 arcface_w600k_r50.onnx 这个文件删除一下,再重新下载就行了,就没有这个报错了
文件地址可以在 :https://github.com/facefusion/facefusion-assets 这个工程下面去找。
选择后,就可以看到后台的任务状态了
当 「OUTPUT」看到生成好的换脸视频后,就表示成功了,可以预览,也可以下载下来。
出自:https://mp.weixin.qq.com/s/jQ7Fne7OShuGzqYfN9avaA