Avatarify Python 视频会议数字人实战指南:从安装部署到 First Order Motion Model 驱动原理
2026/9/21 15:06:47 网站建设 项目流程

Avatarify Python 视频会议数字人实战指南:从安装部署到 First Order Motion Model 驱动原理

【免费下载链接】avatarify-pythonAvatars for Zoom, Skype and other video-conferencing apps.项目地址: https://gitcode.com/gh_mirrors/ava/avatarify-python

导读

Avatarify Python 是一个开源的照片级真实感数字人(Photorealistic Avatar)项目,它把经典的 First Order Motion Model 图像动画算法与虚拟摄像头技术结合起来,让你在 Zoom、Skype、Teams、Slack 等任意可切换视频源的会议软件中,用自己的面部动作实时驱动任意一张静态人像(名人、StyleGAN 生成的不存在之人,乃至你自己的照片)。本指南完整覆盖该仓库 README.md 与 安装文档 的全部内容,并深入 afy/ 源码层,讲解本地 GPU 与远程 GPU 两种运行模式、三平台安装步骤、完整键盘控制集、头像对齐技巧,以及模型推理管线的底层实现。读完你将能够独立完成 Avatarify Python 的部署、调参、运行与问题排查。

提示:Avatarify Python 需要手动下载并安装一些依赖,适合具备基础命令行经验的用户。若你希望开箱即用,仓库维护者更推荐使用图形界面的 Avatarify Desktop 版本;本文档仍以 Avatarify Python 为主线展开。

一、项目定位与两种运行模式

Avatarify Python 基于 First Order Motion Model(一阶运动模型)实现——该算法仅需一张静态源图与一段驱动视频,即可通过关键点(keypoint)与局部仿射变换(Jacobian)的迁移生成高度逼真的人脸动画。项目在仓库根目录 README.md 中明确说明这一点,整个推理核心正是围绕该模型展开。

根据 安装文档 的 Requirements 一节,Avatarify 支持两种运行模式:

  • 本地模式(locally):在你的电脑上直接跑完整推理,需要一块支持 CUDA 的 NVIDIA 显卡;没有 NVIDIA GPU 时会回退到 CPU,速度极慢。
  • 远程模式(remotely):把繁重的神经网络推理放到 Google Colab 或带 GPU 的专用服务器上,本机只负责采集摄像头画面并显示合成视频流。此模式对电脑本身没有特殊要求,仅需稳定的网络连接。

无论哪种模式,你都需要一个可用的摄像头(webcam)——它是驱动头像的"输入设备"。

二、系统要求与硬件基线

安装文档给出了本地模式在部分 NVIDIA 显卡上的性能基线(帧率数据来自官方文档的实测记录,实际表现会因驱动、分辨率与后台负载而异):

显卡帧率(fps)
GeForce GTX 1080 Ti33
GeForce GTX 107015
GeForce GTX 9509
  • 无 NVIDIA GPU 时,PyTorch 会回退到 CPU,官方 FAQ 明确说明性能会大幅下降(<1 fps),MacBook 用户尤其会感受到这一点——Mac 笔记本普遍没有 CUDA 显卡。
  • 没有 NVIDIA GPU 又想流畅运行,官方给出的路线是远程模式:把推理任务卸载到 Colab 或远程 GPU 服务器,笔记本只负责视频流的收发。

三、安装部署(Install)

3.1 下载网络权重

无论哪种平台,第一步都是下载模型权重文件vox-adv-cpk.pth.tar(约 228 MB,md5sum8a45a24037871c045fbb8a6a8aa95ebc)。权重文件从安装文档提供的公开下载渠道获取后,直接放置在仓库根目录(avatarify-python 目录)下,不要解压。该文件名与 run.sh 中FOMM_CKPT=vox-adv-cpk.pth.tar的约定一一对应,启动脚本会在该路径下加载检查点。

3.2 Linux 安装

Linux 通过v4l2loopback内核模块创建虚拟摄像头。安装步骤如下:

  1. 下载并安装 [Miniconda Python 3.7]:
bash Miniconda3-latest-Linux-x86_64.sh
  1. 克隆仓库并执行安装脚本(需要 sudo 权限):
git clone https://gitcode.com/gh_mirrors/ava/avatarify-python.git cd avatarify-python bash scripts/install.sh
  1. 下载网络权重并放入仓库根目录。

