菜单

图形用户界面

相关源文件

Faceswap GUI 提供了一个用户友好的界面来与 Faceswap 应用程序进行交互。它将 Faceswap 的命令行功能封装在一个直观的界面中,允许用户配置、执行和监控 Faceswap 的三个主要进程:提取 (Extract)、训练 (Train) 和转换 (Convert)。本页面将介绍 GUI 的架构和组件、它们的交互方式以及 GUI 如何管理进程执行。

有关 CLI 命令的信息,请参阅 命令行界面

GUI 架构概述

Faceswap GUI 使用 Python 的标准 GUI 工具包 Tkinter 构建。它遵循一种布局模式,包含几个关键区域。

来源

关键组件

GUI 由几个关键组件组成,它们协同工作。

  1. 主窗口 (FaceswapGui):包含所有其他元素的根 Tkinter 窗口。
  2. 菜单栏:提供文件操作、设置和帮助的访问。
  3. 任务栏:快速访问常用任务。
  4. 命令笔记本 (Command Notebook):左侧面板,包含不同 Faceswap 命令(提取、训练、转换、工具)的选项卡。
  5. 显示笔记本 (Display Notebook):右侧面板,显示输出、预览和分析。
  6. 控制台输出:底部面板,显示命令输出。
  7. 状态栏:显示当前状态和进度信息。

命令笔记本 (Command Notebook)

Command Notebook 是配置和执行 Faceswap 操作的主要接口。它被实现为一个 ttk.Notebook,带有 Faceswap 主要命令的选项卡。

来源

控件面板 (Control Panels)

每个命令选项卡都包含一个控件面板,用于显示该命令的配置选项。这些选项是从 CLI 模块中定义的命令行参数生成的。

ControlPanel 是一个灵活的控件,可以显示各种类型的选项:

  • 文本输入
  • 复选框
  • 组合框
  • 单选按钮
  • 滑块
  • 文件/目录浏览器

来源

操作框架 (Action Frame)

每个命令选项卡都有一个操作框架,其中包含用于执行以下操作的按钮:

  1. 生成 (Generate):将命令行等效内容输出到控制台。
  2. 执行 (Execute):运行配置好的命令。

当命令运行时,执行按钮会变为停止按钮,允许用户终止进程。

来源

显示笔记本 (Display Notebook)

Display Notebook 显示输出、预览和分析。它始终包含“分析”选项卡,并根据当前运行的进程动态添加其他选项卡。

来源

分析选项卡 (Analysis Tab)

Analysis 选项卡提供训练会话的统计信息和分析。它显示以下信息:

  • 会话持续时间
  • 迭代次数
  • 训练率
  • 损失值

用户可以查看所有训练会话的详细信息并分析模型性能。

来源

预览选项卡 (Preview Tabs)

提取/转换预览 (Extract/Convert Preview)

显示提取的人脸或转换后的图像的缩略图,并在进程运行时进行更新。

训练预览 (Training Preview)

显示训练预览图像,展示模型当前的输出,包括可选的蒙版叠加。

来源

图表显示 (Graph Display)

实时显示训练损失值的图表,并提供以下选项:

  • 显示原始或平滑数据
  • 调整显示迭代次数
  • 设置平滑量

来源

进程执行 (Process Execution)

GUI 使用包装器系统将 Faceswap 命令作为单独的进程执行,并捕获其输出。

来源

进程包装器 (ProcessWrapper)

ProcessWrapper 类负责:

  1. 构建 Faceswap 脚本的命令行参数。
  2. 将进程作为子进程启动。
  3. 根据进程输出更新 GUI。
  4. 根据请求终止进程。

它创建并管理直接处理进程通信的 FaceswapControl 对象。

来源

FaceswapControl

FaceswapControl 处理:

  1. 通过 subprocess.Popen 执行进程。
  2. 在单独的线程中读取 stdout 和 stderr。
  3. 捕获和解析输出(损失值、TQDM 进度、FFmpeg 输出)。
  4. 更新状态栏和 GUI 元素。
  5. 优雅或强制终止进程。

来源

输出捕获和显示 (Output Capture and Display)

进程输出从 stdout 和 stderr 捕获,并:

  1. 显示在控制台输出区域。
  2. 用于更新进度条。
  3. 用于更新分析数据和图表。
  4. 用于触发预览图像更新。

正则表达式用于解析特定的输出格式,例如:

  • 训练期间的损失值
  • TQDM 进度条
  • FFmpeg 编码信息

来源

配置系统

GUI 拥有一个全面的配置系统,用于管理设置、项目和任务。

来源

设置对话框 (Settings Dialog)

GUI 有一个设置对话框,允许用户配置全局设置,可从“设置”菜单访问。设置类别包括:

  • GUI 的行为和外观
  • 命令的默认值
  • 插件特定配置

设置存储在 .faceswap 配置文件中。

来源

项目和任务管理

项目和任务可以保存和加载

  • 项目(.fsw 文件):保存所有命令的状态
  • 任务(.fst 文件):保存单个命令的状态

这使用户能够保存他们的配置以供将来使用或共享。

来源

GUI 提供了一个包含三个主要菜单的综合菜单系统

来源

文件菜单

文件菜单提供了选项用于

  • 管理项目(新建、打开、保存)
  • 管理任务(打开、保存)
  • 访问最近打开的文件
  • 退出应用程序

来源

设置菜单

设置菜单提供对配置对话框的访问。

来源

帮助菜单

帮助菜单提供

  • 检查更新
  • 分支切换
  • 访问资源(网站、论坛等)
  • 系统信息显示

来源

GUI 组件和控件

GUI 使用标准 Tkinter 控件和专门为 Faceswap 设计的自定义控件的组合。

自定义控件

来源

控件助手

control_helper 模块提供了几个用于构建和管理 GUI 控件的类

  • ControlPanelOption:定义一个控件面板选项,包含其数据类型、默认值等。
  • ControlPanel:一个控件面板选项的容器,具有自动布局。
  • AutoFillContainer:管理控件面板的动态列布局。

来源

事件处理和数据流

GUI 使用 Tkinter 的事件系统和变量跟踪来处理用户交互和更新界面。关键流程包括:

来源

变量跟踪

GUI 大量使用 Tkinter 的变量跟踪机制,以便在变量更改时触发操作。

  • action_command 用于执行命令
  • generate_command 用于生成命令行
  • refresh_graph 用于更新图表
  • running_task 用于在任务开始或停止时更新 UI 状态

来源

长时间运行的任务

可能需要很长时间的 GUI 操作使用 `LongRunningTask` 类在单独的线程中执行,以防止 UI 冻结。

来源

与核心 Faceswap 组件集成

GUI 通过以下方式与核心 Faceswap 组件(提取、训练、转换)集成:

  1. 为每个进程构建命令行参数
  2. 作为子进程执行相应的脚本
  3. 捕获和解析输出
  4. 用相关信息更新 UI

来源

日志和错误处理

GUI 包含全面的日志记录和错误处理机制

  1. 所有 GUI 组件都使用 Python 的日志记录系统来获取详细日志
  2. 错误会显示在控制台输出中
  3. 严重错误会显示弹出消息框
  4. GUI 可以生成包含系统信息的崩溃报告

来源

结论

Faceswap GUI 为 Faceswap 应用程序提供了一个全面的界面,使其能够被那些偏爱图形界面而非命令行操作的用户所使用。其模块化设计允许灵活性和可扩展性,同时保持跨不同 Faceswap 操作的一致用户体验。

GUI 有效地弥合了用户与底层 Faceswap 功能之间的差距,提供了直观的配置控件、处理过程中的实时反馈以及对结果的详细分析。