docs: update PROGRESS.md - Gemini视觉解析排查结论+业务全流程图

This commit is contained in:
ericwyuan
2026-08-20 16:15:28 +08:00
parent f4e742481d
commit 8a62c46194

View File

@@ -1,6 +1,6 @@
# 项目进度追踪
> 最后更新: 2026-08-20 15:45
> 最后更新: 2026-08-20 16:30
## 服务运行状态
@@ -161,6 +161,49 @@
19. **chunk_size 变更防护** - Edge 端 upload_chunk 检测 total_chunks 变更(由 chunk_size 变化导致),自动清理旧分块防止混合不同大小分块导致 assemble 后文件损坏。NAS 端 _query_uploaded_chunks 比对 expected_total != edge_total 时跳过断点续传
20. **看门狗机制** - app.py 启动 daemon 看门狗线程,每 60s 检查 scheduler/dispatcher/poller 线程 is_alive(),崩溃自动 check_and_restart()。/api/status 改用 thread.is_alive() 替代 _running 标志,防止线程假死误报
## Gemini 视觉解析排查 + 业务全流程梳理 (2026-08-20 16:30, commit f4e7424)
**结论: Gemini 可以解析视频(多帧视觉分析),且有 40s 完成整段分析的实测记录,但当前被三重问题压制**
### 排查过程
1. 日志证据: 07:43:05 Gemini 返回了完整 JSON耗时 40s6 帧多图分析),但被本地 `parse_vlm_json` 拒收——"缺失字段: compute_provider"
2. 根因: `validate_schema``compute_provider` 列为必填,但提示词从不要求模型输出它(该字段是 orchestrator 解析成功后自行填充的记账字段)→ **Gemini 的有效响应被 100% 误杀**NVIDIA 走单帧轻量解析绕过校验故不受影响
3. 修复 (commit f4e7424): `compute_provider` 移出必填清单,归一为空数组由 `format_cloud_result` 覆盖填充,已部署 Edge
### 当前外部服务状态(与代码无关的临时故障)
| 模型 | 状态 | 表现 |
|------|------|------|
| Gemini | ❌ 503 过载 | "high demand, temporary",早间多次 503 |
| NVIDIA NIM | ❌ 500 推理连接错误 | llama-3.2-11b-vision 端点持续 Internal Server Error |
| Ollama qwen2.5:7b | ✅ 但纯文本 | 无法做视觉分析,故双云故障期间任务全失败 |
task 298/300 失败均因双模型同时故障NAS 端 FAILED 已重置 PENDING22 个积压),模型恢复后自动重跑。
### 强杀服务引发的边缘情况(已自愈,无需修码)
- 强杀 processing 中的 worker 后,视频文件消失但队列行卡 PROCESSING → 新 run 的 60 次 seek 全部 0.07s 快速失败,但复用上一 run 残留的帧目录完成分析
- 已通过手动 reset PROCESSING→PENDING 恢复;正常流程下不建议 kill -9 处理中的任务
### 业务全流程(当前架构)
```
[摄像头 SurveillanceStation] → 30min/段 落盘 NAS /volume1/surveillance (360MB 1080p)
↓ Scheduler (60s 扫描, 文件稳定 60s 判定)
[MariaDB process_tasks: PENDING] ← 每段视频一个任务
↓ Dispatcher (30s 轮询, 串行 limit=1)
① FFmpeg 预压缩: 480p/CRF28/veryfast, 360MB→22MB (16x), ~560s, 缓存24h
② 5MB 分块上传 Edge: 5 块, ~60-100s, 断点续传+3次块级重试
[Edge SQLite task_queue: PENDING] (UNIQUE nas_task_id, 失败重派发自动重置)
↓ Consumer 线程 (10s 轮询, TokenBucket 限速: Gemini 1000RPM/NVIDIA 40RPM)
③ 抽帧: 快速 seek 粗抽 60 候选 → MSE 帧差筛 6-12 关键帧 → 压缩 JPEG
④ 视觉分析: Gemini 多图(首选,~40s) → NVIDIA 单帧(降级,~30s) → 全失败则 FAILED
⑤ 融合: frame_details + global_summary + entities_json (compute_provider 记账)
↓ Poller (30s 拉取 /api/edge/results, SUCCESS+FAILED 均回传)
[MariaDB monitor_events + event_details 落库, event_id 递增]
↓ FAM-UI (Streamlit :8501) / Chat (Gemini→NVIDIA→Ollama 降级)
[用户查看事件时间线 / 命名成员 / 问答]
```
**单任务周期 ~12 分钟**(压缩 9.3min + 上传 1min + 分析 1min瓶颈在 NAS ARM CPU 压缩速度。
## 视频上传问题根因排查与修复 (2026-08-20 15:45, commit 8cb5553)
**问题定性**: 网络问题 + 逻辑问题双重叠加