来看 scripts/install.sh 究竟做了什么,它能帮你理解依赖结构:

  • 先校验condagit是否可用;
  • 克隆并编译安装v4l2loopbackmake && sudo make install),这是虚拟摄像头的内核基础;
  • 创建名为avatarify的 conda 环境(Python 3.7),环境名与 scripts/settings.sh 中CONDA_ENV_NAME=avatarify对应;
  • 安装numpy==1.19.0scikit-imagepython-blosc==1.7.0以及pytorch==1.7.1torchvisioncudatoolkit=11.0
  • 克隆 First Order Motion Model 实现到fomm/子目录;
  • 执行 requirements.txt 安装其余 Python 依赖:opencv-python==4.2.0.34(视频采集)、face-alignment==1.3.3(人脸关键点检测)、pyzmq==20.0.0(远程模式消息传输)、msgpack-numpy(张量序列化)、pyyaml(配置解析)、requestspyfakewebcam==0.1.0(Linux 虚拟摄像头写入)。

3.3 Mac 安装

Mac 平台使用 CamTwist 创建虚拟摄像头:

  1. 安装 Miniconda Python 3.7(或通过 Homebrew Cask:brew install --cask miniconda);
  2. 下载/克隆仓库并运行安装脚本:
git clone https://gitcode.com/gh_mirrors/ava/avatarify-python.git cd avatarify-python bash scripts/install_mac.sh
  1. 下载并安装 CamTwist。

注意:在 Mac 上 Avatarify 只能通过 Google Colab 或带 GPU 的专用服务器(远程模式)运行——这是官方文档的明确说明,原因是 Mac 缺少 CUDA 显卡。

3.4 Windows 安装

Windows 指南针对 Windows 10 测试通过,核心链路是"Avatarify 输出窗口 + OBS Studio + VirtualCam 插件":

  1. 安装 [Miniconda Python 3.8];
  2. 安装 [Git];
  3. 打开 Anaconda Prompt,逐条执行(不要改动命令):
git clone https://gitcode.com/gh_mirrors/ava/avatarify-python.git cd avatarify-python scripts\install_windows.bat
  1. 下载权重文件放入仓库根目录;
  2. 运行run_windows.bat。安装成功后会出现 "cam" 和 "avatarify" 两个窗口,保持它们打开;
  3. 安装 OBS Studio 与 VirtualCam 插件(选择 "Install and register only 1 virtual camera");
  4. 运行 OBS Studio → Sources 添加 Windows Capture,窗口选择 "[python.exe]: avatarify",随后 Edit → Transform → Fit to screen;
  5. OBS 菜单 Tools → VirtualCam,勾选 AutoStart、Buffered Frames 设为 0,点击 Start;
  6. 此时 Zoom 等软件中即可选择OBS-Camera摄像头。步骤 10-11(OBS 配置)只需在首次设置时执行一次。

Windows 的安装脚本与配置文件对应关系:run_windows.bat对应启动入口,scripts/settings_windows.bat中维护摄像头索引等设置。

3.5 Docker 方式(仅 Linux)

Docker 镜像只在 Linux 上提供。部署步骤:

  1. 按 Docker 官方文档安装 Docker,并配置非 root 用户权限;
  2. 使用 GPU(强烈建议):安装 NVIDIA 驱动与 nvidia-docker;
  3. 克隆仓库并安装依赖(即 v4l2loopback 内核模块):
git clone https://gitcode.com/gh_mirrors/ava/avatarify-python.git cd avatarify-python bash scripts/install_docker.sh
  1. 构建镜像:
cd avatarify-python docker build -t avatarify .

scripts/install_docker.sh 与 install.sh 的区别在于它只安装 v4l2loopback 内核模块,Python 环境全部封装进镜像。仓库根目录的 Dockerfile 揭示了镜像内容:基础镜像为nvcr.io/nvidia/cuda:10.0-cudnn7-runtime-ubuntu18.04,默认 Python 3.7,镜像内克隆了 avatarify 与 fomm 源码并固定 commit,pip安装 PyTorch CUDA 10.0 wheel 与两份 requirements;暴露 5557/5558 两个端口(远程 worker 的输入/输出通信端口),默认 CMD 以--is-worker模式启动——也就是说 Docker 镜像默认就是一台"远程 GPU worker",与 afy/arguments.py 中--is-worker--in-port--out-port的参数设计完全对应。

四、添加自定义头像(Setup avatars)

仓库自带一批名人头像,位于 avatars/ 目录(einstein.jpg、eminem.jpg、jobs.jpg、mona.jpg、obama.jpg、potter.jpg、ronaldo.png、schwarzenegger.png 等),开箱即用。想扩充头像库非常简单:把任意人像图片复制进avatars文件夹即可,运行时可随时用键盘热键切换。

