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

This commit is contained in:
ericwyuan
2026-08-21 13:37:23 +08:00
parent b7b5fe6f0b
commit 41485072bf
5 changed files with 74 additions and 4 deletions

View File

@@ -25,6 +25,8 @@ from config_loader import load_config
_cfg = load_config()
_core_url = _cfg.get('core_url', 'http://127.0.0.1:8000')
_oracle_url = (_cfg.get('oracle_url') or '').rstrip('/')
_oracle_token = _cfg.get('oracle_token') or ''
_db_cfg = _cfg.get('database', {})
esc = _html.escape
@@ -518,8 +520,18 @@ if page == "🕒 事件时间轴":
f'<span class="bdg bdg-model">{esc(p)}</span>' for p in str(provider).split(','))
summary = vid.get('summary_json') or '暂无全局摘要'
# 视频缩略图Oracle 带 token 接口,无图时优雅降级)
thumb_html = ''
if _oracle_url:
thumb_html = (
f'<img src="{_oracle_url}/api/oracle/video/{vid["id"]}/thumb'
f'?token={_oracle_token}" '
f'style="width:100%;max-height:240px;object-fit:cover;'
f'border-radius:10px;margin-bottom:10px;'
f'onerror="this.style.display=\'none\'"/>')
st.markdown(
f'<div class="ev-head">'
f'{thumb_html}'
f'<div class="ev-title">'
f'<span>{esc(vid.get("camera_name") or "未知摄像头")}</span>'
f'<span class="bdg bdg-cam">会话 #{vid["id"]}</span>'
@@ -534,8 +546,11 @@ if page == "🕒 事件时间轴":
try:
cursor = conn.cursor()
cursor.execute(
"""SELECT ts, description, person_list_json, is_attention_event, camera_name
FROM sync_events WHERE video_id=%s ORDER BY ts ASC""",
"""SELECT e.ts, e.description, e.person_list_json,
e.is_attention_event, v.camera_name
FROM sync_events e
JOIN sync_videos v ON e.video_id = v.id
WHERE e.video_id=%s ORDER BY e.ts ASC""",
(selected_id,))
events = cursor.fetchall()
finally: