Skip to content

amonadam/Video-Watermark-Remover

Repository files navigation

视频去水印软件

项目概述

视频去水印软件是一款基于AI技术的视频处理工具,能够自动检测和去除视频中的水印。软件采用了先进的LAMA(Large Mask Inpainting with Fourier Convolutions)模型进行水印去除,同时提供了直观的用户界面和完善的权限管理系统。

主要功能包括:

  • 自动检测视频中的水印区域
  • 使用AI模型精确去除水印
  • 支持批量处理多个视频文件
  • 提供水印区域手动选择功能
  • 完善的用户权限管理系统
  • 操作日志记录与查询功能
  • 支持GPU加速处理

技术架构

核心技术栈

技术/框架 用途
PyQt5 GUI界面开发
OpenCV 视频处理和水印检测
PyTorch AI模型推理
LAMA模型 水印去除
SQLite 数据存储(用户、权限、日志)
FFmpeg 视频编解码

系统架构

┌─────────────────────────────────────────────────────────────────────────┐
│                            用户界面层 (GUI)                              │
│ ┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐ ┌───────────┐│
│ │ 视频处理模块    │ │ 历史记录模块    │ │ 设置模块        │ │ 管理员模块││
│ └─────────────────┘ └─────────────────┘ └─────────────────┘ └───────────┘│
└─────────────────────────────────────────────────────────────────────────┘
                                │
┌─────────────────────────────────────────────────────────────────────────┐
│                            业务逻辑层                                   │
│ ┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐ ┌───────────┐│
│ │ 视频处理引擎    │ │ 权限管理系统    │ │ 历史记录管理    │ │ 日志系统  ││
│ └─────────────────┘ └─────────────────┘ └─────────────────┘ └───────────┘│
└─────────────────────────────────────────────────────────────────────────┘
                                │
┌─────────────────────────────────────────────────────────────────────────┐
│                            数据持久层                                   │
│ ┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐ ┌───────────┐│
│ │ 用户数据库      │ │ 权限数据库      │ │ 历史记录数据库  │ │ 日志数据库││
│ └─────────────────┘ └─────────────────┘ └─────────────────┘ └───────────┘│
└─────────────────────────────────────────────────────────────────────────┘

模块依赖关系

  • GUI层 依赖 业务逻辑层 的所有模块
  • 业务逻辑层 依赖 数据持久层 进行数据存储和检索
  • 视频处理引擎 依赖外部AI模型(LAMA)进行水印去除

功能特性

1. 视频处理功能

  • 批量视频处理:支持同时处理多个视频文件或整个目录
  • 自动水印检测:基于计算机视觉技术自动检测视频中的水印区域
  • 手动水印选择:支持用户手动框选水印区域,提供精确控制
  • 实时预览:处理前可预览水印去除效果
  • 输出格式支持:支持MP4、AVI、MOV等多种视频格式
  • GPU加速:支持使用GPU加速处理,提高效率
  • 视频处理流程
    1. 视频文件验证与加载
    2. 水印区域检测与ROI提取
    3. 视频帧序列处理(并行化处理)
    4. AI水印去除(LAMA模型)
    5. 处理后视频合成
    6. 处理结果统计与记录
  • 帧处理优化
    • 针对视频帧进行批量处理,提高效率
    • 支持跳过无效帧,避免处理错误
    • 帧处理进度实时显示
  • 容错机制
    • 自动处理视频加载错误
    • 检测到无效帧时自动跳过
    • 处理失败时提供详细错误信息
    • 支持断点续传功能(正在开发中)
  • 处理统计
    • 记录处理开始和结束时间
    • 统计总帧数、已处理帧数、失败帧数
    • 保存视频元信息(分辨率、时长、帧率等)
    • 生成处理报告(可选)

2. 用户权限管理(RBAC)

软件采用基于角色的访问控制(RBAC)模型,定义了四种权限级别:

  • view:查看权限,允许查看界面和历史记录
  • edit:编辑权限,允许处理视频
  • delete:删除权限,允许删除历史记录
  • admin:管理员权限,拥有所有权限并可管理用户

权限对应功能

权限 功能权限
view 查看历史记录
edit 查看历史记录、处理视频
delete 查看历史记录、处理视频、删除历史记录
admin 所有功能、管理用户、查看操作日志

用户存储配置

支持两种用户存储方式,可通过配置文件设置:

  • SQLite:默认存储方式,使用本地SQLite数据库文件
  • JSON:可选存储方式,使用JSON文件存储用户信息

