支持本地视频测试
This commit is contained in:
z66
2025-12-23 17:59:18 +08:00
parent ae9d252255
commit 1a135cdda7
9 changed files with 301 additions and 14 deletions
+72
View File
@@ -0,0 +1,72 @@
# 观赏鱼健康监控系统
基于 YOLOv8 + DeepSORT 的实时观赏鱼检测与健康异常告警 Demo(笔记本摄像头版),通过 Streamlit 提供可视化界面。
## 主要功能
- 实时调用摄像头检测 COCO 数据集中的 `fish` 类别(ID=17),并进行多目标跟踪。
- 记录每条鱼最近 30 帧的运动轨迹,计算速度(像素/秒)。
- 简单异常规则:鱼体速度低且位于画面底部 20% 区域时发出“低速 + 沉底”告警。
- 在页面同时展示视频画面与告警信息。
## 代码结构
- `app.py`:Streamlit 前端入口,负责摄像头采集、显示和告警呈现。
- `fish_tracker.py`:封装检测、跟踪、轨迹维护与异常规则。
- `requirements.txt`:依赖列表。
- `yolov8n.pt`YOLOv8n 预训练权重(COCO)。
## 环境依赖
### Python 包
`requirements.txt` 已列出核心依赖:
- ultralytics==8.3.241
- deep_sort_realtime==1.3.2
- streamlit==1.52.2
- numpy==2.4.0
建议使用 Python 3.9+。安装:
```bash
pip install -r requirements.txt
```
### 额外系统依赖
- OpenCV 访问摄像头需要正确的驱动与权限。
- 若使用 GPU,加装对应版本的 PyTorch 与 CUDA`ultralytics` 会依赖 torch,确保版本匹配)。
## 快速开始
1) 安装依赖(见上)。
2) 连接摄像头,确保权限正常。
3) 运行 Streamlit
```bash
streamlit run app.py
```
4) 在浏览器中打开提示的本地地址,实时查看画面、告警,并自动积累鱼类活动档案;每日 20:00 自动生成当日报告(`reports/fish_report_YYYYMMDD.txt`)。
## 核心处理流程
- `FishTracker.process_frame(frame)`:
1. 使用 YOLOv8 推理,过滤出 `fish` 类别且置信度高于阈值(默认 0.5)。
2. 送入 DeepSORT 进行多目标跟踪,获取每条鱼的 ID 与位置。
3. 维护每个 ID 近 30 帧的轨迹,计算平均速度(像素/秒),并输出 `track_stats`(速度、是否在底部、步进位移等)。
4. 规则判断:速度 < 15 且中心点落在图像底部 20% 区域则告警。
5. 在帧上绘制边框与 ID,并返回帧、告警列表和 `track_stats`
- `history_manager.py`:累计各鱼 ID 的当日指标(帧数、位移、底部占比、慢速占比、平均速度),20:00 生成日度报告并写入 `reports/`
- `app.py` 循环读取摄像头帧,调用检测与历史积累,时间到达 20:00 时自动生成报告并提示。
## 配置与自定义
- 置信度阈值、规则阈值可在 `FishTracker.__init__``process_frame` 中调整。
- 若要替换模型权重,可将 `model_path` 指向新 `.pt` 文件。
- 需要支持更多异常模式(如停留时间过长、群体异常等)可在规则部分扩展。
## 已知局限
- 依赖 COCO 中的 `fish` 类别,针对特定观赏鱼场景准确率有限;建议用自定义数据微调权重。
- 规则简单,仅基于速度与位置,可能产生漏报/误报。
- 未包含录像/截图/日志持久化,需自行扩展。
## 常见问题
- **无法打开摄像头**:检查设备权限和驱动;在 Windows 上确保未被其他应用占用。
- **模型加载慢/显存占用高**:可换更小模型或在 CPU 上运行(速度会下降)。
- **DeepSORT 报错或缺少依赖**:确认安装了 `deep_sort_realtime`,并确保 OpenCV 版本兼容。
## 下一步可以做什么
- 引入自定义训练的鱼类检测模型,提升精度。
- 丰富健康判定规则(体表异常、呼吸频率、群体行为),将日度报告改为可视化仪表盘。
- 增加数据记录与回放,支持告警/报告历史查询。