101

主题

38

回帖

1773

贡献

站长

积分
31704
LeoSasion 2025-10-3 00:14:54 | 显示全部楼层 | 阅读模式
首先,bat文件向main.py传递参数。
bat内容:
main.py" extract ^
    --input-dir "%WORKSPACE%\data_dst" ^
    --output-dir "%WORKSPACE%\data_dst\aligned" ^
    --detector s3fd ^
    --max-faces-from-image 0 ^
    --output-debug
经过:【学习日记】DeepfaceLab入口文件main.py整体注释 - Deep 换脸 - BBS_Monster
执行:mainscripts\Extractor.py
代码比较多,我上传py文件到本帖

Extractor.py 最终输出的是图片文件,具体来说:

1. 1.
   输出为包含人脸的 JPEG 图像文件,保存在指定的输出目录中
2. 2.
   输出文件名格式为 {原始文件名}_{人脸索引}.jpg
3. 3.
   这些 JPEG 文件实际上是 DFLIMG 格式(DeepFaceLab 自定义格式),包含了额外的元数据
4. 4.
   元数据包括:人脸类型、地标点信息、源文件名、源矩形区域、图像变换矩阵等
## 关于图像旋转与对齐
1. 1.
   旋转处理 :
   
   - 在检测阶段,代码会尝试对图像进行不同角度的旋转(0°、90°、270°、180°)以提高人脸检测率
   - 当图像被旋转后,在 landmarks_stage 函数中,代码会将检测到的矩形框和地标点转换回原始坐标系
   - 这确保了即使在旋转的图像上检测到人脸,最终的坐标也是相对于原始图像的
2. 2.
   人脸对齐 :
   
   - 在 final_stage 函数中,代码使用 LandmarksProcessor.get_transform_mat 计算一个仿射变换矩阵
   - 这个矩阵基于检测到的面部地标点,将人脸区域进行对齐和标准化
   - 使用 cv2.warpAffine 应用这个变换矩阵,提取出对齐后的人脸图像
   - 对齐后的人脸图像大小为指定的 image_size 参数(默认为 512 或 768)
3. 3.
   不同人脸类型的处理 :
   
   - 根据选择的 face_type(FULL、WHOLE_FACE、HEAD),变换矩阵会调整以提取适当大小的区域
   - 例如,HEAD 类型会提取整个头部区域,而 FULL_FACE 仅提取面部区域
总结:Extractor.py 文件从输入图像中检测人脸,对检测到的人脸进行对齐和标准化处理,然后保存为包含元数据的 JPEG 文件,以便后续在 DeepFaceLab 中使用。在这个过程中,代码会处理图像旋转问题,确保检测结果准确,并对人脸进行对齐以标准化输出。

Extractor.py

50.79 KB, 下载次数: 0

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则