本指南旨在为希望扩展Deep-Live-Cam应用程序的新功能或修改现有功能的开发人员提供指导。它侧重于扩展架构、创建自定义帧处理器以及将其集成到系统中。有关通用架构的信息,请参阅技术架构,有关项目结构详情,请参阅项目结构。
Deep-Live-Cam采用模块化插件架构,主要围绕可以串联处理图像和视频的“帧处理器”。该系统旨在允许开发人员创建与现有管道无缝集成的新帧处理器。
来源:modules/processors/frame/core.py10-18 modules/core.py178-194
要创建兼容的帧处理器,您的模块必须实现特定的接口。帧处理器通过Python的导入系统在运行时动态加载。
每个帧处理器模块都必须实现这些必需的方法
来源:modules/processors/frame/core.py12-18
| 方法 | 目的 | 返回值 |
|---|---|---|
pre_check() | 验证环境,下载模型 | bool (如果检查通过则为 True) |
pre_start() | 在处理开始前验证输入 | bool (准备开始则为 True) |
process_frame() | 处理单个帧 | 处理后的帧 |
process_image() | 处理单个图像文件 | 无 |
process_video() | 处理视频帧 | 无 |
来源:modules/processors/frame/face_swapper.py30-38 modules/processors/frame/face_swapper.py41-55 modules/processors/frame/face_swapper.py101-119 modules/processors/frame/face_swapper.py241-254 modules/processors/frame/face_swapper.py257-264
请按照以下步骤创建新的帧处理器
modules/processors/frame/ 目录中创建一个新的 Python 文件这是一个新帧处理器的模板
来源:modules/processors/frame/face_swapper.py1-25 modules/processors/frame/face_swapper.py30-55 modules/processors/frame/face_swapper.py213-238
帧处理器由系统自动注册和加载。无需显式注册——系统使用Python的导入系统动态加载处理器。
来源:modules/processors/frame/core.py21-31 modules/processors/frame/core.py33-41 modules/core.py178-194
您的处理器可以访问和修改在 modules.globals 中定义的全局配置。主要配置选项包括:
| 配置 | 目的 | 类型 |
|---|---|---|
execution_providers | 硬件加速提供者 | 列表 |
many_faces | 处理帧中的多个面部 | 布尔值 |
map_faces | 将特定源面部映射到目标面部 | 布尔值 |
keep_fps | 保持原始视频帧率 | 布尔值 |
keep_audio | 在处理后的视频中保留音频 | 布尔值 |
fp_ui | 帧处理器的 UI 状态 | 字典 |
要为您的处理器添加 UI 集成
来源:modules/core.py63-82 modules.core.py84-88
Deep-Live-Cam 对模型管理进行了标准化。请遵循以下实践:
models/ 目录中pre_check() 中使用 conditional_download() 下载缺失的模型模型加载示例
来源:modules/processors/frame/face_swapper.py30-38 modules/processors/frame/face_swapper.py58-67 models/instructions.txt
下图显示了您的自定义处理器如何集成到帧处理管道中
来源:modules/processors/frame/core.py79-84 modules/core.py178-194
系统使用多线程并行处理帧。您的处理器应处理这些注意事项:
来源:modules/processors/frame/face_swapper.py20-21 modules/processors/frame/face_swapper.py58-67 modules/processors/frame/core.py69-76
为了使您的处理器可以通过命令行使用,请确保它包含在 modules/core.py 文件中的 --frame-processor 参数选项中。
这是一个简单的处理器示例,可以模糊检测到的面部周围的背景
modules/processors/frame/background_blur.py实现将包括
常见问题和解决方案
modules.globals.execution_providers 通过硬件加速。update_status("Message", NAME)torch.cuda.empty_cache() 释放 GPU 资源来源: modules/processors/frame/face_swapper.py modules/core.py173-176 modules/core.py162-160
如果您的处理器需要额外的依赖项,请将其添加到 requirements.txt 文件中。如果依赖项仅由您的特定处理器使用,请考虑将其设为可选。
来源: requirements.txt