官方文档给出了三条提升画面质量的头像图片建议:

  • 对头像图片做正方形裁剪
  • 人脸在画面中的占比要适中——不要太近也不要太远,以自带标准头像为参考;
  • 优先选择背景均匀的照片,可显著减少合成时的视觉伪影(artifacts)。

五、运行 Avatarify(Run)

运行前必须插好摄像头。官方强调:务必在 Avatarify 启动之后再启动视频会议软件,这样会议软件才能正确枚举到虚拟摄像头。

5.1 Linux

bash run.sh
  • 运行脚本会自动创建虚拟摄像头/dev/video9,相关配置在 scripts/settings.sh 中:CAMID_VIRT=9(虚拟摄像头设备号,注释特别提醒:该值必须大于v4l2-ctl --list-devices列出的最大设备号,但不要设得过大——已知 Zoom 无法识别类似 99 这样的高设备号)、CONDA_ENV_NAME=avatarify(conda 环境名)。
  • 可用v4l2-ctl --list-devices查看系统所有视频设备。
  • 没有安装 GPU 时加--no-gpus标志;想用 Docker 运行加--docker标志。

启动后会出现两个窗口:cam窗口用于控制你的面部位置(对齐参考),avatarify窗口用于预览头像动画效果。随后参照下文"驱动你的头像"小节进行操作。

5.2 Mac

由于 Mac 无法本地推理,运行流程为:

  1. 先按 Google Colab 或专用服务器的方式启动远程推理端(在 Mac 上 Avatarify 只支持远程模式);
  2. 打开 CamTwist;
  3. 选择Desktop+并点击Select
  4. 在 Settings 中选择Confine to Application Window,并在下拉菜单里选中python (avatarify)窗口。

同样会弹出camavatarify两个窗口。

5.3 Windows

cd C:\path\to\avatarify run_windows.bat

随后运行 OBS Studio,它会自动把 Avatarify 的画面推流到OBS-Camera虚拟摄像头。降低延迟技巧:在 OBS 预览窗口上右键,取消勾选 Enable Preview。

5.4 run.sh 深度解析:启动参数与调用链

run.sh 是 Linux 启动的核心入口,其参数解析逻辑值得展开(源码可查):

run.sh 参数作用透传效果
--no-conda跳过 conda 环境激活(适用于已手动激活环境的情况)
--no-vcam跳过虚拟摄像头创建,并向程序透传--no-stream强制不输出视频流
--keep-ps不 kill 掉残留的afy/cam_fomm.py进程
--docker改用 docker run 方式启动自动附加 GPU 运行时参数
--no-gpusDocker 模式不使用 GPU跳过--gpus all/--runtime=nvidia
--is-worker以远程 worker 身份启动透传,Docker 下映射 5557/5558 端口
--is-client/--is-local-client以客户端身份启动透传,Docker 下设置网络模式

非 Docker 路径下,脚本会先 kill 残留进程,source scripts/settings.sh,调用 scripts/create_virtual_camera.sh 执行sudo modprobe v4l2loopback exclusive_caps=1 video_nr=$CAMID_VIRT card_label="avatarify"创建虚拟摄像头,激活 conda 环境,最终以如下参数启动推理主程序(见 afy/cam_fomm.py):

python afy/cam_fomm.py \ --config fomm/config/vox-adv-256.yaml \ --checkpoint vox-adv-cpk.pth.tar \ --virt-cam 9 \ --relative \ --adapt_scale

注意--relative(相对关键点坐标)与--adapt_scale(根据关键点凸包自适应运动幅度)默认开启,这是获得自然动画的两个关键开关,对应 afy/predictor_local.py 中normalize_kp()use_relative_movementadapt_movement_scale逻辑。

六、键盘控制全集(Controls)

官方文档给出了完整的控制键位表,运行时可通过这些热键实时操控:

键位功能
1-9立即切换前 9 个头像
Q开启 StyleGAN 生成头像(按下即采样一个"从未存在过的人",每次按下换一个新面孔)
0切换头像显示开/关
A / D上一个/下一个头像(按文件夹顺序)
W / S摄像头画面放大/缩小
U / H / J / K平移摄像头画面:H-左、K-右、U-上、J-下,每次 5 像素;按住 Shift 则每次 1 像素
Shift-Z重置摄像头缩放与平移
Z / C调节头像目标叠加层(overlay)透明度
X重置参考帧(以当前帧为新的驱动参考)
F切换参考帧自动搜索模式
R镜像参考窗口
T镜像输出窗口
L重新加载头像列表(新增头像后无需重启)
I显示 FPS
O切换人脸检测叠加层
ESC退出

七、驱动你的头像:对齐与参考帧原理

