菜单

人脸处理

相关源文件

人脸处理系统是 Deep-Live-Cam 的人脸交换功能的**核心技术**。本文档提供了关于应用程序内人脸如何被检测、分析、映射和交换的技术细节。

有关整体处理流程的信息,请参阅 处理流程。有关视频捕获机制的详细信息,请参阅 视频捕获与处理

1. 人脸处理架构

人脸处理系统由多个相互关联的组件构成,它们协同工作以转换图像和视频。

来源

  • modules/face_analyser.py
  • modules/processors/frame/face_swapper.py
  • modules/cluster_analysis.py

2. 人脸检测与分析

2.1 人脸分析器组件

系统使用 InsightFace 的“buffalo_l”模型初始化一个**人脸分析器**的实例。

人脸分析器是**单例**,会在应用程序中初始化一次并重复使用。

来源

  • modules/face_analyser.py:18-24

2.2 人脸检测函数

系统提供了两个关键的检测函数:

功能目的实现
get_one_face()返回图像中最左边的人脸。使用 min(face, key=lambda x: x.bbox[0]) 来选择最左边的人脸。
get_many_faces()返回图像中的所有人脸。直接返回分析器检测到的所有人脸。

这些函数构成了所有**人脸处理操作的基础**。

来源

  • modules/face_analyser.py:27-39

3. 人脸映射系统

3.1 人脸映射模式

系统支持两种映射模式,由全局变量 map_faces 控制。

  1. 简单映射:直接将源人脸与目标人脸进行关联。
  2. 基于聚类的映射:通过聚类分析识别视频帧中的唯一人脸。

3.2 视频处理的聚类分析

对于包含多个人脸的视频,系统使用**聚类**来识别唯一人脸。

函数 find_cluster_centroids() 通过分析不同 K-means 配置的惯性值来确定**最佳聚类数量**。这使得系统能够自动识别视频中唯一人脸的数量。

来源

  • modules/cluster_analysis.py:7-21
  • modules/face_analyser.py:97-169

4. 人脸交换过程

4.1 人脸交换器组件

人脸交换器使用 InsightFace 的“inswapper_128_fp16.onnx”模型。

来源

  • modules/processors/frame/face_swapper.py:58-67

4.2 核心交换函数

函数 swap_face() 执行实际的人脸交换操作。

来源

  • modules/processors/frame/face_swapper.py:70-98

4.3 处理模式

系统通过两种主要函数处理不同的处理场景:

  1. process_frame():当 map_faces 被禁用时使用。接收一个源人脸并将其交换到检测到的目标人脸上。
    • 支持单目标人脸模式或多目标人脸模式。
  2. process_frame_v2():当 map_faces 被启用时使用。使用预定义的源-目标映射。
    • 对图像目标、视频目标和摄像头输入进行不同的处理。
    • 对于摄像头/实时处理,使用基于聚类分析的映射。

来源

  • modules/processors/frame/face_swapper.py:101-210

5. 特殊处理技术

5.1 嘴部遮罩

嘴部遮罩在交换过程中**保留目标人脸的嘴部区域**,这对于维持嘴唇运动的真实感至关重要。

该过程使用面部**特征点**(特别是特征点 65、66、62、70、69 等)来精确识别嘴部区域。

来源

  • modules/processors/frame/face_swapper.py:267-381
  • modules/processors/frame/face_swapper.py:466-531

5.2 颜色校正

颜色校正确保交换后的**人脸与目标的照明和颜色条件相匹配**。

使用 LAB **颜色空间**,因为它将亮度与颜色信息分离开来,从而实现更自然的颜色传递。

来源

  • modules/processors/frame/face_swapper.py:603-622

5.3 人脸遮罩创建

人脸遮罩能够使交换后的人脸**与目标图像正确融合**。

遮罩包括整个人脸以及延伸的前额区域,以确保完全覆盖。

来源

  • modules/processors/frame/face_swapper.py:534-600

6. 与处理流程集成

6.1 图像处理

对于图像处理,系统遵循以下顺序:

来源

  • modules/processors/frame/face_swapper.py:241-254

6.2 视频处理

对于视频处理,系统会处理多个帧。

来源

  • modules/processors/frame/face_swapper.py:213-238
  • modules/processors/frame/face_swapper.py:257-264

7. 技术实现细节

7.1 人脸分析数据结构

当检测到人脸时,它包含以下关键信息:

属性描述
bbox边界框坐标 [x_min, y_min, x_max, y_max]
landmark_2d_106106 个 2D 坐标的人脸特征点。
normed_embedding用于识别的人脸嵌入向量。
det_score检测置信度分数。

7.2 关键配置参数

几个全局参数会影响人脸处理的行为。

参数效果
map_faces启用/禁用人脸映射模式。
many_faces如果为 true,则处理帧中的所有人脸;否则只处理一个人脸。
mouth_mask启用/禁用嘴部区域的保留。
color_correction启用/禁用源人脸和目标人脸之间的颜色匹配。
mask_size控制嘴部遮罩的大小。
mask_feather_ratio控制遮罩边缘的平滑度。

来源

  • modules/processors/frame/face_swapper.py:70-98
  • modules/processors/frame/face_swapper.py:101-210