rtsp_config_xishan.yaml 9.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185
  1. # ============================================================
  2. # 锡山中荷 水厂配置文件
  3. # ============================================================
  4. # 使用方法:python tool/migrate_yaml_to_db.py --yaml 本文件路径 --force
  5. # 导入后可通过 API(:8080)在线修改,无需再编辑此文件
  6. # ============================================================
  7. # ----------------------------------------------------------
  8. # 水厂列表(一个 YAML 文件只配一个水厂)
  9. # ----------------------------------------------------------
  10. plants:
  11. - name: 锡山中荷 # 水厂名称(用于日志和推送显示)
  12. enabled: true # 是否启用该水厂的检测
  13. project_id: 92 # 平台项目 ID(推送接口需要)
  14. # 流量 PLC 映射(泵名称 -> PLC 地址,用于辅助判断运行状态)
  15. # key = pump_name(与 rtsp_streams 中的 pump_name 对应)
  16. flow_plc:
  17. A: C.M.RO1_FT_JS@out # A 泵进水流量点位
  18. B: C.M.RO2_FT_JS@out
  19. C: C.M.RO3_FT_JS@out
  20. D: C.M.RO4_FT_JS@out
  21. # 泵状态 PLC 点位(判断泵启停,启停后进入 15 分钟过渡期不检测)
  22. # key = pump_name, value = 点位列表
  23. # point: SCADA 系统中的点位地址, val=1 表示运行, val=0 表示停机
  24. pump_status_plc:
  25. A:
  26. - point: C.M.RO1_GYB@run
  27. name: RO高压泵A # 显示名称(用于日志)
  28. B:
  29. - point: C.M.RO2_GYB@run
  30. name: RO高压泵B
  31. C:
  32. - point: C.M.RO3_GYB@run
  33. name: RO高压泵C
  34. D:
  35. - point: C.M.RO4_GYB@run
  36. name: RO高压泵D
  37. # RTSP 拾音器流列表(每个流 = 一台拾音器 = 一个检测点)
  38. rtsp_streams:
  39. - name: RO高压泵A # 拾音器名称(日志和推送显示)
  40. url: rtsp://admin:hao123456@192.168.31.240:554/cam/realmonitor?channel=38&subtype=0 # RTSP 地址
  41. channel: 38 # 通道号
  42. device_code: 1#-1 # 设备编码(唯一标识,训练数据文件夹名、模型目录名)
  43. pump_name: A # 关联的泵名称(对应 pump_status_plc 的 key)
  44. # model_subdir: 1#-1 # 模型子目录(默认 = device_code,一般无需指定)
  45. - name: RO高压泵B
  46. url: rtsp://admin:hao123456@192.168.31.240:554/cam/realmonitor?channel=41&subtype=0
  47. channel: 41
  48. device_code: 1#-2
  49. pump_name: B
  50. - name: RO高压泵C
  51. url: rtsp://admin:hao123456@192.168.31.240:554/cam/realmonitor?channel=42&subtype=0
  52. channel: 42
  53. device_code: 1#-3
  54. pump_name: C
  55. - name: RO高压泵D
  56. url: rtsp://admin:hao123456@192.168.31.240:554/cam/realmonitor?channel=43&subtype=0
  57. channel: 43
  58. device_code: 1#-4
  59. pump_name: D
  60. # ----------------------------------------------------------
  61. # 音频采集参数
  62. # ----------------------------------------------------------
  63. audio:
  64. sample_rate: 16000 # 采样率 Hz(必须与训练时一致,勿改)
  65. file_duration: 60 # 每个音频文件时长(秒)
  66. segment_duration: 60 # FFmpeg 切片时长(秒)
  67. auto_cleanup: # 自动清理旧音频(节省磁盘)
  68. enabled: true
  69. delete_normal: true # 删除正常检测的音频
  70. keep_recent_count: 100 # 每设备保留最近 100 个文件
  71. # ----------------------------------------------------------
  72. # 异常检测参数
  73. # ----------------------------------------------------------
  74. prediction:
  75. batch_size: 64 # 推理批大小
  76. check_interval: 1.0 # 检查新文件间隔(秒)
  77. default_threshold: 0.01 # 默认阈值(模型未加载时使用)
  78. voting: # 滑动窗口投票(减少误报)
  79. enabled: true
  80. window_size: 5 # 窗口大小(5 个检测周期,约 5 分钟)
  81. threshold: 3 # 5 次中 3 次异常才判定为异常
  82. frequency_history: # 误差频率统计
  83. enabled: true
  84. history_minutes: 10 # 统计最近 10 分钟的异常频率
  85. energy_detection: # 音频能量检测(无 PLC 时用于判断泵启停)
  86. enabled: true
  87. skip_when_stopped: true # 泵停机时跳过检测
  88. save_anomaly_audio: # 保存异常音频(用于后续分析/训练)
  89. enabled: true
  90. save_dir: data/anomaly_detected
  91. cooldown_minutes: 15 # 同一设备异常音频保存冷却(避免重复保存)
  92. context_capture: # 上下文捕获(保存异常前后的音频)
  93. enabled: true
  94. pre_minutes: 2 # 异常前 2 分钟
  95. post_minutes: 2 # 异常后 2 分钟
  96. # ----------------------------------------------------------
  97. # 推送通知
  98. # ----------------------------------------------------------
  99. push_notification:
  100. enabled: true # 总开关
  101. alert_enabled: false # 是否推送告警(false = 只推心跳,不推异常告警)
  102. push_base_urls: # 推送基地址列表(每个 base_url/{project_id} 拼接)
  103. - label: "外网" # 标签(日志显示)
  104. url: "http://120.55.44.4:8900/api/v1/dumu/push-msg"
  105. - label: "内网"
  106. url: "http://192.168.60.8:8900/api/v1/dumu/push-msg"
  107. timeout: 30 # HTTP 超时(秒)
  108. retry_count: 2 # 失败重试次数
  109. cooldown_minutes: 15 # 同设备告警冷却时间(分钟)
  110. cooldown_same_type_hours: 24 # 同类型异常冷却(小时)
  111. cooldown_diff_type_hours: 1 # 不同类型异常冷却(小时)
  112. alert_aggregate: # 跨设备聚合告警
  113. enabled: true
  114. window_seconds: 300 # 聚合窗口(秒)
  115. min_devices: 2 # 至少 2 台设备同时异常才触发聚合告警
  116. # ----------------------------------------------------------
  117. # 项目模式调度(参观/检修/调试模式下自动暂停异响检测)
  118. # ----------------------------------------------------------
  119. project_mode:
  120. base_url: http://120.55.44.4:8900 # 平台 API 根地址
  121. poll_interval: 60 # 查询间隔(秒)
  122. request_timeout: 10 # 请求超时(秒)
  123. # ----------------------------------------------------------
  124. # SCADA/PLC 接口(泵状态查询)
  125. # ----------------------------------------------------------
  126. scada_api:
  127. enabled: true # 是否启用 PLC 查询(false 时用音频能量判断启停)
  128. base_url: http://120.55.44.4:8900/api/v1/jinke-cloud/db/device/history-data # 历史数据接口
  129. realtime_url: http://120.55.44.4:8900/api/v1/jinke-cloud/device/current-data # 实时数据接口
  130. jwt_token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJJRCI6NywiVXNlcm5hbWUiOiJhZG1pbiIsIkRlcCI6IjEzNSIsImV4cCI6MTc3NjExOTExNCwiaXNzIjoiZ2luLWJsb2cifQ.0HTtzHZjyd2mHo8VCy8icYROxmntRMuQhyoZsAYRL_M
  131. timeout: 10 # 查询超时(秒)
  132. # ----------------------------------------------------------
  133. # 人体检测抑制(有人在设备旁时抑制告警,减少误报)
  134. # ----------------------------------------------------------
  135. human_detection:
  136. enabled: false # 是否启用(需要独立的人体检测服务)
  137. db_path: /data/human_detector/detection_status.db # 人体检测状态 DB 路径
  138. cooldown_minutes: 5 # 检测到有人后抑制告警的时间(分钟)
  139. # ----------------------------------------------------------
  140. # 自动增量训练
  141. # ----------------------------------------------------------
  142. auto_training:
  143. enabled: True # 总开关(暂时关闭自动增训)
  144. data:
  145. keep_normal_days: 7 # 正常音频保留天数
  146. keep_anomaly_days: -1 # 异常音频保留天数(-1=永久)
  147. cleanup_time: "00:00" # 每日清理时间(0点)
  148. incremental:
  149. enabled: true
  150. schedule_time: "18:00" # 每日训练时间
  151. use_days_ago: 1 # 使用N天前的数据(1=昨天)
  152. sample_hours: 1 # 随机采样时长(小时),0=使用全部
  153. min_samples: 50 # 最少样本数,不足则跳过
  154. epochs: 30 # 训练轮数(配合早停,实际通常更少)
  155. learning_rate: 0.0001 # 学习率
  156. batch_size: 32 # 批大小(降低显存占用)
  157. early_stop_patience: 5 # 早停耐心值:连续N轮loss无改善则停止
  158. training_device: auto
  159. min_gpu_mem_mb: 512 # auto模式下GPU空闲显存低于此值(MB)时回退CPU
  160. model:
  161. backup_before_train: true # 训练前备份
  162. keep_backups: 7 # 保留备份数量
  163. auto_deploy: true # 自动部署新模型
  164. update_thresholds: true # 训练后更新阈值npy
  165. rollback_on_degradation: true # 训练后损失异常时自动回滚到备份
  166. rollback_factor: 2.0 # 新模型损失 > 旧阈值 * 此因子则判定为退化
  167. validation:
  168. enabled: true
  169. cold_start:
  170. enabled: true
  171. wait_hours: 2 # 等待收集数据时长
  172. min_samples: 100 # 最少样本数