免显卡部署 Deep-Live-Cam:一张照片实现实时换脸的完整指南
【免费下载链接】Deep-Live-Camreal time face swap and one-click video deepfake with only a single image项目地址: https://gitcode.com/GitHub_Trending/de/Deep-Live-Cam
想把手里的照片换进视频或摄像头画面,却被"必须 N 卡 + 配 CUDA 环境"劝退?Deep-Live-Cam 是一条换脸路线里少有的例外:它基于 onnxruntime(推理框架,CPU、GPU 两种后端都能跑)做人脸替换,没有本地显卡时直接用云端免费 Python 环境就能出片。本文覆盖从建环境、装依赖,到首次跑通、排坑和进阶参数调节的全部路径,前提是你会在网页里敲几行命令,不需要懂深度学习。
一、先搞懂:为什么没有显卡也能跑
换脸工具常见的门槛来自模型推理只能压在 GPU 上。Deep-Live-Cam 的推理链路全部走 ONNX 格式,CPU 执行后端可以直接承担检测、替换和修复三步计算。代价是帧率不如 GPU 快,收益则是普通云主机(无显卡的那种)就能完成短视频批处理;实时摄像头场景在配置尚可的机器上同样能出预览。它用到的模型分工明确:
- insightface:在每一帧里定位人脸位置和五官坐标的检测模型;
- inswapper_128:真正执行"把 A 脸贴到 B 脸上"的替换模型;
- GFPGAN:对换完的脸做超分辨率修复,消除模糊和拼接痕迹的增强模型。
三条落地路线摆在一起对比,就能看清该选哪条:
| 方案 | 硬件门槛 | 上手成本 | 适合谁 |
|---|---|---|---|
| 本地 + 显卡 | 独立 GPU + CUDA 环境 | 高,环境调试耗时 | 有卡且常跑长视频 |
| 本地无显卡 | 任意 PC | 中,需处理系统依赖 | 有可显示屏幕的电脑 |
| 免费云端平台 | 无,浏览器即可 | 低,装完即用 | 零基础、只想快速出片 |
本文走第三条:云端会话自带 Python 和 ffmpeg(拼接、转码视频的多媒体工具),省掉大半环境搭建,失败重开的成本也接近于零。
二、云端环境三步准备:克隆、装依赖、传素材
图形界面依赖本地屏幕,云端没有显示器——但这恰好不是障碍:项目内置无界面模式,只要给入口命令传入-s(源脸)参数,它就跳过窗口、直接按命令行流程批处理素材,见 参数解析与模式判断逻辑。
2.1 拉取代码并安装推理依赖
新建一个云端 notebook,在单元格里依次执行:
!git clone --depth 1 https://gitcode.com/GitHub_Trending/de/Deep-Live-Cam %cd Deep-Live-Cam !pip install -r requirements.txt--depth 1只取最新一次提交,仓库体积小、速度快;requirements.txt 里列好了 opencv(读写图像和视频帧)、insightface、onnxruntime、PySide6 等全部依赖。
怎么判断成功:输出末尾出现Successfully installed ...,全程没有红色 Traceback。若后续报 ffmpeg 缺失(概率很低),补一行!apt-get install -y ffmpeg即可。
2.2 源脸照片与目标视频怎么准备
素材只需两样,标准如下:
- 源脸(要被贴上去的脸):正脸、光线充足、五官清晰无遮挡,分辨率建议不低于 512×512;
- 目标(被换的脸所在画面):一段视频即可,首次测试别超过 1 分钟。
在 Python 单元格里上传:
from google.colab import files files.upload()点击弹出的文件选择框,依次传入face.jpg和target.mp4。看到输出区出现saved to memory即上传成功。
三、第一次换脸只需一条命令
素材就位后,执行:
!python run.py -s face.jpg -t target.mp4含义拆解:-s指定源脸,-t指定目标视频;音轨保留默认开启,无需额外参数。预期过程分两段——先等模型下载,再等逐帧处理。
3.1 首次运行会自动下载什么
第一次执行时,自动下载器 会把模型拉进models/目录,核心是约 278MB 的inswapper_128_fp16.onnx(换脸模型),外加 buffalo_l 系列检测模型(insightface 的定位权重),总计约 300MB。看到进度条滚动就是正常现象,不用干预。
3.2 成功判定与成品位置
处理跑完后,成品输出到目标视频所在的目录,文件名为源脸名-目标名.扩展名——本例即同目录下的face-target.mp4,规则来自 输出路径归一化函数。用下面的代码把成品拉到本地:
files.download("face-target.mp4")判定成功:本地能播放、画面里目标人物的脸已被源脸替换、口型和头部姿态仍跟随原画面。
电影场景的逐帧替换效果,动图取自项目仓库自带演示
无显卡环境下实际能达到的速度,可参考仓库里普通 PC 的 CPU 实测动图:
仅靠 CPU 推理时的实际运行表现
四、卡住时的排查手册:四个高频故障的现象与解法
4.1 模型下载失败或中途卡死
现象:进度条停在某个百分比,或直接报网络异常。原因:模型约 300MB,云端网络抖动或会话超时都会掐断传输;下载器 会保留.part部分文件并支持断点续传。解法:重跑同一条run.py命令,下载从断点继续;若网络长期不稳,就把inswapper_128_fp16.onnx(及需要的 GFPGAN 模型文件)手动放进models/目录后再执行。
4.2 云端会话超时,视频处理到一半没了
现象:长视频处理中途,页面提示会话已断开。原因:免费云端会话有存活时长上限,长素材往往跑不完。解法:先用 ffmpeg 把视频裁成 30 秒以内的片段分段处理;任务结束立即files.download()拉走成品,别等。新开会话后依赖和模型都还在,续跑很快。
4.3 提示检测不到人脸
现象:日志报出未检测到目标人脸,程序直接终止。原因:绝大多数是源脸照片不合格——光线暗、侧脸角度大、画面模糊或有刘海/口罩遮挡;目标画面中人脸过小或被物体挡住时也会漏检。解法:换一张光线足、角度正、清晰无遮挡的正脸照;若目标画面问题,截取人脸占比较大的片段重试。
4.4 画面里有好几张脸,默认只换了一张
现象:多人同框时,只有其中一张脸被替换。原因:默认策略只处理画面中主脸(最大/最清晰的那张)。解法:追加--many-faces参数,让程序替换全部检测到的人脸:
!python run.py -s face.jpg -t target.mp4 --many-faces五、进阶参数调优:帧率、口型与多脸映射
基础流程跑通后,按需叠加开关即可,不必改任何代码:
| 参数 | 作用 | 适用场景 |
|---|---|---|
--keep-fps | 保持源视频原始帧率 | 对慢放/加速效果敏感时 |
--mouth-mask | 保留目标人物的嘴部区域不替换 | 对话片段,想让口型更自然 |
--map-faces | 给画面中不同人脸分别指定不同源脸 | 多人同框、各换各的 |
-o | 手动指定成品输出路径 | 不想按默认命名规则时 |
--video-quality | 调整输出编码质量(5–51) | 在体积与清晰度间取舍 |
多脸分别映射的实际效果,仓库自带这段直播画面演示:
直播场景中不同人物被替换为不同源脸
六、想继续往下改:核心源码入口
不满足于命令行参数、想改换脸行为本身的读者,按这个路径找入口:
- 实时换脸核心逻辑:参数解析、无界面/图形模式切换、视频批处理主流程都在这里;
- 图形界面:本地装好后直接
python run.py打开窗口,选源脸、选摄像头、点 Live 出预览,再用 OBS 之类工具捕获窗口推流; - 逐帧处理模块:具体的人脸替换在
face_swapper.py,各类修复增强在face_enhancer.py。
摄像头实时模式的画面输出演示
七、合规提醒与下一步
合规底线:使用真人照片必须先取得本人明确同意;对外发布成品时,标注内容属于深度伪造(deepfake)/AI 生成。只处理自己或已授权素材,是最稳妥的做法。
接下来可以试两件事:
- 切回带摄像头的本地电脑,
python run.py进入图形界面跑实时模式,体验"对着镜子换脸"; - 同一段视频分别跑一次带与不带
--mouth-mask,对比口型自然度,决定自己常用哪套参数。
【免费下载链接】Deep-Live-Camreal time face swap and one-click video deepfake with only a single image项目地址: https://gitcode.com/GitHub_Trending/de/Deep-Live-Cam
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考