视频去水印软件是一款基于AI技术的视频处理工具,能够自动检测和去除视频中的水印。软件采用了先进的LAMA(Large Mask Inpainting with Fourier Convolutions)模型进行水印去除,同时提供了直观的用户界面和完善的权限管理系统。
主要功能包括:
- 自动检测视频中的水印区域
- 使用AI模型精确去除水印
- 支持批量处理多个视频文件
- 提供水印区域手动选择功能
- 完善的用户权限管理系统
- 操作日志记录与查询功能
- 支持GPU加速处理
| 技术/框架 | 用途 |
|---|---|
| PyQt5 | GUI界面开发 |
| OpenCV | 视频处理和水印检测 |
| PyTorch | AI模型推理 |
| LAMA模型 | 水印去除 |
| SQLite | 数据存储(用户、权限、日志) |
| FFmpeg | 视频编解码 |
┌─────────────────────────────────────────────────────────────────────────┐
│ 用户界面层 (GUI) │
│ ┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐ ┌───────────┐│
│ │ 视频处理模块 │ │ 历史记录模块 │ │ 设置模块 │ │ 管理员模块││
│ └─────────────────┘ └─────────────────┘ └─────────────────┘ └───────────┘│
└─────────────────────────────────────────────────────────────────────────┘
│
┌─────────────────────────────────────────────────────────────────────────┐
│ 业务逻辑层 │
│ ┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐ ┌───────────┐│
│ │ 视频处理引擎 │ │ 权限管理系统 │ │ 历史记录管理 │ │ 日志系统 ││
│ └─────────────────┘ └─────────────────┘ └─────────────────┘ └───────────┘│
└─────────────────────────────────────────────────────────────────────────┘
│
┌─────────────────────────────────────────────────────────────────────────┐
│ 数据持久层 │
│ ┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐ ┌───────────┐│
│ │ 用户数据库 │ │ 权限数据库 │ │ 历史记录数据库 │ │ 日志数据库││
│ └─────────────────┘ └─────────────────┘ └─────────────────┘ └───────────┘│
└─────────────────────────────────────────────────────────────────────────┘
- GUI层 依赖 业务逻辑层 的所有模块
- 业务逻辑层 依赖 数据持久层 进行数据存储和检索
- 视频处理引擎 依赖外部AI模型(LAMA)进行水印去除
- 批量视频处理:支持同时处理多个视频文件或整个目录
- 自动水印检测:基于计算机视觉技术自动检测视频中的水印区域
- 手动水印选择:支持用户手动框选水印区域,提供精确控制
- 实时预览:处理前可预览水印去除效果
- 输出格式支持:支持MP4、AVI、MOV等多种视频格式
- GPU加速:支持使用GPU加速处理,提高效率
- 视频处理流程:
- 视频文件验证与加载
- 水印区域检测与ROI提取
- 视频帧序列处理(并行化处理)
- AI水印去除(LAMA模型)
- 处理后视频合成
- 处理结果统计与记录
- 帧处理优化:
- 针对视频帧进行批量处理,提高效率
- 支持跳过无效帧,避免处理错误
- 帧处理进度实时显示
- 容错机制:
- 自动处理视频加载错误
- 检测到无效帧时自动跳过
- 处理失败时提供详细错误信息
- 支持断点续传功能(正在开发中)
- 处理统计:
- 记录处理开始和结束时间
- 统计总帧数、已处理帧数、失败帧数
- 保存视频元信息(分辨率、时长、帧率等)
- 生成处理报告(可选)
软件采用基于角色的访问控制(RBAC)模型,定义了四种权限级别:
- view:查看权限,允许查看界面和历史记录
- edit:编辑权限,允许处理视频
- delete:删除权限,允许删除历史记录
- admin:管理员权限,拥有所有权限并可管理用户
| 权限 | 功能权限 |
|---|---|
| view | 查看历史记录 |
| edit | 查看历史记录、处理视频 |
| delete | 查看历史记录、处理视频、删除历史记录 |
| admin | 所有功能、管理用户、查看操作日志 |
支持两种用户存储方式,可通过配置文件设置:
- SQLite:默认存储方式,使用本地SQLite数据库文件
- JSON:可选存储方式,使用JSON文件存储用户信息
配置示例:
"user_storage": {
"type": "sqlite",
"file_path": "users.db"
}- 用户列表展示:显示系统中所有用户的基本信息(用户名、权限、状态)
- 用户删除功能:允许管理员删除其他用户账户,包含二次确认机制
- 管理员添加功能:支持创建具有相同权限级别的新管理员用户,包含必要的表单验证
- 日志查询界面:提供多条件筛选功能(用户名、操作类型、时间范围)
- 详细日志查看:显示操作时间、操作类型、操作结果、IP地址等关键信息
- 日志导出:支持查看最近1000条操作记录
- 处理记录追踪:记录用户处理的所有视频文件信息
- 历史查询:支持按时间、文件名等条件查询历史记录
- 记录删除:允许有删除权限的用户删除历史记录
initialize_operation_logger(db_path: str = "users.db") -> None初始化操作日志记录器,指定数据库文件路径。
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:操作详细信息(可选)
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地址、详细信息
- 总记录数:符合条件的日志总条数
- 使用参数化查询防止SQL注入
- 对输入数据进行安全清理
- 支持分页查询,避免大数据量查询影响性能
- 详细记录操作时间和IP地址,便于追踪操作来源
- Python 3.7+
- Windows 10/11(目前仅支持Windows平台)
- 推荐配置:8GB+ RAM,NVIDIA GPU(支持CUDA)
-
克隆或下载项目到本地
-
安装依赖包:
pip install -r requirements.txt- 确保已安装FFmpeg并添加到系统环境变量
python run.pystart_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模型文件是否存在:
- 如果模型文件不存在,会提示用户手动下载
- 模型文件大小约为2-4GB
- 手动下载地址:https://huggingface.co/lama-cleaner/big-lama/resolve/main/big-lama.pt
- 下载后需保存到指定的模型目录
软件启动后会显示登录界面,默认提供以下账户:
| 用户名 | 密码 | 权限 |
|---|---|---|
| admin | admin123 | 管理员权限 |
| user | user123 | 普通用户权限 |
-
选择输入视频:
- 点击"选择文件"按钮选择一个或多个视频文件
- 或点击"选择目录"按钮选择包含视频的目录
-
设置输出选项:
- 选择输出目录
- 设置输出格式(MP4/AVI/MOV)
-
水印检测设置:
- 调整采样帧数(推荐20-30帧)
- 设置最小帧数(检测到的水印出现的最小帧数)
- 调整膨胀核大小(用于优化水印区域检测)
- 选择是否启用颜色分割(针对蓝色背景水印效果更佳)
-
开始处理:
- 点击"开始处理"按钮
- 等待处理完成,可在进度条查看处理进度
软件采用现代化的界面设计,主要包括以下模块:
- 主操作区:视频文件选择、处理参数设置、开始处理按钮
- 预览区:处理前的视频预览和水印检测结果预览
- 历史记录区:显示用户处理的历史记录
- 状态显示区:显示当前处理状态和进度
- 管理员功能区:仅管理员可见,包含用户管理和操作日志查询
- 完整的中文界面,所有菜单项、按钮、提示信息均支持中文
- 手动选择水印区域时提供中文操作指导
- 错误提示和帮助信息均为中文,方便用户理解
在手动模式下,软件提供直观的水印区域选择界面:
- 中文操作提示:清晰的中文指令,指导用户完成操作
- 自适应窗口大小:根据视频分辨率自动调整显示窗口大小
- 实时预览:立即显示选择的区域
- 操作快捷键:
- 鼠标拖拽:选择水印区域
- SPACE/ENTER:确认选择
- ESC:取消选择
- 软件自动检测视频中的水印区域
- 适用于大多数常见水印场景
- 处理速度较快
- 水印类型智能识别:自动检测水印类型(文本、图像、透明、纯色背景等)
- 自动颜色检测:根据水印颜色自动调整检测参数,提高检测准确率
- 用户通过框选方式指定水印区域
- 适用于复杂或难以自动检测的水印
- 提供更高的精确性
- 多类型水印支持:针对文本、图像、透明、纯色背景等不同类型水印进行优化
- 自适应参数调整:根据检测到的水印类型自动调整边缘检测、形态学操作等参数
- 颜色分割技术:结合HSV颜色空间分割,提高彩色水印检测准确率
- 最小连通域过滤:自动过滤掉过小的检测区域,减少误判
- 形态学操作优化:使用开运算去除噪声,闭运算填充空洞,优化检测结果
软件使用configs/settings.json作为配置文件,包含以下主要配置项:
- 使用GPU加速 (
use_gpu):启用/禁用GPU加速处理 - 软件会自动检测可用的GPU设备
- LDM步数 (
ldm_steps):控制AI模型的推理步数,步数越多效果越好但处理速度越慢 - 高清策略 (
hd_strategy):处理高清视频时的策略选择ORIGINAL:保持原始分辨率CROP:裁剪视频RESIZE:调整视频大小
- 采样帧数 (
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):用于填充空洞的形态学操作
软件针对不同类型的水印进行了参数优化,包括:
- 文本水印 (
text):针对文字水印优化的边缘检测和形态学参数 - 图像水印 (
image):针对图片水印优化的检测参数 - 透明水印 (
transparent):针对半透明水印优化的检测策略 - 纯色背景水印 (
solid_bg):针对纯色背景上的水印优化的颜色分割参数
根据自动检测到的水印类型,软件会自动调整相应的检测参数以获得最佳效果
- 编解码器 (
codec):视频编解码器(默认:libx264) - 比特率 (
bitrate):视频输出比特率(默认:5000k) - 预设 (
preset):编码预设(ultrafast/fast/medium/slow/slower/veryslow) - 输出格式 (
output_format):视频输出格式(默认:mp4)
- 预览设置 (
preview_before_process):处理前是否预览效果 - 自动选择ROI (
auto_select_roi):是否自动选择感兴趣区域 - 主题 (
theme):界面主题(default/dark/light)
- 最后输入目录 (
last_input_dir):上次使用的输入目录 - 最后输出目录 (
last_output_dir):上次使用的输出目录(默认:output)
软件通过check_user_permission函数实现权限验证,具体规则:
- 管理员用户(拥有
admin权限)自动获得所有权限 - 普通用户根据分配的权限列表获得相应功能访问权
- 权限验证贯穿所有功能模块,确保无权限用户无法访问受限功能
initialize_access_control(user_db_path: str = "users.db", storage_type: str = "sqlite") -> None初始化访问控制模块,支持两种存储类型:
sqlite:使用SQLite数据库存储用户信息json:使用JSON文件存储用户信息
authenticate_user(username: str, password: str) -> Optional[Dict[str, any]]认证用户并返回用户信息,包含用户名和权限列表。
check_user_permission(username: str, permission: str) -> bool检查指定用户是否拥有指定权限。
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停用指定用户。
软件实现了两种用户存储适配器:
-
SQLite存储适配器:
- 使用SQLite数据库存储用户信息
- 支持事务处理
- 提供更强的数据一致性
- 适合多用户环境
-
JSON存储适配器:
- 使用JSON文件存储用户信息
- 轻量级,易于查看和编辑
- 适合单用户或开发环境
存储适配器通过配置文件中的user_storage配置项进行选择。
- 切换到"管理员功能"标签页(仅管理员可见)
- 点击"用户管理"子标签
- 查看所有用户列表
- 点击"删除"按钮删除选中用户(不可删除当前登录用户)
- 使用"添加新管理员"表单创建新的管理员账户
- 切换到"管理员功能"标签页
- 点击"操作日志"子标签
- 使用筛选条件(用户名、操作类型、时间范围)查询日志
- 查看详细的操作记录
| 字段名 | 数据类型 | 描述 |
|---|---|---|
| username | TEXT | 用户名(主键) |
| password_hash | TEXT | 密码哈希值 |
| is_active | INTEGER | 用户状态(1=启用,0=禁用) |
| 字段名 | 数据类型 | 描述 |
|---|---|---|
| username | TEXT | 用户名(外键,引用users.username) |
| permission | TEXT | 权限名称 |
| PRIMARY KEY | (username, permission) | 联合主键 |
| 字段名 | 数据类型 | 描述 |
|---|---|---|
| id | INTEGER | 记录ID(主键) |
| username | TEXT | 用户名(外键) |
| video_path | TEXT | 视频路径 |
| operation_type | TEXT | 操作类型 |
| operation_time | TEXT | 操作时间 |
| file_name | TEXT | 文件名 |
| file_size | INTEGER | 文件大小(字节) |
| 字段名 | 数据类型 | 描述 |
|---|---|---|
| id | INTEGER | 日志ID(主键) |
| username | TEXT | 用户名 |
| operation_time | TEXT | 操作时间 |
| operation_type | TEXT | 操作类型 |
| operation_result | TEXT | 操作结果 |
| ip_address | TEXT | IP地址 |
| details | TEXT | 详细信息 |
┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐
│ 用户 │ │ 权限 │ │ 操作日志 │
│ ┌───────────┐ │ │ ┌───────────┐ │ │ ┌───────────┐ │
│ │ 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 # 项目文档
- 克隆项目到本地
- 创建虚拟环境:
python -m venv venv- 激活虚拟环境:
venv\Scripts\activate # Windows- 安装依赖:
pip install -r requirements.txt- 运行开发版本:
python run.py- 遵循PEP 8代码风格规范
- 所有函数和类都需要添加文档字符串
- 变量命名使用小写字母和下划线组合
- 类名使用驼峰命名法
A: 请确保已正确安装所有依赖包:
pip install -r requirements.txt如果仍然缺少依赖,请根据错误信息单独安装缺少的包。
A: 视频处理速度受以下因素影响:
- 视频分辨率和时长
- 计算机硬件配置
- 是否启用GPU加速
- LDM步数设置
建议:
- 确保已启用GPU加速(如果硬件支持)
- 适当降低LDM步数
- 对大文件考虑先进行剪辑或压缩
A: 可以尝试以下方法优化:
- 调整水印检测参数(采样帧数、最小帧数等)
- 切换到手动模式,精确框选水印区域
- 增加LDM步数(会增加处理时间)
- 尝试调整颜色分割选项
A: 目前版本需要通过直接修改数据库实现,后续版本将添加密码修改功能。
A: 支持常见的视频格式如MP4、AVI、MOV、MKV、FLV、WMV等。
- 首次发布
- 实现核心视频去水印功能
- 添加用户权限管理系统
- 实现管理员功能(用户管理、操作日志)
- 支持GPU加速
如有问题或建议,请联系开发团队。
欢迎提交Issue和Pull Request来帮助改进这个项目!
注意:本软件仅供学习和研究使用,请勿用于非法用途。使用本软件处理受版权保护的视频前,请确保您拥有相应的权限。