尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

手机也能跑实时人脸替换:Deep-Live-Cam 跨平台部署与调优实战记录

手机也能跑实时人脸替换:Deep-Live-Cam 跨平台部署与调优实战记录 手机也能跑实时人脸替换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-CamDeep-Live-Cam 凭一张照片就能实时换脸还能直接驱动摄像头做直播。这篇文章拆解它的三段式推理管线和 ONNX 图改写技巧并把 Termux 与 Apple Silicon 两条路都跑通——附你会踩的坑。为什么折腾200ms 的差距让你想往手机上搬PC 上的体验已经很顺滑了一张照片、点下 Live摄像头预览里的脸就被实时替换。但这套东西绑在桌面上——你人在户外、手机就在手边却没法用。差距没网上传的夸张但足够硌人。在中端 Android 上纯 CPU 跑单帧人脸检测就要 30-50ms完整管线检测替换融合叠到 150-300ms桌面独显跑同样的活是 30-80ms。2-5 倍的差体感就是有点卡和流畅的区别。指标移动端中端CPUPC 桌面GPU差距人脸检测单帧30-50 ms5-10 ms3-10 倍完整管线延迟150-300 ms30-80 ms2-5 倍内存占用1-2 GB4-8 GB2-4 倍可持续运行30-60 分钟不限—所以目标不是跑起来而是跑得顺。下面先说它怎么把这笔账算平的再给你自己的搬运动手路径。拆管线检测、替换、贴回三关移动端人脸替换的全部管线代码其实不长一帧画面要闯三关检测modules/face_analyser.py 跑 RetinaFacebuffalo_l640×640 输入拿到人脸框和关键点识别模型同时产出身份 embedding。替换modules/processors/frame/face_swapper.py 把目标脸裁成 128×128 喂给 inswapper_128吐出换好的脸块。融合用羽化椭圆掩码把脸块贴回原帧需要时再过一道 GFPGAN 超分modules/processors/frame/face_enhancer.py。真正的看点不在三关本身而在每一关被派给了哪块硬件。ONNX 当通用货币全项目模型层统一说 ONNX同一个 .onnx 文件在不同芯片上交不同的执行提供器。启动时这段代码做一次谁在谁上的择优# modules/core.py按优先级挑加速器都不行就退回 CPU available encode_execution_providers(onnxruntime.get_available_providers()) for pref in (cuda, rocm, coreml, openvino, dml): if pref in available: return pref return cpu启动 banner 会打印最终选中的加速器——这条日志就是后面排查卡顿的第一检查点。给 Apple Silicon 动图的手术ONNX 是通用货币但 CoreML 后端认账的算子有限不认识的算子Pad(reflect)、Split、标量 Gather会让模型被切段结果在 CPU 和神经引擎之间来回搬运。项目专门写了 modules/onnx_optimize.py加载时跑四遍图改写落盘缓存# modules/onnx_optimize.py每个模型改写一次_coreml 后缀缓存 model onnx.load(model_path) if _fold_shape_gather(model, input_shape): # Shape→Gather 动态链折成常量 changed True if _decompose_reflect_pad(model): # Pad(reflect) 拆成 SliceConcat changed True onnx.save(model, optimized_path) # 存改写后的模型改写之后 inswapper 整个模型能在神经引擎上单分区跑完不用把中间结果甩给 CPU。检测和替换走两条车道更妙的地方在调度Apple Silicon 上检测模型被刻意分到CPUAndGPUGPU 上约 4ms让更重的替换模型独占神经引擎——两次推理用不同的硬件单元并行推进下一帧的检测在当前帧替换结束前就提前开跑# modules/processors/frame/core.py检测与替换流水重叠 pending_detect detect_executor.submit(get_one_face, frame.copy()) ... target_face pending_detect.result() # 取本帧检测结果 pending_detect detect_executor.submit(get_one_face, frame.copy()) # 提前探下一帧这套组合拳下来M3 Max 上的人脸检测从 21ms 压到 4ms——移动端人脸替换的卡感就是从这里被拿掉的。跑通Termux 与 Apple Silicon 两条路AndroidTermux路线pkg install python clang ffmpeg -y git clone --depth 1 https://gitcode.com/GitHub_Trending/de/Deep-Live-Cam cd Deep-Live-Cam python -m venv venv source venv/bin/activate pip install --upgrade pip pip install -r requirements.txt✅ 预期看到依赖装完无报错opencv 与 onnxruntime 均为纯 CPU 构建。⚠️ 坑一Termux 摄像头权限不默认授予先执行termux-setup-camera弹窗授权再重启 Termux否则开摄像头直接黑屏。⚠️ 坑二把 models/instructions.txt 列出的 inswapper_128 与 GFPGANv1.4 两个模型文件放进models/目录首次运行还会自动拉取约 300MB网络不稳就卡死在加载页。python run.py --execution-provider cpu --live-mirror✅ 预期看到GUI 弹出点 Live 后 10-30 秒内实时窗口出现自己的脸。Apple Silicon 路线brew install python3.14 python-tk3.14 python3.14 -m venv venv source venv/bin/activate pip install -r requirements.txt⚠️ 坑如果之前装过 onnxruntime-silicon 分支包先pip uninstall onnxruntime-silicon——它会遮蔽官方包导致 CoreML 提供器消失。python3.14 run.py --execution-provider coreml✅ 预期看到banner 打印accelerator: CoreML (Apple Neural Engine)。若显示accelerator: CPU回去检查 onnxruntime 装的是哪个版本。执行提供器适用硬件启动参数coremlApple M1-M5--execution-provider coremlcudaNVIDIA GPU--execution-provider cudaopenvinoIntel GPU/NPU--execution-provider openvinodirectmlWindows AMD/Intel--execution-provider directmlcpu全平台兜底默认卡了怎么办按掉帧顺序排一遍能跑之后别急着庆祝移动端人脸替换通常是勉强能看。卡了按下面顺序排查1. banner 显示 CPU。最常见原因对应的 onnxruntime 构建没装对静默回退 CPU 了。跑python -c import onnxruntime as o; print(o.get_available_providers())确认提供器列表里有没有你要的那个。2. 前几秒慢随后变顺。那是模型加载 内核预热外加 FP16 / CUDA graph 会话初始化属正常现象。3. 脸边缘抖、闪。贴回掩码每帧重建关键点微小漂移被放大。项目在 face_swapper.py 里做了掩码缓存脸几乎静止时直接复用上一帧的数组_poisson_cached_maskGUI 里还可以开 Poisson blend 平滑接缝。4. 视频批处理太慢。老路径把每帧写成 PNG 再读回磁盘 IO 才是真瓶颈。现在默认走 FFmpeg 管道管线原始帧直接进内存、处理完直喂编码器# modules/processors/frame/core.py读写都走管道零磁盘 reader_cmd [ffmpeg, -i, target_path, -f, rawvideo, -pix_fmt, bgr24, -] writer_cmd [ffmpeg, -f, rawvideo, -s, f{width}x{height}, -c:v, encoder, -y, temp_output_path] raw reader.stdout.read(frame_size) # 解码出当前帧 writer.stdin.write(frame.tobytes()) # 换完写回5. 线程与内存上限。线程数由 core.py 的suggest_execution_threads自动建议DML/OpenVINO 给 1、CUDA 给 2、纯 CPU 给核心数-2--max-memory参数用setrlimit硬限进程内存4GB 内存的机器上不容易被系统杀进程。各设备优化后的效果供你对号入座设备芯片实时帧率内存iPhone 13A1522-25 fps1.2-1.5 GBSamsung S21骁龙 88818-22 fps1.5-1.8 GBPixel 6Tensor G215-18 fps1.3-1.6 GBiPad Pro (M1)M128-32 fps1.8-2.2 GB能拿去干什么红线划在哪跑得顺之后玩法组合其实不少直播面部特效OBS 捕获实时窗口作为虚拟相机推流画面里多人时用 face mapping 给每张大脸绑定不同来源脸。老电影换脸视频模式整片批处理把片里所有面孔换成你的来源图输出存到以目标命名的目录。旧照与短片活化单张照片或短片走图片/视频模式配上 GFPGAN 增强输出细节能看。技术有技术的好玩红线得先划清楚换到真人脸上先拿到本人同意没有商量余地。发布内容必须明确标注是 AI 生成。用于诽谤、诈骗、色情内容属于违法后果自负。项目自带 NSFW 过滤别想着绕过它。收尾从 Termux 到 M3一条移动端实时人脸替换管线你已经完整跑通也看清了 2-5 倍性能差花在哪、又被哪些招数找了回来。下一步建议拿你手边最慢的设备把 banner、帧率、内存三样自己记一份基线再逐个参数动刀看变化。说到底这个项目最值钱的东西是换脸不过是 ONNX、几百行管线代码和几处硬件癖好的副产品。【免费下载链接】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),仅供参考
返回列表