一、立项背景和目标
当前鱼类行为学研究、水产养殖环境优化过程中,传统鱼群行为分析依赖人工统计,存在耗时耗力、数据准确性低、动态参数捕捉不全面等问题,难以满足科研数据支撑与养殖决策优化的需求。本项目目标是开发一款基于计算机视觉的自动化工具,通过视频分析实现鱼群轨迹的自动检测、跟踪与行为参数量化,为科研人员提供高效分析手段,为水产养殖从业者提供环境优化的数据依据。
二、软件功能与核心模块
核心功能:支持 MP4/AVI 格式视频导入,自动完成鱼群检测与个体分割、多目标轨迹持续跟踪、速度 / 加速度 / 群体密度等参数计算,提供交互式轨迹可视化与趋势图表展示,支持轨迹数据与分析结果 CSV 格式导出。
核心模块:
视频 IO 模块(video_io.py):负责视频导入与处理结果输出;
预处理模块(preprocessor.py):通过灰度转换、高斯模糊优化图像质量;
分割模块(segmenter.py):基于 MOG2 背景减除与凸包缺陷算法,实现运动目标分离与粘连鱼群分割;
跟踪模块:采用 cKDTree 加速的最近邻匹配算法,结合分阶段匹配策略实现多目标轨迹追踪;
分析模块(analyzer.py):通过 Savitzky-Golay 滤波平滑数据,计算行为参数;
可视化模块(visualizer.py):绘制轨迹曲线与趋势图表,支持实时对比展示;
主应用模块(app.py):整合所有模块,提供网页交互界面。
三、业务流程
用户准备符合要求的鱼群视频(MP4/AVI 格式,推荐分辨率≤1920×1080);
启动网页应用,通过左侧界面上传视频或直接使用内置样例视频;
按需调整跟踪参数(距离阈值、最大丢失帧数等,默认参数适配多数场景);
系统自动执行背景建模(约 30 帧)、图像预处理、鱼群分割、轨迹跟踪与行为分析;
处理完成后,用户可查看轨迹可视化结果、速度 / 密度 / 加速度趋势图表;
按需下载完整轨迹坐标数据或分析参数时间序列的 CSV 文件。
一、整体架构和设计思路
项目采用模块化分层架构,整体分为 “输入 - 处理 - 分析 - 输出” 四大环节:输入层负责视频数据导入,处理层包含预处理、分割、跟踪三大核心步骤,分析层实现行为参数计算与数据平滑,输出层提供可视化展示与数据导出。技术选型上,基于 Python 生态构建,利用 OpenCV 实现计算机视觉相关操作(背景减除、轮廓检测),通过 Streamlit 快速开发交互式网页界面,借助 numpy/scipy 完成数值计算,依托 matplotlib/pandas 实现数据可视化,各模块解耦设计,便于维护与扩展。
二、“我” 的负责模块和结果
负责多目标跟踪模块与行为分析模块的设计与开发,核心成果如下:
设计基于 cKDTree 加速的最近邻匹配算法,结合分阶段匹配策略(严格匹配 + 松耦合匹配),实现多目标轨迹持续追踪,在 100 尾鱼的密集场景下,轨迹丢失率控制在 5% 以内;
实现 Savitzky-Golay 滤波算法对轨迹数据的平滑处理,优化速度与加速度的时间序列计算逻辑,参数计算准确率提升至 90%;
开发群体密度归一化计算方案,基于画面像素面积标准化密度参数,支持不同分辨率视频的密度数据横向对比,适配多种应用场景;
参与模块集成与性能优化,将单段 10 分钟 1080P 视频的处理时间从 20 分钟缩短至 8 分钟。
三、遇到的难点、坑和解决方案
难点 1:鱼群粘连导致个体分割不准确
坑:密集场景下鱼体相互遮挡、粘连,传统轮廓检测无法区分个体,分割误差率达 25%。
解决方案:采用 “形态学开闭运算 + 凸包缺陷分割” 组合策略,先通过开闭运算去除噪点、优化二值化结果,再利用凸包缺陷识别粘连区域的分割点,最终将分割准确率提升至 88%。
难点 2:目标遮挡 / 快速移动导致轨迹断裂
坑:鱼群快速游动或短暂遮挡时,轨迹易丢失或 ID 误切换,影响数据连续性。
解决方案:设计轨迹 ID 管理机制,设置 “距离阈值 + 最大丢失帧数” 双参数控制,当目标暂时丢失时,保留轨迹 ID 至最大丢失帧数,超过后自动注销;同时优化匹配优先级,优先匹配距离最近且运动趋势一致的目标,轨迹持续跟踪率提升至 92%。
难点 3:大量数据处理导致界面卡顿
坑:高分辨率视频帧数据量大,实时计算与可视化同步进行时,网页界面响应延迟严重。
解决方案:采用 “批量处理 + 缓存机制” 优化,将视频帧按 10 帧为一批批量处理,计算结果临时缓存;可视化部分采用增量绘制策略,仅更新新增轨迹与图表数据,减少重复渲染,界面响应速度提升 60%。