From 634ff746a9103dec357b3b6535c1b4e492e13738 Mon Sep 17 00:00:00 2001 From: ericwyuan Date: Thu, 20 Aug 2026 20:44:52 +0800 Subject: [PATCH] =?UTF-8?q?docs:=20update=20PROGRESS.md=20-=20UI=E6=97=B6?= =?UTF-8?q?=E9=97=B4=E8=BD=B4=E9=87=8D=E6=9E=84=20+=20=E5=85=B3=E9=94=AE?= =?UTF-8?q?=E5=B8=A7=E6=8C=81=E4=B9=85=E5=8C=96=20+=20multipart=E8=B6=85?= =?UTF-8?q?=E6=97=B6=E4=BF=AE=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- PROGRESS.md | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/PROGRESS.md b/PROGRESS.md index 1678e53..0b1d627 100644 --- a/PROGRESS.md +++ b/PROGRESS.md @@ -339,3 +339,33 @@ AI 分析瓶颈: 帧5耗时 229s (疑似 ARM CPU 热降频), 其余帧 50-65s - Edge 单测:`/api/edge/chat/ask` → 200,`provider=nvidia`(Gemini 30s 超时后 NVIDIA 兜底成功,耗时 51s) - NAS E2E:插入临时事件上下文后 `/api/chat/ask` → 43s 返回模型回答,`context_summary` 命中 1 条事件,chat_id 落库;测试数据已清理 - 无上下文时走短路分支(直接返回提示,不调 Edge),响应 <1s,属正常设计 + +## UI 时间轴重构 + 关键帧全链路持久化 (2026-08-20 20:45, commit 0d5173f/c5c8496) + +**UI 重构(fam-ui/src/app.py 全量重写)** +- 深色监控面板主题(CSS 变量 + 卡片化设计) +- 事件时间轴页:左侧事件列表(时间/摄像头/帧数/摘要),右侧竖向时间轴(时间点 + 关键帧缩略图 224px + 人物/动作/衣着摘要 + 模型徽章),需关注事件红色高亮 +- 其余页面:AI 对话、对话历史、成员命名、统计图表同步适配新主题 +- 侧边栏任务队列状态(待处理/处理中/失败计数) + +**关键帧持久化链路(Edge → NAS → UI)** +- Edge `orchestrator._attach_frame_images`:处理结果注入关键帧 base64(按视觉分析输入帧位置对齐) +- NAS `event_receiver._save_frame_images`:base64 解码落盘到 `fam-ui/static/frames/event_{id}/frame_{idx}.jpg`(先落盘 pop 掉 base64 再入库,避免大字段进 MariaDB) +- UI `load_frame_b64`:读取落盘帧图内联 data URI 渲染;旧事件无帧图显示占位符 +- 配置:`fam-core/config.yaml` + `fam-ui/config.yaml` 新增 `storage.frame_image_dir` + +**multipart 上传超时修复(commit c5c8496)** +- 现象:task 50/51 直接上传 17.1MB 100% 失败 `('Connection aborted.', TimeoutError)`,恰好 10s 超时 +- 根因:requests/urllib3 发送 multipart body 期间 socket timeout 取的是 **connect timeout** 参数而非 read timeout,原 `(10, 300)` 下 17MB 跨境 1.4MB/s 需 ~117s 必然超时 +- 修复:`_dispatch_direct` timeout 改 `(120, 300)` + +**端到端验证(2026-08-20 20:24-20:41)** +- task 53:压缩 20.6MB → 分块上传 5/5(36s)→ Edge 分析 → Poller 落库 event_29(6 帧落盘) +- task 50:直接上传成功(117s,超时修复生效)→ event_30(6 帧) +- task 51:直接上传成功 → event_31(6 帧);task 52:重压缩 21.9MB → event_32(7 帧) +- UI 浏览器实测:点击事件 #29 → 时间轴 6 个时间点、6 张关键帧全部加载(夜视画面可见人物)、每帧下方人物/动作摘要正常渲染 +- 重启残留处理:task 52 重启时被中断的孤儿 ffmpeg 已清理(`{out}.{pid}.tmp` 原子改名机制保证无损坏文件),重置 PENDING 后自动重跑成功 + +**经验** +- Streamlit 1.61 窄视口(<960px)下 st.columns 自动垂直堆叠,详情区被挤到事件列表下方;浏览器自动化验证需注意 window 尺寸,用户桌面浏览器不受影响 +- 旧事件(新代码部署前)无落盘帧图属预期,占位符正常显示