master
观赏鱼健康监控系统
基于 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+。安装:
pip install -r requirements.txt
额外系统依赖
- OpenCV 访问摄像头需要正确的驱动与权限。
- 若使用 GPU,加装对应版本的 PyTorch 与 CUDA(
ultralytics会依赖 torch,确保版本匹配)。
快速开始
- 安装依赖(见上)。
- 连接摄像头,确保权限正常。
- 运行 Streamlit:
streamlit run app.py
- 在浏览器中打开提示的本地地址,实时查看画面、告警,并自动积累鱼类活动档案;每日 20:00 自动生成当日报告(
reports/fish_report_YYYYMMDD.txt)。
核心处理流程
FishTracker.process_frame(frame):- 使用 YOLOv8 推理,过滤出
fish类别且置信度高于阈值(默认 0.5)。 - 送入 DeepSORT 进行多目标跟踪,获取每条鱼的 ID 与位置。
- 维护每个 ID 近 30 帧的轨迹,计算平均速度(像素/秒),并输出
track_stats(速度、是否在底部、步进位移等)。 - 规则判断:速度 < 15 且中心点落在图像底部 20% 区域则告警。
- 在帧上绘制边框与 ID,并返回帧、告警列表和
track_stats。
- 使用 YOLOv8 推理,过滤出
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 版本兼容。
下一步可以做什么
- 引入自定义训练的鱼类检测模型,提升精度。
- 丰富健康判定规则(体表异常、呼吸频率、群体行为),将日度报告改为可视化仪表盘。
- 增加数据记录与回放,支持告警/报告历史查询。
Description
Languages
HTML
53%
Python
42.4%
CSS
4.6%