# 观赏鱼健康监控系统 基于 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 版本兼容。 ## 下一步可以做什么 - 引入自定义训练的鱼类检测模型,提升精度。 - 丰富健康判定规则(体表异常、呼吸频率、群体行为),将日度报告改为可视化仪表盘。 - 增加数据记录与回放,支持告警/报告历史查询。