配置示例:

"user_storage": {
    "type": "sqlite",
    "file_path": "users.db"
}

3. 管理员功能

用户管理

  • 用户列表展示:显示系统中所有用户的基本信息(用户名、权限、状态)
  • 用户删除功能:允许管理员删除其他用户账户,包含二次确认机制
  • 管理员添加功能:支持创建具有相同权限级别的新管理员用户,包含必要的表单验证

操作日志

  • 日志查询界面:提供多条件筛选功能(用户名、操作类型、时间范围)
  • 详细日志查看:显示操作时间、操作类型、操作结果、IP地址等关键信息
  • 日志导出:支持查看最近1000条操作记录

历史记录管理

  • 处理记录追踪:记录用户处理的所有视频文件信息
  • 历史查询:支持按时间、文件名等条件查询历史记录
  • 记录删除:允许有删除权限的用户删除历史记录

操作日志API接口

1. 初始化接口

initialize_operation_logger(db_path: str = "users.db") -> None

初始化操作日志记录器,指定数据库文件路径。

2. 日志记录接口

log_operation(username: str, operation_type: str, operation_result: str,
              ip_address: Optional[str] = None, details: Optional[str] = None) -> bool

记录用户操作日志,包含以下参数:

  • username:执行操作的用户名
  • operation_type:操作类型(如:登录、处理视频、删除记录等)
  • operation_result:操作结果(成功/失败)
  • ip_address:执行操作的IP地址(可选)
  • details:操作详细信息(可选)

3. 日志查询接口

get_operation_logs(username: Optional[str] = None, 
                   start_time: Optional[datetime] = None, 
                   end_time: Optional[datetime] = None,
                   operation_type: Optional[str] = None,
                   page: int = 1, page_size: int = 20) -> Tuple[List[Dict[str, any]], int]

查询操作日志,支持以下筛选条件:

  • username:用户名(可选,None表示所有用户)
  • start_time:开始时间(可选)
  • end_time:结束时间(可选)
  • operation_type:操作类型(可选)
  • page:页码(默认从1开始)
  • page_size:每页记录数(默认20条)

返回值:

  • 操作日志列表:包含id、用户名、操作时间、操作类型、操作结果、IP地址、详细信息
  • 总记录数:符合条件的日志总条数

4. 日志安全特性

  • 使用参数化查询防止SQL注入
  • 对输入数据进行安全清理
  • 支持分页查询,避免大数据量查询影响性能
  • 详细记录操作时间和IP地址,便于追踪操作来源

快速开始

环境要求

  • Python 3.7+
  • Windows 10/11(目前仅支持Windows平台)
  • 推荐配置:8GB+ RAM,NVIDIA GPU(支持CUDA)

安装依赖

  1. 克隆或下载项目到本地

  2. 安装依赖包:

pip install -r requirements.txt
  1. 确保已安装FFmpeg并添加到系统环境变量

运行软件

方式一:直接运行

python run.py

方式二:使用启动脚本

start_fixed.bat  # Windows批处理脚本

start_fixed.ps1  # PowerShell脚本

环境变量设置

软件会自动设置以下环境变量以解决中文路径问题:

  • TORCH_HOME:PyTorch模型存储路径
  • HF_HOME:HuggingFace模型缓存路径
  • HUGGINGFACE_HUB_CACHE:HuggingFace Hub缓存路径
  • XDG_CACHE_HOME:XDG缓存路径

在开发环境中,默认模型存储路径为:F:/AI_Models/lama_cache

在打包环境中,模型会存储在临时目录中。

模型下载

首次运行软件时,会自动检查LAMA模型文件是否存在:

详细使用说明

首次登录

软件启动后会显示登录界面,默认提供以下账户:

用户名 密码 权限
admin admin123 管理员权限
user user123 普通用户权限

视频处理流程

  1. 选择输入视频

    • 点击"选择文件"按钮选择一个或多个视频文件
    • 或点击"选择目录"按钮选择包含视频的目录
  2. 设置输出选项

    • 选择输出目录
    • 设置输出格式(MP4/AVI/MOV)
  3. 水印检测设置

    • 调整采样帧数(推荐20-30帧)
    • 设置最小帧数(检测到的水印出现的最小帧数)
    • 调整膨胀核大小(用于优化水印区域检测)
    • 选择是否启用颜色分割(针对蓝色背景水印效果更佳)
  4. 开始处理

    • 点击"开始处理"按钮
    • 等待处理完成,可在进度条查看处理进度

