## 新架构:Oracle 集中计算 + NAS 代理展示 ### Oracle 端 (fam-edge) - 新增 frame_service: ffmpeg 视频抽帧 + VLM 人物定位裁剪头像(磁盘缓存) - 新增 /api/oracle/frame: 按 video_id+ts 抽帧返回 jpeg(带 token) - 新增 /api/oracle/avatar: 按 label 生成人物头像(VLM 定位人物 + 兜底整帧居中) - 新增 person_identifier: 人物身份识别模块 - Gemini 适配器支持 flash/flash-lite 双模型切换,429 自动降级 - frame_service VLM 全模型 429 时进入 10 分钟熔断,避免每次请求白打配额 - 兜底头像不落缓存,配额恢复后自动重试 VLM 精确定位 ### 人物合并硬规则校验(框架级修复) - person_service: LLM 合并结果落库前加硬冲突检测 - 性别冲突 → 绝不合并 - 年龄档跨未成年/成年 → 绝不合并(防止把爷爷/宝宝并进同一人) - oracle_db: upsert_person 入口剥离括号后缀(人物A(别名:人物B) → 人物A),消灭垃圾人物行 - 修复 set_canonical 丢弃 source 参数的 bug(旧代码硬编码 'manual' 导致错误合并被永久固化) - get_events_for_label: 只提取该身份组的特征文本,头像定位更精准 ### NAS 端 (fam-core) - 新增 img_proxy: /api/proxy/frame 和 /api/proxy/avatar 代理 Oracle 图片 - app.py 注册 img_bp 蓝图 - oracle_sync / db_layer / member_manager 同步人物表 ### UI 端 (fam-ui) - 事件时间轴: 每条事件卡片加时间点缩略帧 - 人物管理: 每人卡片加头像(150x150 圆角) - parse_persons: 剥离括号备注,与 Oracle 归一化一致 - 新增 EventItem 组件、Timeline 页改造 - Chat / ServiceStatus 页相应调整 ### 数据库 - scripts/ddl.sql: 同步表结构更新 - Oracle people 表: features_json / display_uid / source 字段完善
2.6 KiB
2.6 KiB
2026-08-20 工作记录
NAS 瘦身 + 甲骨文同步(架构重构收尾,任务 #49/#50/#57/#59)
完成 NAS 端从「视频处理节点」到「纯管理后台」的改造:
fam-core(NAS)改动
- 删除:scheduler / dispatcher / poller / event_receiver / video_server 五个模块 + tools/ 下 backfill 脚本(不再切片/抽帧/上传/提供视频下载)
- 新增
oracle_sync.py:唯一后台线程,每 30 分钟GET /api/oracle/sync?since=<cursor>&token=拉增量 → upsert 到本地 MariaDBsync_*镜像表 → 推进sync_cursor;push_name_correct回推命名校正 db_layer.py重写:移除 process_tasks/event_details/monitor_events/family_members 旧逻辑,新增 sync_videos/sync_events/sync_people/sync_cursor 的 upsert/查询、get_sync_stats、query_sync_events_for_person_date、get_sync_known_members_contextmember_manager.py:命名/合并改回推 Oracle/api/oracle/people/correct+ 即时 trigger_now 拉回chat_handler.py:上下文改查 sync_events(按 person_list_json + 视频日期过滤),仍走 Oracle/api/edge/chat/askapp.py:仅启动 OracleSync 线程,移除看门狗- config:删除 scheduler/dispatcher/poller/video_server/storage,新增
oracle_sync段(token 用${ORACLE_SYNC_TOKEN}环境变量)
fam-ui(NAS)改动
- 改写读 sync_videos/sync_events/sync_people;事件时间轴改为「视频会话列表 + 事件时间线」(无帧图);人物管理移除照片逻辑(仅标签/规范名/命名/合并);统计改自 sync 表;侧边栏任务队列状态改为同步状态
DDL / 文档
scripts/ddl.sql新增 sync_videos / sync_events / sync_people / sync_cursor 四张镜像表(时间字段用 VARCHAR 规避 MariaDB 严格模式)- README §1.1/§2.2/§3.1/§3.2/§3.3/§4/§5/§8.3 全面更新到新数据流(Google 硬盘→rclone→甲骨文→同步→NAS 镜像)
提交
[阶段2]fam-edge 重构(整视频分析+同步接口+人物服务)已 commit+push[阶段3]fam-core 瘦身+Oracle-Sync+UI 改读 已 commit+push
待办(#51 部署验证,未做)
- Oracle:rclone 配 Google 服务账号 JSON(orcLenas@gen-lang-client-0523399799.iam.gserviceaccount.com)→ systemd timer 定时同步到 /opt/fam-edge/gdrive_videos;设 ORACLE_SYNC_TOKEN 环境变量;重启 fam-edge
- NAS:MariaDB 跑新 DDL 建 sync_* 表;设 ORACLE_SYNC_TOKEN;重启 fam-core + fam-ui;卸载 NAS venv 无用包(opencv/numpy 等)
- 端到端验证:Google 硬盘新视频 → 甲骨文处理 → NAS 30 分钟同步可见
- 服务账号私钥未入库,部署时需单独落到 Oracle 服务器本地