这是获得高质量动画效果的关键章节。官方文档给出的核心原则:

  1. 对齐:在cam窗口中,尽可能让你的脸在比例和位置上与目标头像对齐。使用 W/S 缩放、U/H/J/K 平移来微调。对齐满意后按X,以当前帧作为参考帧(reference frame)来驱动后续整个动画。
  2. 表情匹配:使用图像叠加层(Z/C 键)或人脸检测叠加层(O 键)来尽量对齐你与头像的面部表情。

进阶:参考帧自动搜索(F 键)。手动对齐不理想时,可以按 F 让程序自动寻找更优的参考帧。代价是帧率会下降,但搜索期间你可以继续转动头部——当程序发现你的面部姿态与头像的匹配度高于当前参考帧时,预览窗口会闪烁绿色提示。屏幕上还会显示两个数字:第一个是你当前与头像的对齐程度,第二个是当前参考帧的对齐程度。让第一个数字尽量小,10 左右通常就是很好的对齐状态。完成后再按 F 退出搜索模式。

官方同时说明:不需要做到完全精确,某些非标准配置也可能取得更好效果,以上只是良好的起点。

从源码看,这一机制对应 afy/predictor_local.py 中的状态管理:start_frame/start_frame_kp记录参考帧及其关键点,set_source_image()通过kp_detector(FOMM 的关键点检测器)提取源图关键点kp_source,驱动过程中normalize_kp()计算kp_driving相对kp_driving_initial位移差kp_value_diff),叠加到源关键点上,并用源/驱动关键点凸包面积之比(ConvexHull(...).volume开方)做运动幅度自适应缩放——这正是--relative--adapt_scale两个参数在推理层的具体实现,也是"参考帧对齐质量决定动画自然度"这一经验的数学根源。

八、配置视频会议软件

Avatarify 输出的是一个虚拟摄像头,因此任何允许更换视频输入源的会议软件都能接入(Zoom、Skype、Hangouts、Slack 等)。不同平台使用的虚拟摄像头名称不同:

平台虚拟摄像头名称
Linuxavatarify(v4l2loopback,card_label 即 "avatarify")
MacCamTwist(Desktop+ 捕获 avatarify 窗口)
WindowsOBS-Camera(OBS VirtualCam 插件)

各主流软件的接入方式:

  • Skype:设置 → 音频和视频,选择avatarify(Linux)、CamTwist(Mac)或OBS-Camera(Windows)摄像头。
  • Zoom:设置 → 视频,在 Camera 下拉菜单中选择对应虚拟摄像头。
  • Teams:头像 → 设置 → 设备,在 Camera 下拉菜单中选择。
  • Slack:发起通话,允许浏览器使用摄像头,点击设置图标,在 Video settings 下拉菜单中选择。

九、源码级原理:本地推理管线与远程传输

9.1 推理主程序与命令行参数

程序入口为 afy/cam_fomm.py,所有命令行参数在 afy/arguments.py 中集中定义,完整参数表如下(默认值均取自源码):

