基于 DeepFaceLive 深度优化:TensorRT 推理加速、虚拟摄像头直连、DirectML 老显卡支持、流水线防卡死。同样的硬件,跑出更爽的体验。
不再被复杂参数劝退,不再为一次更新提心吊胆。DeepFaceLive_Zha 把技术细节藏进后台,只把简单、稳定、高质量的体验交到你手里。
RTX 显卡自动启用 TensorRT,推理速度提升 1.5-3 倍。引擎加密缓存,二次启动秒级就绪。
内置 OBS Virtual Camera 和 UnityCapture 支持,一键输出到直播软件。无需额外配置,即连即用。
DirectML 后端支持,GTX 550 Ti 等老 N 卡、A 卡、核显都能用 GPU 推理,不再强制降级 CPU。
30 秒超时保护机制,下游停止时自动恢复,避免长时间运行后界面卡死。直播更稳定。
新增 9 维度美颜面板(瘦脸/大眼/美白等),加上眼/嘴/牙动态保留,换脸更自然。
30 种分辨率档位含 13 种竖屏,YY开播/OBS/采集卡专项适配,黑屏自动重连。
我们把底层复杂的工程问题逐个解决,同时对用户看得见摸得着的环节下足功夫。
原版仅支持 CUDA 和 DirectML。DeepFaceLive_Zha 新增 TensorRT 支持,RTX 20 系及以上显卡自动启用,推理速度提升 1.5-3 倍。
原版需要额外配置虚拟摄像头,DeepFaceLive_Zha 内置 OBS Virtual Camera 和 UnityCapture 支持。选择后端、点开始,直接输出到直播软件。
原版仅支持 CUDA。DeepFaceLive_Zha 新增 DirectML 后端,GTX 550 Ti 等老 N 卡、A 卡、I 卡都能用 GPU 推理。自动选择最佳后端,无需手动折腾。
原版只有基础的面具融合。DeepFaceLive_Zha 新增 9 维度美颜面板(美白/瘦脸/大眼/下巴/颧骨/额头等)和眼睛/嘴巴/牙齿动态保留,换脸更像"本来就是你"。
保留原版优秀推理能力的同时,把用户每天会遇到的痛点逐个修掉。
基于官方原版 DeepFaceLive_NVIDIA_build_05_04_2023 与 DeepFaceLive_Zha 实际源码逐文件对比,仅列出面向最终用户可感知的差异点。开发侧的 BUG 修复、代码重构、类型注解等不在此列。
原版仅支持 CUDA 和 DirectML 两种执行提供者。DeepFaceLive_Zha 新增 TensorRT 后端,RTX 20 系及以上显卡自动启用 TRT FP32 推理,实测换脸帧率提升 1.5-3 倍。
def InferenceSession_with_device(onnx_model, device_info): device_ep = device_info.get_execution_provider() ep_flags = {} if device_ep in ['CUDAExecutionProvider']: ep_flags['device_id'] = device_info.get_index() sess = rt.InferenceSession(onnx_model, providers=[(device_ep, ep_flags)]) return sess
providers = [
('TensorrtExecutionProvider', trt_options),
('CUDAExecutionProvider', cuda_options),
]
if allow_cpu_fallback:
providers.append(
('CPUExecutionProvider', {}))
# TRT 失败自动回退 CUDA → CPU
原版 CUDA EP 仅设置 device_id,使用默认配置导致显存浪费和首次启动慢。DeepFaceLive_Zha 精细调优 CUDA EP 参数。
原版每帧 sess.run() 都会分配/释放 CUDA 输入输出缓冲区。DeepFaceLive_Zha 新增 _FixedIOBinding 类,复用预分配缓冲区,避免每帧 cudaMalloc/cudaFree 开销(约 0.5-2ms/帧)。
原版使用 NxN 二维核做高斯模糊。DeepFaceLive_Zha 改为两次 1D 卷积(水平 + 垂直),运算量大幅降低。以 sigma=5(kernel size=21)为例,从 441 次/像素降至 42 次/像素,约 10 倍运算量降低。
def gaussian_blur(input_t, sigma): kernel_t = Tensor.from_value( _make_gaussian_kernel(sigma)) # NxN 二维核 return depthwise_conv2D( input_t, kernel_t) # 21x21 = 441 次/像素
kernel_1d = _make_gaussian_kernel_1d(sigma) kernels = ( Tensor.from_value(kernel_1d.reshape((1,-1))), # 1xN Tensor.from_value(kernel_1d.reshape((-1,1)))) # Nx1 intermediate = depthwise_conv2D(input_t, kernels[0]) return depthwise_conv2D(intermediate, kernels[1]) # 21+21 = 42 次/像素
原版对每一张人脸单独调用关键点模型推理(串行)。DeepFaceLive_Zha 把同一帧里的多张人脸堆叠成 batch 一次性推理,多人同框直播场景帧率更稳。默认开启,可用环境变量 DFL_MARKER_BATCH=0 关闭。
原版仅支持窗口预览、保存序列、RTMP 推流,无虚拟摄像头支持。DeepFaceLive_Zha 基于 pyvirtualcam 实现 OBS Virtual Camera 和 UnityCapture 双后端,直播平台直接选择虚拟摄像头即可。
# 仅支持窗口/推流/保存 cs.source_type.set_choices(SourceType) # 无 virtualcam_backend 控件 # 无 pyvirtualcam 导入
class VirtualCamBackend(IntEnum): NONE = 0; OBS = 1; UNITYCAPTURE = 2 class VirtualCamFPS(IntEnum): AUTO = 0; FPS_25 = 25; FPS_30 = 30 FPS_45 = 45; FPS_60 = 60 import pyvirtualcam
原版推流为同步阻塞写入,ffmpeg stdin 写入阻塞会卡住合成线程,异常被静默吞掉。DeepFaceLive_Zha 重写为独立 writer 线程 + latest-frame 帧替换策略。
原版无音画同步功能。DeepFaceLive_Zha 新增 FaceSoundPicture 模块,解决直播换脸场景下"声音比口型快/慢"的音画不同步问题。视频帧直接透传,仅处理音频延迟。
原版仅 7 种横屏分辨率。DeepFaceLive_Zha 扩展到 30 种,新增 13 种竖屏分辨率(如 1080x1920),手机竖屏直播用户可直接选择,无需手动旋转。
原版单次打开失败即放弃,掉线后画面卡死。DeepFaceLive_Zha 新增多重后备机制和黑屏检测自动重连。
原版无特殊设备识别。DeepFaceLive_Zha 专门适配直播常见设备,自动选择最稳定的抓取方式。
原版无美颜功能。DeepFaceLive_Zha 新增完整实时美颜模块,基于人脸关键点 + 图像变形 + LAB 颜色空间调整实现,相当于把抖音/快手的美颜面板嫁接到 DFLive。
原版 FaceMerger 只有基础面具融合参数。DeepFaceLive_Zha 新增眼睛、嘴巴、牙齿动态保留机制,换脸结果保留原始眨眼、说话、笑容等动态细节。
原版仅支持 CUDA。DeepFaceLive_Zha 新增统一 ORT 后端选择层,支持 CUDA / DirectML / CPU 三种后端自动选择。GTX 550 Ti 等老 N 卡(CUDA CC < 6.0)、A 卡、I 卡都能用 GPU 推理。
原版仅按设备索引顺序排列。DeepFaceLive_Zha 新增综合算力评分,自动选择性能最强的 GPU 作为默认。同时插 1660Ti + 4070Ti 会自动选 4070Ti。
原版每次显存接近目标值都会触发 OpenCL kernel 重新编译(单次 100ms-1s),导致周期性卡顿。DeepFaceLive_Zha 仅释放缓冲池,kernel 保持 warm,仅在真实分配失败时才销毁 kernel。
def _keep_target_memory_usage(self): if targ != 0 and total >= targ: self.cleanup_cached_kernels() # ⚠ 销毁所有 self._release_random_pooled_buffers() # 下帧需重新编译 kernel: 100ms-1s
def _keep_target_memory_usage(self): if targ != 0 and total >= targ: # Keep compiled kernels warm self._release_random_pooled_buffers() # 仅真实分配失败才销毁 kernel
多维度稳定性保护,覆盖运行、启动、关闭全流程。
原版模块崩溃时只会"图标变红、面板隐藏",用户完全不知道发生了什么。DeepFaceLive_Zha 自动从异常堆栈中提取关键信息,弹出标题为"模块运行错误"的中文对话框。
启动 300ms 后检测显卡是否支持 TensorRT,若支持且未确认过,弹出 Information 弹窗:"显卡支持 RTR 优化,首次加载模型需要转换 1-3 分钟。"避免新用户误以为程序卡死。
原版 FPSCounter 用 N 个采样点除以时间差(len/div),多算一帧,30fps 实际显示约 60fps。DeepFaceLive_Zha 修正为 (len-1)/div,并使用 time.perf_counter() 单调时钟,NTP 校时不再导致 FPS 跳变。
def step(self): steps.append(datetime.now().timestamp()) if len(steps) >= 2: return len(steps) / div # ⚠ 多算 1 # 30fps 显示 60fps
def step(self): steps.append(time.perf_counter()) # 单调时钟 if len(steps) >= 2: return (len(steps)-1) / div # 30fps 显示 30fps
多项界面交互改进,提升用户操作体验。
原版使用 .dfm 明文模型,可自由共享。DeepFaceLive_Zha 改为 .zha 加密格式 + HWID 硬件绑定 + 在线授权,必须通过官方启动器登录授权后才能加载模型。
原版有 FaceAnimator 模块(基于音频驱动口型开合、驱动表情动画)。DeepFaceLive_Zha 已移除该模块,不再支持表情动画驱动。如需口型对齐,可用 FaceSoundPicture 做被动音频延迟对齐。
原版 StreamOutput 有 target_delay 控件(0-5000ms 输出缓冲延迟,用延迟换稳定性)。DeepFaceLive_Zha 移除该控件,追求最低延迟(适合实时直播),但失去了用延迟换稳定的选项。