用户界面说明

界面布局

软件采用现代化的界面设计,主要包括以下模块:

  • 主操作区:视频文件选择、处理参数设置、开始处理按钮
  • 预览区:处理前的视频预览和水印检测结果预览
  • 历史记录区:显示用户处理的历史记录
  • 状态显示区:显示当前处理状态和进度
  • 管理员功能区:仅管理员可见,包含用户管理和操作日志查询

中文操作支持

  • 完整的中文界面,所有菜单项、按钮、提示信息均支持中文
  • 手动选择水印区域时提供中文操作指导
  • 错误提示和帮助信息均为中文,方便用户理解

ROI选择界面

在手动模式下,软件提供直观的水印区域选择界面:

  • 中文操作提示:清晰的中文指令,指导用户完成操作
  • 自适应窗口大小:根据视频分辨率自动调整显示窗口大小
  • 实时预览:立即显示选择的区域
  • 操作快捷键
    • 鼠标拖拽:选择水印区域
    • SPACE/ENTER:确认选择
    • ESC:取消选择

水印区域选择模式

自动模式(推荐)
  • 软件自动检测视频中的水印区域
  • 适用于大多数常见水印场景
  • 处理速度较快
  • 水印类型智能识别:自动检测水印类型(文本、图像、透明、纯色背景等)
  • 自动颜色检测:根据水印颜色自动调整检测参数,提高检测准确率
手动模式
  • 用户通过框选方式指定水印区域
  • 适用于复杂或难以自动检测的水印
  • 提供更高的精确性

水印检测技术

  • 多类型水印支持:针对文本、图像、透明、纯色背景等不同类型水印进行优化
  • 自适应参数调整:根据检测到的水印类型自动调整边缘检测、形态学操作等参数
  • 颜色分割技术:结合HSV颜色空间分割,提高彩色水印检测准确率
  • 最小连通域过滤:自动过滤掉过小的检测区域,减少误判
  • 形态学操作优化:使用开运算去除噪声,闭运算填充空洞,优化检测结果

配置指南

配置文件说明

软件使用configs/settings.json作为配置文件,包含以下主要配置项:

1. 硬件设置

  • 使用GPU加速 (use_gpu):启用/禁用GPU加速处理
  • 软件会自动检测可用的GPU设备

2. 模型设置

  • LDM步数 (ldm_steps):控制AI模型的推理步数,步数越多效果越好但处理速度越慢
  • 高清策略 (hd_strategy):处理高清视频时的策略选择
    • ORIGINAL:保持原始分辨率
    • CROP:裁剪视频
    • RESIZE:调整视频大小

3. 水印检测设置

  • 采样帧数 (sample_frames):从视频中抽取的帧数用于水印检测
  • 最小帧数 (min_frames):水印需要连续出现的最小帧数才会被识别
  • 膨胀核大小 (dilation_size):用于扩展检测到的水印区域边界
  • 边缘检测 (use_canny):启用/禁用Canny边缘检测
  • Canny低阈值 (canny_low):Canny边缘检测的低阈值
  • Canny高阈值 (canny_high):Canny边缘检测的高阈值
  • Canny阈值比例 (canny_ratio):Canny高低阈值的比例,默认3.0
  • 自适应Canny (adaptive_canny):是否使用自适应Canny边缘检测,自动调整阈值
  • 颜色分割 (use_color_segmentation):针对特定颜色背景水印的特殊检测算法
  • 自动颜色检测 (auto_detect_color):是否自动检测水印颜色并调整颜色分割参数
  • 颜色下限(HSV) (color_lower_hsv):颜色分割的HSV下限值
  • 颜色上限(HSV) (color_upper_hsv):颜色分割的HSV上限值
  • 最小连通域面积 (min_component_area):过滤掉过小的检测区域
  • 形态学开运算 (morph_open):用于去除噪声的形态学操作
  • 形态学闭运算 (morph_close):用于填充空洞的形态学操作

4. 水印类型参数配置

软件针对不同类型的水印进行了参数优化,包括:

  • 文本水印 (text):针对文字水印优化的边缘检测和形态学参数
  • 图像水印 (image):针对图片水印优化的检测参数
  • 透明水印 (transparent):针对半透明水印优化的检测策略
  • 纯色背景水印 (solid_bg):针对纯色背景上的水印优化的颜色分割参数