参数默认值说明
--configFOMM 模型配置文件路径
--checkpointvox-cpk.pth.tar权重检查点路径(本地运行实为vox-adv-cpk.pth.tar
--relativeFalse(关闭)使用相对/绝对关键点坐标,run.sh 默认开启
--adapt_scaleFalse(关闭)基于关键点凸包自适应运动幅度,run.sh 默认开启
--no-padFalse不对输出图像做 padding
--enc_downscale1.0编码器输入下采样倍数,牺牲少量画质换取性能提升
--virt-cam0虚拟摄像头设备 ID(Linux)
--no-streamFalseLinux 下强制不输出视频流
--verboseFalse打印额外调试信息
--hide-rectFalse隐藏预览窗口中的辅助矩形
--avatars./avatars头像目录路径
--is-workerFalse作为远程 GPU worker 进程运行
--is-clientFalse作为客户端运行
--in-port5557远程 worker 输入端口
--out-port5558远程 worker 输出端口
--in-addrNone入站消息 socket 地址,如example.com:5557
--out-addrNone出站消息 socket 地址,如example.com:5558
--jpg_quality95视频帧 JPEG 压缩质量(远程传输用)

源码中的校验逻辑值得注意:--is-client启动时,必须同时提供--in-addr--out-addr,否则直接抛出ValueError——这是远程模式下客户端与 worker 建立连接的强制约束。

9.2 模型加载与推理

afy/predictor_local.py 中的PredictorLocal类展示了完整的模型装配过程:

  • load_checkpoints()从 YAML 配置读取model_params,实例化 FOMM 的OcclusionAwareGenerator(遮挡感知生成器)与KPDetector(关键点检测器),再用检查点中的generatorkp_detector键加载权重并置为 eval 模式;
  • 设备选择逻辑为device or ('cuda' if torch.cuda.is_available() else 'cpu')——与文档"无 NVIDIA GPU 自动回退 CPU"的描述一致;
  • 同时初始化face_alignment.FaceAlignment(2D 关键点,flip_input=True)用于实时人脸姿态对齐与参考帧搜索打分(对应 F 键功能);
  • 输入图像经to_tensor()归一化(/255、NCHW 布局)后送入kp_detector提取关键点。

9.3 摄像头选择与全局配置

仓库根目录的 config.yaml 控制摄像头枚举行为:

# how many cameras to query at the first start query_n_cams: 4 # camera configuration path cam_config: ./cam.yaml

query_n_cams: 4表示首次启动时最多探测 4 个摄像头设备;cam_config指向./cam.yaml(该文件由程序运行时生成/维护,用于持久化摄像头选择)。摄像头探测与多设备选择逻辑在 afy/camera_selector.py 与 afy/videocaptureasync.py 中实现,后者提供了异步视频帧读取封装,避免摄像头帧读取阻塞推理主循环。

9.4 远程模式网络架构

仓库通过afy/下多个模块实现了完整的远程 worker/client 架构:worker 端为 afy/predictor_worker.py,客户端为 afy/predictor_remote.py,底层通信基于 afy/networking.py 的 ZMQ(pyzmq)消息封装,帧数据经msgpack-numpy序列化、JPEG(--jpg_quality控制压缩比)编码后传输。这与 Dockerfile 暴露的 5557/5558 端口、arguments.py 的--in-port/--out-port/--in-addr/--out-addr参数形成闭环:远程 GPU 服务器以--is-worker监听 5557/5558,本地客户端以--is-client携带地址参数连接,笔记本因此可以完全不依赖本地 GPU。官方文档还提供了基于 ngrok/SSH 的公网隧道脚本(scripts/open_tunnel_ngrok.sh、scripts/open_tunnel_ssh.sh),用于打通云端 worker 与本机客户端的网络通道。

十、FAQ 精选

Q:运行 Avatarify 需要编程知识吗?A:不需要真正编程,但需要基本的命令行操作经验(Windows 用户可按官方视频教程操作)。

Q:为什么在我的 MacBook 上运行很慢?A:模型需要 CUDA 显卡执行重计算,MacBook 没有这类 GPU,只能回退到 CPU,算力不足以流畅运行。

Q:没有 NVIDIA GPU 能运行吗?A:能,但性能会骤降(<1 fps)。推荐改用 Google Colab 或远程 GPU 服务器的远程模式。

Q:如何添加新头像?A:把头像图片放入avatars文件夹即可(详见上文"添加自定义头像"一节)。

Q:头像看起来扭曲变形?A:需要校准面部位置,按上文"驱动你的头像"的对齐技巧操作(对齐后按 X 设置参考帧)。

Q:可以用在商业用途吗?A:不可以。Avatarify 与 First Order Motion Model 均采用 Creative Commons 非商业(Non-Commercial)许可,禁止商业使用。

Q:支持哪些视频会议软件?A:任何能更换视频输入源的软件都支持(Zoom、Skype、Hangouts、Slack 等),因为它本质是一个虚拟摄像头。

十一、卸载与故障排查

  • 卸载:官方 Wiki 提供了完整的 Avatarify 及相关程序(v4l2loopback、OBS 插件等)移除指引。
  • 故障排查:若程序崩溃,先在官方 Wiki 的 Troubleshooting 页面查找错误;找不到再检索项目 issues;仍无解可基于 issue 模板新建问题反馈。

结语

Avatarify Python 的价值在于把 First Order Motion Model 的研究成果封装成了普通人可用的实时视频会议工具:--relative+--adapt_scale的默认组合保证了自然的表情迁移,v4l2loopback / CamTwist / OBS-VirtualCam 三套虚拟摄像头方案覆盖了 Linux / Mac / Windows 全平台,而 ZMQ 远程架构则让无 GPU 用户也能通过云服务器获得流畅体验。本文所涉及的配置、脚本与源码均可直接在仓库中查阅验证,动手跑通一遍run.sh,再配合 X/F 键掌握参考帧技巧,你就能在下一场会议中以数字分身出场了。

【免费下载链接】avatarify-pythonAvatars for Zoom, Skype and other video-conferencing apps.项目地址: https://gitcode.com/gh_mirrors/ava/avatarify-python

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询