feat(fam-edge): DSM 运动侦测预过滤 - 空转时段跳过云端视频分析
群晖 Surveillance Station 用 SYNO.SurveillanceStation.EventCenter.Event(未公开 文档的内部接口,参数是下划线风格 camera_ids/start_time/end_time,公开文档里的 cameraIds/fromTime/toTime 是旧版 Event API 的参数名,两者不通用)记录了摄像头 真实的运动侦测事件(event_type=10=运动,start_time+duration 精确到秒),比自己 本地跑 ffmpeg 帧差分更准、不需要额外算力,之前一直在这台 NAS 上验证可行性。 新增 DsmMotionClient:process_video() 分析每段视频前,先用视频的 [event_start, event_start+duration] 时间窗查一次这个接口,窗口内一条运动事件都 没有就跳过云端分析(标记 done,compute_provider=skipped_no_motion),省掉长期 无人时段白白消耗的 Gemini/NVIDIA 配额。 安全设计:查询本身失败/未配置/账号密码没填一律 fail-open(当作"有运动",照常 分析),不会因为这层可选优化漏检真实事件——这是一个纯粹的省配额优化,不能反过来 影响监控系统的可靠性。 新增 12 个单测覆盖:禁用/缺凭证时的 fail-open、登录失败、网络异常、无事件、有 事件、按 camera_id 过滤(响应是按 ds_id 分组不是按 camera_id,容易搞混)、 最短运动时长阈值、session 过期重登录重试、env 变量解析。 账号密码走 .env 的 DSM_ACCOUNT/DSM_PASSWORD,不明文入库。
This commit is contained in:
@@ -47,6 +47,23 @@ video_processing:
|
||||
# 降级顺序:先 gemini 整视频,失败再 nvidia 整视频;两者都失败 -> 标记 failed
|
||||
vision_order: ["gemini", "nvidia"]
|
||||
|
||||
# DSM 运动侦测预过滤(2026-08-22 新增):分析前先查一下群晖 Surveillance Station
|
||||
# 自己记录的运动侦测事件(SYNO.SurveillanceStation.EventCenter.Event,未公开文档的
|
||||
# 内部接口,参数名是下划线风格 camera_ids/start_time/end_time),这段时间窗口一条
|
||||
# 运动事件都没有就跳过云端分析(标记 done,compute_provider=skipped_no_motion),
|
||||
# 省掉长期无人时段白白消耗的 Gemini/NVIDIA 配额。
|
||||
# 账号密码走 .env(DSM_ACCOUNT/DSM_PASSWORD),不明文入库;查询失败/未配置一律
|
||||
# fail-open(照常送云端分析),不会因为这层可选优化漏检真实事件。
|
||||
dsm_motion_prefilter:
|
||||
enabled: true
|
||||
host: "192.168.50.64"
|
||||
port: 5000
|
||||
account: "${DSM_ACCOUNT}"
|
||||
password: "${DSM_PASSWORD}"
|
||||
camera_id: 2 # Surveillance Station 里 Generic_ONVIF-001 的 camera_id
|
||||
min_motion_seconds: 0 # 窗口内运动事件总时长需 ≥ 此值才算"有运动"(0=有事件就算)
|
||||
timeout_sec: 10
|
||||
|
||||
# 智能问答降级链(与视频分析独立):Gemini -> NVIDIA -> 本地 Ollama
|
||||
models:
|
||||
- provider: "gemini"
|
||||
|
||||
Reference in New Issue
Block a user