ericwyuan
|
68337f81c4
|
fix(fam-edge): 视频分析 max_tokens 4096→16384 - 3秒密度+person_appearances 特征使输出 JSON 巨大被截断导致解析失败
|
2026-08-21 18:26:51 +08:00 |
|
ericwyuan
|
ff01d14c79
|
feat(v3): 人物模块重构 - 大模型结构化特征值替代 OpenCV 帧定位。prompt 增加 person_appearances(uid+7特征+action)并重写合并 prompt(稳定特征优先比对);gemini 透传特征字段;oracle_db events/people 加 person_appearances_json/features_json/display_uid + _merge_features;video_processor 去 cv2 改 ffprobe 校验、_store_result 聚合 uid 特征落 people、删缩略图/事件截图;person_service 聚合特征后基于特征文本 LLM 合并;api_gateway 删 3 个图接口;NAS 镜像+DDL 加新字段;fam-ui 特征卡替代头像、事件时间线人物特征块
|
2026-08-21 18:06:21 +08:00 |
|
ericwyuan
|
2ba3478291
|
fix(头像): 人物头像改为'出现事件画面'而非视频首帧 - 新增 /api/oracle/person/avatar(在该人物所有出现事件中返回第一个有截图的事件画面,JSON 精确匹配);撤销 event_thumb 的视频首帧兜底(首帧可能无人/非本人);fam-ui 人物页改调 avatar 接口
|
2026-08-21 16:13:05 +08:00 |
|
ericwyuan
|
27bfd6abbe
|
fix(api): 事件截图接口兜底 - ev_{id}.jpg 缺失时返回所属视频首帧缩略图(thumbs/{video_id}.jpg),避免旧事件/未生成截图导致前端头像空白
|
2026-08-21 16:09:55 +08:00 |
|
ericwyuan
|
02fc80b3b2
|
fix(fam-edge): 模型调用 started_at 改北京时间(UTC+8) - 原 datetime.now() 取 Oracle UTC 导致前端模型统计时间差 8 小时
|
2026-08-21 16:05:17 +08:00 |
|
ericwyuan
|
fec9a3e586
|
fix(fam-edge): video_queue 补 Dict 类型导入(status() 注解导致 worker 启动 NameError)
|
2026-08-21 15:53:58 +08:00 |
|
ericwyuan
|
0d0a7f6ef8
|
feat(监控): 实时服务状态界面 - Oracle 新增 service_activity 活动表(只保留7天,写入时清理)与 /api/oracle/activity 接口(队列实时状态/当前处理视频/模型调用/rclone/人物合并/最近50条活动);VideoQueue 打点+当前处理跟踪+status();PersonService 打点;rclone_sync.sh 同步结果写活动表;fam-ui 新增'🖥 服务状态'页(状态卡+活动时间流,直连 Oracle 实时拉取)
|
2026-08-21 15:52:36 +08:00 |
|
ericwyuan
|
da7631976d
|
fix(ui): 日期维度改用视频录制时间 - 前端事件时间轴/统计/关注事件与后端 db_layer 统一按 event_start_time(文件名解析) 分组排序,空值回退 processed_at;修复全量重分析导致处理时间(8/21)把 8/15-8/20 视频全堆同一天、与文件名对不上的问题
|
2026-08-21 15:00:41 +08:00 |
|
ericwyuan
|
0d73c23bd1
|
fix(fam-edge): 人物标识清洗 - _clean_person 去括号注释(防模型输出'人物A(别名/标识:人物B)'污染人物表);prompt 明确 people 只填标识本身;events.people 与 people_mentioned 均清洗
|
2026-08-21 14:47:47 +08:00 |
|
ericwyuan
|
a72b286bd7
|
refactor(prompt): Prompt 集中化 - 新增 fam-edge ai_orchestrator/prompts.py(视频分析/智能问答/人物合并三模板共享,消除 gemini/nvidia 两份发散);gemini/nvidia _build_video_prompt 改调共享函数并注入 camera_name;person_service 改调 build_person_merge_prompt;fam-core chat_handler 独立 prompts.py(跨模块风格一致)替代内联 CHAT_SYSTEM_PROMPT;输出硬约束(首字符{/禁markdown)、3 秒密度抽取、people_mentioned 一致性强制、描述 7 维度、人物合并唯一性约束
|
2026-08-21 14:42:27 +08:00 |
|
ericwyuan
|
4e85a98944
|
fix(锁与查询组): #12 熔断器状态转换加锁;#10 问答人名匹配改 JSON_CONTAINS 精确匹配(防 LIKE 子串/特殊字符误匹配);#4 OracleDB 复合写加锁;#6 每消费者独立 VideoProcessor(消除 adapter.timeout 共享竞争);#15 done 视频文件被覆盖(mtime>processed_at)自动重置重分析
|
2026-08-21 14:24:12 +08:00 |
|
ericwyuan
|
034dca92b2
|
fix(优先组): #18 密钥明文直配 config(弃 .env 依赖);#5 appearances 改 distinct 视频数覆盖校准(防 reconcile 累加膨胀);#9 oracle_sync 拉取加锁防 trigger_now 与后台并发双拉;#11 LLM 合并命名解析 target 已有 canonical(统一显示名)
|
2026-08-21 14:22:28 +08:00 |
|
ericwyuan
|
6afdda582b
|
feat(fam-edge): 队列健壮性 - ①失败重试间隔 retry_interval_sec=1h(last_fail_at 记录,配额类故障等恢复再试);②max_retries 2→10;③入队前 OpenCV 文件校验(可解码/大小/元数据,失败标 invalid 不入队)+ mtime 稳定窗口防 rclone 半成品 + 处理前二次确认
|
2026-08-21 14:09:38 +08:00 |
|
ericwyuan
|
92ef9fe163
|
feat(ui): 人物管理显示人物代表画面 - 每个身份取其一 label 出现事件的截图作为头像(Oracle event thumb 接口)
|
2026-08-21 14:03:43 +08:00 |
|
ericwyuan
|
3fcd00d4c8
|
fix(fam-edge): 文件名解析支持纯数字 YYYYMMDD-HHMMSS 格式(监控录像名 20260820-140416,原正则只认带分隔符);事件相对时间加 6h 启发式防误判绝对时间
|
2026-08-21 13:52:47 +08:00 |
|
ericwyuan
|
5233296dd3
|
fix(fam-edge): 事件时间戳改相对时间定位 - prompt 要求输出视频内相对时间 HH:MM:SS(模型对相对位置判断更准),后端按 开始时间+偏移 精确计算绝对时间落库;事件截图直接用偏移跳帧,消除模型绝对时间推算误差导致的图文不符
|
2026-08-21 13:48:46 +08:00 |
|
ericwyuan
|
05f727a9ef
|
feat(events): 每个事件生成对应时间点画面截图 - oracle_db.mark_video_processed 返回 event_ids;video_processor 按事件时间戳-视频起始时间偏移跳帧截图存 ev_{id}.jpg;新增 /api/oracle/event/{id}/thumb 接口;fam-ui 事件列表每条显示对应截图
|
2026-08-21 13:44:16 +08:00 |
|
ericwyuan
|
41485072bf
|
fix(ui): sync_events 查询补 JOIN sync_videos 取 camera_name(修 1054 报错);feat(缩略图): Oracle 处理成功后抽首帧存 thumbs/{id}.jpg + /api/oracle/video/{id}/thumb 带 token 接口;fam-ui 视频会话显示缩略图(oracle_url+token);start_ui.sh 注入 .env
|
2026-08-21 13:37:23 +08:00 |
|
ericwyuan
|
b7b5fe6f0b
|
feat(fam-edge): NVIDIA 多模型降级链 - adapter 支持 model_chain(asset 上传一次逐个尝试)+switch_interval_sec 切换间隔+model_timeouts 每模型独立超时;实测全部候选不可用(omni 500/12b 400/其余 404),链机制保留待可用模型
|
2026-08-21 13:30:59 +08:00 |
|
ericwyuan
|
83eefc194a
|
config(fam-edge): gemini-flash-lite 超时放宽至 480s(8 分钟,用户要求;实测 22-34s 留足余量)
|
2026-08-21 13:07:42 +08:00 |
|
ericwyuan
|
3e94c2a8b0
|
feat(nas): 模型调用统计镜像与界面 - sync_model_calls 表+拉取+聚合统计;fam-ui 新增'🤖 模型统计'页(按模型成功/失败/成功率/平均耗时 + 最近调用明细含失败原因)
|
2026-08-21 12:23:32 +08:00 |
|
ericwyuan
|
b87b38b140
|
feat(fam-edge): 云端模型调用统计 - 新增 model_calls 表(provider/model/时间/耗时/成功/失败原因),gemini/nvidia 每次请求经 model_call_hook 记录并随 sync delta 下发;gemini 支持模型级 model_timeouts(lite 实测22.6s×4≈90s)
|
2026-08-21 12:21:49 +08:00 |
|
ericwyuan
|
1b0f62e5e9
|
chore(fam-edge): gemini 模型链每个模型请求前打印当前超时(确认 ×2 对 flash/flash-lite 均生效)
|
2026-08-21 12:13:02 +08:00 |
|
ericwyuan
|
ce27e4ab0c
|
feat(fam-edge): 视频生产-消费队列 - 新增 video_queue.py(生产者扫描新文件入队+重启恢复,独立消费者线程云端分析);模型消费超时按原配置×timeout_multiplier(2);failed 重试上限 max_retries(2);删除旧 watch_processor
|
2026-08-21 12:01:25 +08:00 |
|
ericwyuan
|
ab5b706eeb
|
fix(fam-edge): schema 对齐新架构 - parse_vlm_json 必填改 global_summary/events(兼容旧 frame_details/entities_json 转换);NVIDIA PUT content-type 值改为 video/mp4 与 POST 一致(预签名校验)
|
2026-08-21 11:47:33 +08:00 |
|
ericwyuan
|
daf0f8377b
|
fix(fam-edge): 上传端点与签名修正 - Gemini 上传改用 /upload/v1beta/files 端点(原 /v1beta/files 非上传端点);NVIDIA PUT 用全小写 content-type 头(S3 预签名校验)
|
2026-08-21 11:43:58 +08:00 |
|
ericwyuan
|
d54070ece4
|
fix(fam-edge): 整视频上传方式修正 - Gemini 改 resumable 可续传协议(370MB 不再 raw 单发超时);NVIDIA 改 Assets API 上传拿 asset_id(video_url 引用),规避 25MB payload 上限
|
2026-08-21 11:37:24 +08:00 |
|
ericwyuan
|
f20b6c9254
|
fix(fam-edge): WatchProcessor 递归扫描子目录(GDrive 录像按 YYYYMMDDAM/PM 子目录组织)
|
2026-08-21 11:28:14 +08:00 |
|
ericwyuan
|
dbc5193659
|
fix(nas): sync_cursor 查询 key/value 列加反引号(MariaDB 保留字导致 /api/status 500)
|
2026-08-21 11:23:25 +08:00 |
|
ericwyuan
|
8ca02495bf
|
fix(nas): start_core.sh 启动时 source 项目 .env 注入 ORACLE_SYNC_TOKEN
|
2026-08-21 11:09:46 +08:00 |
|
ericwyuan
|
8960a8bf6b
|
fix(sql): sync_cursor 表 key/value 列加反引号(MariaDB 保留字)
|
2026-08-21 11:06:41 +08:00 |
|
ericwyuan
|
ec25f4f50c
|
fix(fam-edge): ollama_adapter 补充缺失的 Dict 类型导入(修复 worker 启动 NameError)
|
2026-08-21 10:59:32 +08:00 |
|
ericwyuan
|
44026b65ea
|
[阶段3] FAM-Core 瘦身为管理后台+Oracle-Sync 同步引擎,FAM-UI 改读同步镜像 - 删除 scheduler/dispatcher/poller/event_receiver/video_server,新增 oracle_sync 每30分钟拉增量写 sync_* 镜像表;member_manager/chat_handler 改走同步数据;UI 移除帧图改为事件时间线;DDL 新增 sync_videos/events/people/cursor
|
2026-08-21 10:38:26 +08:00 |
|
ericwyuan
|
9b1cc8f93b
|
[阶段2] FAM-Edge 重构为整视频分析+同步接口+人物服务 - 移除切片/抽帧/队列,新增 oracle_db/person_service/qa/watch_processor/video_processor,api_gateway 提供 /api/oracle/sync 与 /api/oracle/people/correct
|
2026-08-21 10:38:15 +08:00 |
|
ericwyuan
|
ae1c13589f
|
fix(人物管理): 头像优先选独照帧,避免双人图当头像
人物卡片头像挑选策略调整:
1. 优先『独照』帧——该帧只有当前人物一个标签且 face_count=1(双人图不再作为某人头像)
2. 无独照时退而求其次用 face_count 最大的帧
3. 最后按时间序第一张兜底
修复: 一张图出现两人时(如 event_21/frame_3 '人物1, 人物2'),两人卡片都拿双人图做头像、无法区分的问题
|
2026-08-21 05:54:38 +08:00 |
|
ericwyuan
|
73f6c77544
|
feat(人物管理): 头像优先选有人脸帧 + 人物合并到操作
1. person_photo 读 event 的 meta.json(face_count),优先挑人脸数最多的帧做头像,无 meta 时按时间序第一张兜底
2. 人物卡片新增「合并到」下拉框+按钮,调 /api/member/merge(source=当前人物,target=所选人物),展示替换明细数
3. 至此设计文档 8 项需求全部落地(Edge 画框/mark_frames 端点/meta.json/backfill/merge_member/merge 路由/UI 头像+合并)
|
2026-08-21 00:57:20 +08:00 |
|
ericwyuan
|
43b3178a9d
|
feat(人物管理/红框标记): 关键帧人脸标记 + 人物命名重命名回溯 + 人物管理页改版
1. fam-edge 新增 frame_marker.py: Edge 端人脸检测画红框+统计人脸数(NAS ARM 太弱只存图零计算),orchestrator 分析后回传前标记,新增 /api/edge/mark_frames 批量补标端点
2. fam-core 新增 tools/backfill_mark_frames.py: 存量关键帧批量补红框(幂等+备份 frames_orig)
3. db_layer.name_member 增强: 支持自动注册新标签/重命名回溯(旧真名一并替换)/多人组合字符串 REPLACE
4. fam-ui 成员命名页改为人物管理页: 所有人物照片墙+命名重命名+统计去重
5. event_receiver/member_manager 配套适配
|
2026-08-21 00:53:30 +08:00 |
|
ericwyuan
|
47c42f24df
|
docs: update PROGRESS.md - 人物统计去重与导航改进
|
2026-08-21 00:22:41 +08:00 |
|
ericwyuan
|
3fb86ee449
|
fix: 出现人物统计去重 + 导航移至页面顶部
- person 字段是自由文本,一帧可为多人组合且带括号特征描述
('张三 (红色T恤), 汤圆, 人物3'),COUNT(DISTINCT person) 把每种
组合字符串当一个人物,全局误报 20 人。新增 resolve_persons:
去括号描述 -> 按中英逗号/顿号/斜杠拆分 -> family_members
抽象标签映射真名,去重后全局实际 6 人
- 导航从侧边栏 radio 改为顶部 segmented_control:窄屏下
Streamlit 侧边栏自动收起,页面入口藏进汉堡菜单导致
"成员命名/问答界面不见了";放主区域顶部任何屏宽可见
|
2026-08-21 00:22:24 +08:00 |
|
ericwyuan
|
5d574029b0
|
docs: update PROGRESS.md - Gemini 降级排查修复
|
2026-08-21 00:07:56 +08:00 |
|
ericwyuan
|
eaf4ef3bd3
|
fix: Gemini 模型 fallback 链 — 修复全量降级 NVIDIA
根因: 免费层配额 GenerateRequestsPerDayPerProjectPerModel 每天每
模型仅 20 请求,日均 30+ 任务耗尽后持续 429,全部降级 NVIDIA
(最近40任务 35 nvidia / 4 gemini)。
- gemini_adapter 抽 _generate() 模型链调用: 429 立即切换下一模型
(flash -> flash-lite,各自独立 20/天配额),503 退避 3s 重试一次
再切换;视觉分析与问答统一走该链
- config: gemini 增 fallback_models,nvidia 恢复 nemotron-omni
(原生视频输入;此前 Oracle 线上手动改过未回传仓库,被旧配置
覆盖回 llama-3.2 逐帧模式) + timeout 30->120
- 健康检查校验整条模型链
实测 task 73: flash 429 -> lite 1s 内接管,12 帧直出,event_52
落库 provider=gemini。
|
2026-08-21 00:07:34 +08:00 |
|
ericwyuan
|
7efbee89fb
|
docs: update PROGRESS.md - 事件列表带年月日
|
2026-08-20 23:50:48 +08:00 |
|
ericwyuan
|
f50f98e292
|
ui: 事件列表条目带年月日 — 跨天事件可区分
跨多天的事件列表仅显示 HH:MM 无法区分日期。按钮标签加 MM-DD
前缀,摘要行加浅蓝 YYYY-MM-DD 前缀,摘要截断 26→30 字适配。
|
2026-08-20 23:50:31 +08:00 |
|
ericwyuan
|
6ecdffce04
|
docs: update PROGRESS.md - 压缩缓存回退补齐全部历史事件帧图
|
2026-08-20 22:42:31 +08:00 |
|
ericwyuan
|
80cc3249e5
|
feat: backfill_frames 支持压缩缓存回退 — 补齐全部历史事件帧图
原始视频被 Surveillance Station 保留策略删除后,回退到
/tmp/fam_compressed/task_{id}/ 的 480p 压缩副本抽帧。实测
event 18-27(08-14 晚间 10 事件)补 78 帧全部成功,至此
所有历史事件帧图齐全,UI 不再出现暂无帧图。
|
2026-08-20 22:42:08 +08:00 |
|
ericwyuan
|
3a3b68c428
|
docs: update PROGRESS.md - 历史事件关键帧补抽
|
2026-08-20 22:07:57 +08:00 |
|
ericwyuan
|
8a333d752d
|
feat: 历史事件关键帧补抽工具 backfill_frames.py
Edge 帧图注入上线前的旧事件无帧图,事件列表第一屏全是占位符。
按 frame_timestamp - event_start_time 偏移从原始视频抽帧补齐,
幂等可重跑。NAS ffmpeg41 无 image2 muxer,用 -f singlejpeg 输出。
实测补 11 事件 65 帧全部成功(2026-08-14 的 10 个事件视频已被
清理,无法补)。
|
2026-08-20 22:07:36 +08:00 |
|
ericwyuan
|
634ff746a9
|
docs: update PROGRESS.md - UI时间轴重构 + 关键帧持久化 + multipart超时修复
|
2026-08-20 20:44:52 +08:00 |
|
ericwyuan
|
c5c8496409
|
fix: 直接上传multipart超时 — connect timeout 10s→120s
requests/urllib3 发送 multipart body 期间 socket timeout 取的是
connect timeout 值而非 read timeout,跨境 1.4MB/s 下 17MB 视频需
~117s,原 10s 上限导致 100% 超时重试耗尽标记 FAILED。实测 task
50/51 修复后直接上传成功。
|
2026-08-20 20:43:50 +08:00 |
|
ericwyuan
|
0d5173f442
|
feat: UI 时间轴重构 + 关键帧图片全链路持久化
界面重做(深色监控面板主题):
- 事件时间轴页: 左侧事件列表卡片 + 右侧关键帧时间轴
(时间点 + 视频帧 + 人物/动作/衣着摘要 + 关注标记)
- 全局 CSS: 深色主题、卡片化按钮、统计卡、对话气泡、成员卡片
- 侧边栏任务队列状态徽章; 历史帧无图时优雅降级占位
关键帧持久化链路:
- Edge orchestrator: process_push_task 成功后把 keyframes
base64 注入 frame_details[i].frame_image (位置对齐视觉输入帧)
- NAS event_receiver: 落库前 base64 解码写盘到
fam-ui/static/frames/event_{id}/frame_{idx}.jpg
- payload 增量 ~300KB/事件 (6帧 jpeg q80), 队列/拉取均无压力
配置: fam-core/fam-ui 新增 storage.frame_image_dir
|
2026-08-20 19:50:36 +08:00 |
|