根据自动检测到的水印类型,软件会自动调整相应的检测参数以获得最佳效果

5. 视频输出设置

  • 编解码器 (codec):视频编解码器(默认:libx264)
  • 比特率 (bitrate):视频输出比特率(默认:5000k)
  • 预设 (preset):编码预设(ultrafast/fast/medium/slow/slower/veryslow)
  • 输出格式 (output_format):视频输出格式(默认:mp4)

6. 界面设置

  • 预览设置 (preview_before_process):处理前是否预览效果
  • 自动选择ROI (auto_select_roi):是否自动选择感兴趣区域
  • 主题 (theme):界面主题(default/dark/light)

7. 路径设置

  • 最后输入目录 (last_input_dir):上次使用的输入目录
  • 最后输出目录 (last_output_dir):上次使用的输出目录(默认:output)

权限管理

权限检查机制

软件通过check_user_permission函数实现权限验证,具体规则:

  1. 管理员用户(拥有admin权限)自动获得所有权限
  2. 普通用户根据分配的权限列表获得相应功能访问权
  3. 权限验证贯穿所有功能模块,确保无权限用户无法访问受限功能

权限管理API接口

1. 初始化接口

initialize_access_control(user_db_path: str = "users.db", storage_type: str = "sqlite") -> None

初始化访问控制模块,支持两种存储类型:

  • sqlite:使用SQLite数据库存储用户信息
  • json:使用JSON文件存储用户信息

2. 用户认证接口

authenticate_user(username: str, password: str) -> Optional[Dict[str, any]]

认证用户并返回用户信息,包含用户名和权限列表。

3. 权限检查接口

check_user_permission(username: str, permission: str) -> bool

检查指定用户是否拥有指定权限。

4. 用户管理接口

add_new_user(username: str, password: str, permissions: List[str]) -> bool

添加新用户,设置用户名、密码和权限列表。

update_user_permissions(username: str, permissions: List[str]) -> bool

更新用户权限列表。

deactivate_user(username: str) -> bool

停用指定用户。

用户存储适配器

软件实现了两种用户存储适配器:

  1. SQLite存储适配器

    • 使用SQLite数据库存储用户信息
    • 支持事务处理
    • 提供更强的数据一致性
    • 适合多用户环境
  2. JSON存储适配器

    • 使用JSON文件存储用户信息
    • 轻量级,易于查看和编辑
    • 适合单用户或开发环境

存储适配器通过配置文件中的user_storage配置项进行选择。

管理员操作指南

用户管理

  1. 切换到"管理员功能"标签页(仅管理员可见)
  2. 点击"用户管理"子标签
  3. 查看所有用户列表
  4. 点击"删除"按钮删除选中用户(不可删除当前登录用户)
  5. 使用"添加新管理员"表单创建新的管理员账户

操作日志查看

  1. 切换到"管理员功能"标签页
  2. 点击"操作日志"子标签
  3. 使用筛选条件(用户名、操作类型、时间范围)查询日志
  4. 查看详细的操作记录

数据库结构

核心表结构

1. 用户表 (users)

字段名 数据类型 描述
username TEXT 用户名(主键)
password_hash TEXT 密码哈希值
is_active INTEGER 用户状态(1=启用,0=禁用)

2. 用户权限表 (user_permissions)

字段名 数据类型 描述
username TEXT 用户名(外键,引用users.username)
permission TEXT 权限名称
PRIMARY KEY (username, permission) 联合主键

3. 历史记录表 (user_history)

字段名 数据类型 描述
id INTEGER 记录ID(主键)
username TEXT 用户名(外键)
video_path TEXT 视频路径
operation_type TEXT 操作类型
operation_time TEXT 操作时间
file_name TEXT 文件名
file_size INTEGER 文件大小(字节)

4. 操作日志表 (operation_logs)

字段名 数据类型 描述
id INTEGER 日志ID(主键)
username TEXT 用户名
operation_time TEXT 操作时间
operation_type TEXT 操作类型
operation_result TEXT 操作结果
ip_address TEXT IP地址
details TEXT 详细信息

实体关系图 (E-R图)

