[P0] 查重优化: 查重率百分比计算 + 跨项目查重 #1660

Closed
opened 2026-09-03 18:44:46 +08:00 by xiaoxia · 0 comments
Owner

背景

当前只返回 is_duplicate 布尔值,无法输出"重复了多少"。查重范围仅限项目内。

任务

1. 查重率计算

双指标加权公式:

duplicate_rate = frame_match_rate × 0.4 + temporal_coverage_rate × 0.6
  • frame_match_rate = 汉明距离低于阈值的帧数 / 总帧数
  • temporal_coverage_rate = 连续匹配片段总时长 / 视频总时长
  • 时序覆盖率权重更高(60%),与平台"连续重复画面占比"判定逻辑一致

2. 跨项目查重

  • check_duplicate() 增加 scope 参数:
    • "project": 当前项目内(默认,向后兼容)
    • "user": 当前用户所有项目
  • 增加时长预过滤(±15% 容差),减少不必要的指纹比对
  • 需要在 GeneratedVideoRepository 中新增 list_by_user(user_id) 方法

3. 结果输出扩展

更新查重结果数据结构:

  • is_duplicate: bool(保留,向后兼容)
  • duplicate_rate: float (0-1)
  • duplicate_of: str
  • duplicate_segments: list (重复片段列表)
  • visual_similarity: float
  • match_count: int

优先级

P0

依赖

Issue #1658, #1659

技术债务约束(铁律)

  • 新代码必须有单元测试覆盖(每个新增/修改函数都要有测试)
  • API 向后兼容:旧字段保留不删,新字段是扩展不是替换
  • 旧逻辑代码改造完成后直接替换,不留 if/else 分支兼容新旧两套
  • staging 先验证通过再上生产
## 背景 当前只返回 is_duplicate 布尔值,无法输出"重复了多少"。查重范围仅限项目内。 ## 任务 ### 1. 查重率计算 双指标加权公式: ``` duplicate_rate = frame_match_rate × 0.4 + temporal_coverage_rate × 0.6 ``` - frame_match_rate = 汉明距离低于阈值的帧数 / 总帧数 - temporal_coverage_rate = 连续匹配片段总时长 / 视频总时长 - 时序覆盖率权重更高(60%),与平台"连续重复画面占比"判定逻辑一致 ### 2. 跨项目查重 - 在 `check_duplicate()` 增加 `scope` 参数: - `"project"`: 当前项目内(默认,向后兼容) - `"user"`: 当前用户所有项目 - 增加时长预过滤(±15% 容差),减少不必要的指纹比对 - 需要在 GeneratedVideoRepository 中新增 `list_by_user(user_id)` 方法 ### 3. 结果输出扩展 更新查重结果数据结构: - `is_duplicate: bool`(保留,向后兼容) - `duplicate_rate: float` (0-1) - `duplicate_of: str` - `duplicate_segments: list` (重复片段列表) - `visual_similarity: float` - `match_count: int` ## 优先级 P0 ## 依赖 Issue #1658, #1659 ## 技术债务约束(铁律) - 新代码必须有单元测试覆盖(每个新增/修改函数都要有测试) - API 向后兼容:旧字段保留不删,新字段是扩展不是替换 - 旧逻辑代码改造完成后直接替换,不留 if/else 分支兼容新旧两套 - staging 先验证通过再上生产
xiaoxia added this to the 技术债务与优化 milestone 2026-09-03 18:44:46 +08:00
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: xiaoxia/xiaoxia-saas#1660