菜单

人脸映射

相关源文件

人脸映射是 Deep-Live-Cam 中的一项强大功能,它允许用户在人脸交换过程中精确控制将哪些源人脸应用于特定目标人脸。人脸映射并非将单一源人脸应用于所有检测到的人脸或仅应用于第一个检测到的人脸,而是实现了源人脸与目标人脸之间的一对一映射。

有关一般人脸交换过程的信息,请参阅人脸处理。有关不带人脸映射的图像/视频处理的信息,请参阅图像处理视频处理

概述

人脸映射通过允许用户来为面部交换过程增加一层控制,用户可以

  1. 识别目标图像或视频中的多个人脸
  2. 为每个已识别的目标人脸选择特定的源人脸
  3. 在处理过程中应用这些映射以获得更精确的人脸交换结果

此功能在处理包含多个人物的内容时尤其有用,因为它确保了正确的人脸源应用于每个目标人脸。

来源:modules/ui.py260-272 modules/globals.py

启用人脸映射

要使用人脸映射,请激活主界面中的“映射人脸”开关。此开关位于主窗口的左侧列中,“人脸增强器”选项的下方。

启用后,Deep-Live-Cam 将在点击“开始”或“实时”时分析目标图像或视频,以在继续人脸交换过程之前识别所有存在的人脸。

图示:人脸映射激活流程

来源:modules/ui.py260-272 modules/ui.py399-414

人脸映射工作流程

根据您处理的是图像、视频还是网络摄像头,工作流程略有不同。

对于图像

  1. 启用“映射人脸”开关
  2. 选择源图像和目标图像
  3. 点击“开始”
  4. 系统会分析目标图像并显示人脸映射弹出窗口
  5. 对于检测到的目标中的每个人脸,点击“选择源图像”以选择一个人脸源
  6. 点击“提交”以使用映射的人脸进行处理

对于视频

  1. 启用“映射人脸”开关
  2. 选择源图像和目标视频
  3. 点击“开始”
  4. 系统分析视频,使用聚类分析识别所有帧中的唯一人脸
  5. 对于检测到的每个人脸,点击“选择源图像”以选择一个人脸源
  6. 点击“提交”以使用映射的人脸进行处理

对于网络摄像头

  1. 启用“映射人脸”开关
  2. 点击“实时”
  3. 在人脸映射弹出窗口中,点击“添加”以创建映射条目
  4. 为每个映射选择“选择源图像”和“选择目标图像”
  5. 点击“提交”以开始使用映射的人脸进行实时人脸交换

图示:不同输入类型的人脸映射工作流程

来源:modules/ui.py394-414 modules/ui.py417-485 modules/ui.py963-1206

人脸映射用户界面

人脸映射界面在系统分析目标人脸后会显示为一个弹出窗口。它会显示目标中的所有人脸,并允许您为每个人脸选择一个源人脸。

图像/视频映射用户界面

对于图像和视频,系统会自动检测人脸并在映射用户界面中显示它们

  • 每一行代表目标中检测到的人脸
  • 左侧按钮允许您选择源人脸图像
  • 选定的源人脸缩略图显示在“X”符号旁边
  • 目标人脸缩略图显示在右侧
  • 完成后,点击“提交”

网络摄像头映射用户界面

对于网络摄像头模式,您需要手动创建映射

  • 点击“添加”以创建新的映射条目
  • 对于每个条目,选择源图像和目标图像
  • 选定的人脸缩略图显示在相应的位置
  • 使用“清除”删除所有映射
  • 点击“提交”以将映射应用到实时预览

图示:人脸映射用户界面类结构

来源:modules/ui.py417-485 modules/ui.py963-1206

技术实现

人脸映射功能通过多个协同工作的组件实现。

数据结构

人脸映射数据存储在以下结构中

  1. modules.globals.source_target_map:包含映射信息的字典列表
  2. modules.globals.simple_map:在处理过程中使用的简化表示

每个映射条目包含

  • ID:映射的唯一标识符
  • 源:源人脸的信息(图像数据和人脸检测数据)
  • 目标:目标人脸的信息(图像数据和人脸检测数据)
  • 对于视频:有关目标人脸在帧中的出现次数的附加数据

图示:人脸映射数据结构

来源:modules/face_analyser.py41-62 modules/ui.py73-78

人脸检测与分析

人脸映射依赖 InsightFace 库进行人脸检测和特征提取

  1. get_face_analyser():初始化人脸分析模型
  2. get_many_faces():检测帧中的所有人脸
  3. get_unique_faces_from_target_image():提取目标图像中的人脸以进行映射
  4. get_unique_faces_from_target_video():使用聚类分析从视频中提取唯一的人脸

系统存储每个映射人脸的视觉数据(裁剪的人脸)和人脸检测元数据(地标、边界框、嵌入)。

来源:modules/face_analyser.py16-40 modules/face_analyser.py76-189

视频的聚类分析

对于视频,Deep-Live-Cam 使用聚类分析来识别所有帧中的唯一人脸

  1. 从视频的多个帧中提取人脸
  2. 收集人脸嵌入(人脸的数值表示)
  3. 使用 K-means 聚类将相似的人脸分组
  4. 自动确定最佳聚类数量
  5. 将每个检测到的人脸分配给最近的质心
  6. 在映射用户界面中展示每个聚类的代表性面孔

图示:视频人脸聚类过程

来源:modules/cluster_analysis.py7-32 modules/face_analyser.py97-169

人脸映射处理

启用人脸映射进行处理时,系统将使用以下工作流程

  1. 对于图像

    • 遍历每个映射条目
    • 将映射的源人脸应用于相应的目标人脸
  2. 对于视频

    • 对于每一帧,识别存在哪些映射的人脸
    • 将相应的人脸源应用于帧中的每个目标人脸
  3. 对于网络摄像头

    • 检测每个网络摄像头帧中的人脸
    • 从映射中查找最匹配的人脸
    • 应用相应的人脸源

图示:带映射的人脸交换过程

来源:modules/processors/frame/face_swapper.py101-210

最佳实践和技巧

为了获得最佳的人脸映射效果

  1. 高质量的源图像:使用清晰、正面、光线充足的图像作为源人脸
  2. 一致的目标人脸:对于视频,请确保光线和角度一致,以便更好地进行人脸聚类
  3. 多重映射:为具有不同表情或角度的角色创建多重映射
  4. 手动调整:对于网络摄像头模式,请考虑创建多个具有目标人脸轻微变化的映射
  5. 人脸识别:系统使用人脸识别嵌入,因此相似的人可能会被分组在一起

故障排除

常见问题和解决方案

问题解决方案
“未在目标中找到人脸”确保目标图像/视频中的人脸清晰可见
“上次上传的人脸未能检测到”尝试使用另一张包含更清晰、正面人脸的源图像
视频中错误的人脸匹配为有问题的人脸创建更具体的映射
交换质量差确保源人脸和目标人脸具有相似的朝向和光照条件
大量人脸处理缓慢考虑禁用“多人脸”选项以加快处理速度

来源:modules/ui.py412 modules/ui.py534 modules/ui.py1153 modules/ui.py1205

面部映射与 Deep-Live-Cam 的其他功能协同工作

  • 多张脸:同时启用时,系统将映射和交换所有检测到的面部
  • 面部增强器:可与面部映射结合使用,以提高交换面部的质量
  • 嘴部蒙版:在使用面部映射时保留原始嘴部动作
  • 色彩校正:改善交换面部与目标脸的融合效果

有关这些配套功能的详细信息,请参阅 面部处理

来源:modules/ui.py230-254 modules/processors/frame/face_swapper.py70-98