Skip to content

v5.7.0 — 无变化视频帧长图证据(可缩放+时间戳+AI查询)

Choose a tag to compare

@lza6 lza6 released this 05 Sep 06:32
· 92 commits to main since this release

🎯 核心痛点修复:无变化视频零证据

监控批量分析里 motion_detector 判定"无变化"的视频直接跳过 AI,用户拿到 0 命中但看不到任何画面,无法核对算法是否漏判、无法定位"这一刻到底有没有人经过"——伪证据盲区。

v5.7.0 修复:全视频(无变化+有变化+命中)都把 1fps 抽帧落盘到 frames/<run_id>/,拼成带 MM:SS 时间戳标注的长图 strip.png,20 张/行横向铺满换行,可滚轮缩放 + 拖动平移 + 单帧原图查看 + 跳转播放器定位 + AI 查询时间点。

🔧 改动

新增

  • src/core/frame_strip.py — 纯 Pillow 拼接器,FrameStripBuilder.build(frame_dir, out_path, cols=20):扫帧→缩略 160px→底部画 MM:SS 黑底白字→20 列网格 PNG。零 AI 调用,毫秒级。
  • src/ui/frame_strip_dialog.py — FrameStripDialog:QGraphicsView + QGraphicsPixmapItem 展示长图,滚轮缩放(10%–800%)+ ScrollHandDrag 拖动 + "适合窗口"重置 + "询问 AI 这一帧"(时间点复制剪贴板 + 跳转播放器)+ "打开帧目录"。
  • tests/test_frame_strip.py — 4 单测:网格尺寸/空目录/时间排序/MM:SS 格式。

修改

  • motion_detector.py — MotionConfig.frame_out_dir 帧持久化(空配置零回归)。
  • batch_runner.py — _build_filmstrip 全视频生成长图,clean_segments 只清 segments。
  • run_store.py — runs 表加 strip_path 列(旧库自动迁移)。
  • batch_tab.py — _RunDetailDialog 加查看帧长图按钮 + strip_seek_requested 信号。
  • main_window.py — _on_strip_seek_request 打开/复用播放器定位 ts。
  • agent_dialog.py — 补齐 append_thoughts(v5.6 误调用导致启动崩溃修复)。

🧪 验证(真实证据)

  • pyflakes:7 个改/新文件零告警 ✅
  • 单测 test_frame_strip:4 passed ✅
  • 回归 test_agent_tools + test_core_pipeline:17 passed ✅
  • 真实 E2E(_376.mp4 无变化 17.7min):detect 190s → 1065 帧落盘 → strip.png 3242×6158(54 行×20 列)生成成功 ✅

📦 安装/升级

无新依赖(Pillow 已声明 pillow>=11.3,<12)。旧 runs.db 自动迁移补 strip_path 列。

完整 changelog:见 CHANGELOG.md