泵异响项目

wmy 24de9b11cf init: 初始化项目提交 3 ngày trước cách đây
auto_training 24de9b11cf init: 初始化项目提交 3 ngày trước cách đây
config 24de9b11cf init: 初始化项目提交 3 ngày trước cách đây
core 24de9b11cf init: 初始化项目提交 3 ngày trước cách đây
data 24de9b11cf init: 初始化项目提交 3 ngày trước cách đây
models 24de9b11cf init: 初始化项目提交 3 ngày trước cách đây
predictor 24de9b11cf init: 初始化项目提交 3 ngày trước cách đây
tool 24de9b11cf init: 初始化项目提交 3 ngày trước cách đây
.gitignore 24de9b11cf init: 初始化项目提交 3 ngày trước cách đây
README.md 24de9b11cf init: 初始化项目提交 3 ngày trước cách đây
requirements.txt 24de9b11cf init: 初始化项目提交 3 ngày trước cách đây
run_pickup_monitor.py 24de9b11cf init: 初始化项目提交 3 ngày trước cách đây
start.sh 24de9b11cf init: 初始化项目提交 3 ngày trước cách đây

README.md

拾音器异响检测系统

水泵/设备异响实时检测系统。通过 RTSP 拾音器采集音频,基于 AutoEncoder 模型进行异常检测。


只需 3 步

第 1 步:配置水厂信息(只需做一次)

# 方式一:从已有 YAML 导入(推荐首次部署)
python tool/migrate_yaml_to_db.py --yaml 你的配置.yaml --force

# 方式二:通过 API 配置(系统运行后)
# 见下方「配置管理 API」章节

导入后可检查 DB 信息:

python -c "
import sys; sys.path.insert(0,'.')
from config.config_manager import ConfigManager
mgr = ConfigManager()
cfg = mgr.get_full_config()
for p in cfg['plants']:
    print(f\"水厂: {p['name']} (project_id={p['project_id']}, enabled={p['enabled']})\")
    for s in p.get('rtsp_streams', []):
        print(f\"  设备: {s['device_code']} | {s['name']} | model={s.get('model_subdir','')} | url={s['url'][:50]}...\")
mgr.close()
"

第 2 步:训练模型

python auto_training/standalone_train.py --data-dir /你的音频数据目录

就这一条命令。 训练结果自动保存到 models/{设备编码}/ 目录。

数据目录要求:

你的音频数据目录/
├── LT-2/          ← 子文件夹名 = 设备编码(与 DB 中 device_code 一致)
│   ├── xxx.wav
│   └── 2025-01-01/
│       └── yyy.wav
└── LT-5/
    └── ...

可选参数:

--devices LT-2 LT-5    # 只训练指定设备
--epochs 100            # 训练轮数
--lr 0.00005            # 学习率

第 3 步:启动运行

./start.sh              # 前台运行(调试用)
./start.sh -d           # 后台运行(生产用)
./start.sh stop         # 停止
./start.sh restart      # 重启
./start.sh status       # 查看状态

模型更新(后期维护)

方式 操作
自动热加载 替换 models/{设备编码}/ 下的文件,60 秒内自动生效
API 上传 curl -X POST http://IP:8080/api/model/upload/LT-2 -F "model_file=@ae_model.pth"
API 触发重载 curl -X POST http://IP:8080/api/model/reload/LT-2
查看状态 curl http://IP:8080/api/model/status

配置管理 API

系统启动后在 :8080 自动提供,支持 Web 端实时修改配置。

接口 方法 说明
/api/config GET 获取全量配置
/api/config/plants GET/POST 水厂列表 / 创建
/api/config/plants/{id} GET/PUT/DELETE 单个水厂 CRUD
/api/config/streams GET/POST RTSP 流列表 / 创建
/api/config/streams/{id} PUT/DELETE 单个流更新 / 删除
/api/config/{section} GET/PUT 系统配置读写(audio/prediction/push 等)
/api/model/status GET 模型加载状态
/api/model/reload/{code} POST 重载指定设备模型
/api/model/reload-all POST 重载所有模型
/api/model/upload/{code} POST 上传模型文件并自动重载

可热更新(30 秒自动生效):推送开关、告警阈值、投票参数、人体检测开关等。

需重启生效:新增/删除 RTSP 流、修改采样率。


多水厂部署

每个水厂独立部署一个实例,各自拥有独立的 pickup_config.db

服务器A: deploy_pickup/ + pickup_config.db(锡山) + models/(锡山设备模型)
服务器B: deploy_pickup/ + pickup_config.db(龙亭) + models/(龙亭设备模型)

项目结构

deploy_pickup/
├── run_pickup_monitor.py      # 主入口(采集 + 检测 + 推送)
├── start.sh                   # 启动/停止/重启脚本
├── requirements.txt
│
├── config/                    # 配置
│   ├── pickup_config.db       #   运行时配置数据库
│   ├── config_manager.py      #   配置读写
│   ├── config_api.py          #   REST API(:8080)
│   ├── db_models.py           #   表定义
│   └── auto_training.yaml     #   训练参数
│
├── predictor/                 # 推理
│   ├── model_def.py           #   ConvAutoencoder(base_ch=16)
│   ├── multi_model_predictor.py   #   多设备模型管理 + 热加载
│   ├── config.py / datasets.py / utils.py
│
├── core/                      # 运行时辅助
│   ├── alert_aggregator.py    #   跨设备告警聚合
│   ├── anomaly_classifier.py  #   异常类型分类
│   ├── pump_state_monitor.py  #   泵状态 PLC 查询
│   ├── energy_baseline.py     #   泵启停判断
│   └── human_detection_reader.py  #   人体检测抑制
│
├── auto_training/             # 训练(可独立运行)
│   ├── standalone_train.py    #   ← 训练入口(就用这个)
│   ├── incremental_trainer.py #   训练器核心
│   └── data_cleanup.py        #   过期音频/日志清理(可选,手动运行)
│
├── models/{设备编码}/          # 模型(训练自动产出)
├── tool/migrate_yaml_to_db.py # YAML → DB 迁移
└── data/                      # 运行时音频