┌─────────────────┐     ┌─────────────────┐     ┌─────────────────┐
│     用户        │     │     权限        │     │   操作日志      │
│  ┌───────────┐  │     │  ┌───────────┐  │     │  ┌───────────┐  │
│  │ username  │  │     │  │ permission│  │     │  │ id        │  │
│  │ password_hash│<───┐ │  └───────────┘  │     │  │ username  │  │
│  │ is_active │  │   │ └─────────────────┘     │  │ operation_time│  │
│  └───────────┘  │   │                         │  │ operation_type│  │
└─────────────────┘   │     ┌─────────────────┐   │  │ operation_result│  │
                      │     │   历史记录      │   │  │ ip_address   │  │
                      │     │  ┌───────────┐  │   │  │ details      │  │
                      │     │  │ id        │  │   │  └───────────┘  │
                      │     │  │ username  │  │   │                 │
                      │     │  │ video_path│  │   │                 │
                      │     │  └───────────┘  │   │                 │
                      │     └─────────────────┘   │                 │
                      │                           │                 │
                      └───────────────────────────┘                 │
                                                                └───────────┘

开发指南

项目结构

waterremove/
├── src/                 # 主源码目录
│   ├── core/           # 核心功能模块
│   │   ├── security/   # 安全相关模块
│   │   ├── watermark_detector.py  # 水印检测模块
│   │   ├── video_processor.py     # 视频处理模块
│   │   ├── lama_inpainter.py      # AI去水印模块
│   │   ├── history_manager.py     # 历史记录管理
│   │   ├── operation_logger.py    # 操作日志记录
│   │   └── utils.py               # 工具函数
│   ├── gui/            # GUI界面模块
│   │   ├── main_window.py         # 主窗口
│   │   ├── login_dialog.py        # 登录对话框
│   │   ├── preview_dialog.py      # 预览对话框
│   │   ├── progress_dialog.py     # 进度对话框
│   │   └── register_dialog.py     # 注册对话框
│   └── main.py         # 程序入口
├── configs/            # 配置文件目录
│   └── settings.json   # 应用配置
├── run.py              # 启动脚本
├── start_fixed.bat     # Windows启动批处理
├── start_fixed.ps1     # Windows启动PowerShell脚本
├── requirements.txt    # 依赖列表
├── users.db            # SQLite数据库文件
└── readme.md           # 项目文档

开发环境设置

  1. 克隆项目到本地
  2. 创建虚拟环境:
python -m venv venv
  1. 激活虚拟环境:
venv\Scripts\activate  # Windows
  1. 安装依赖:
pip install -r requirements.txt
  1. 运行开发版本:
python run.py

代码规范

  • 遵循PEP 8代码风格规范
  • 所有函数和类都需要添加文档字符串
  • 变量命名使用小写字母和下划线组合
  • 类名使用驼峰命名法

常见问题解答

Q1: 软件启动后提示缺少依赖怎么办?

A: 请确保已正确安装所有依赖包:

pip install -r requirements.txt

如果仍然缺少依赖,请根据错误信息单独安装缺少的包。

Q2: 为什么处理视频时速度很慢?

A: 视频处理速度受以下因素影响:

  • 视频分辨率和时长
  • 计算机硬件配置
  • 是否启用GPU加速
  • LDM步数设置

建议:

  1. 确保已启用GPU加速(如果硬件支持)
  2. 适当降低LDM步数
  3. 对大文件考虑先进行剪辑或压缩

Q3: 水印去除效果不理想怎么办?

A: 可以尝试以下方法优化:

  1. 调整水印检测参数(采样帧数、最小帧数等)
  2. 切换到手动模式,精确框选水印区域
  3. 增加LDM步数(会增加处理时间)
  4. 尝试调整颜色分割选项

Q4: 如何修改用户密码?

A: 目前版本需要通过直接修改数据库实现,后续版本将添加密码修改功能。

Q5: 软件支持哪些视频格式?

A: 支持常见的视频格式如MP4、AVI、MOV、MKV、FLV、WMV等。

版本历史

v1.0.0 (2023-XX-XX)

  • 首次发布
  • 实现核心视频去水印功能
  • 添加用户权限管理系统
  • 实现管理员功能(用户管理、操作日志)
  • 支持GPU加速

许可证

MIT License

联系方式

如有问题或建议,请联系开发团队。

贡献

欢迎提交Issue和Pull Request来帮助改进这个项目!


注意:本软件仅供学习和研究使用,请勿用于非法用途。使用本软件处理受版权保护的视频前,请确保您拥有相应的权限。

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages