markdown复制## 1. 项目概述:当计算机视觉遇上蜂群监测
养蜂场里有个头疼的问题——人工统计蜂群活动效率低下且容易出错。去年帮朋友改造蜂箱时,发现他每天要花2小时用肉眼记录蜜蜂进出情况。这促使我尝试用YOLOv11搭建一套自动化识别系统,经过3个月迭代,最终实现了98.7%的识别准确率。这个系统不仅能实时统计蜜蜂数量,还能区分进出方向,养蜂人通过网页就能查看蜂群活跃度曲线。
整套方案包含三个技术层:底层采用改进的YOLOv11模型处理视频流,中间层用Flask构建REST API,顶层是Vue.js开发的交互界面。特别设计了双摄像头方案——箱内摄像头监测蜜脾状况,入口摄像头追踪进出流量。模型训练使用了自建的BeeYOLO数据集,包含12,000张标注图片覆盖不同光照和天气条件。
> 关键突破点:针对蜜蜂小目标特性优化了YOLOv11的SPP模块,在640x640输入下能稳定检测5px大小的蜜蜂个体。
## 2. 核心设计解析
### 2.1 为什么选择YOLOv11?
对比测试了YOLOv5、v8和v11三个版本在蜜蜂检测任务上的表现:
| 模型 | AP@0.5 | 推理速度(FPS) | 显存占用(MB) |
|------------|--------|---------------|--------------|
| YOLOv5s | 0.872 | 45 | 780 |
| YOLOv8n | 0.901 | 53 | 620 |
| YOLOv11-tiny| 0.937 | 68 | 550 |
v11的改进主要体现在:
- 动态标签分配策略:适应蜜蜂群聚时的密集目标场景
- 轻量化设计:模型体积比v8小30%,适合边缘设备部署
- 改进的损失函数:针对小目标检测优化了宽高比计算
### 2.2 数据集的特殊处理
自建BeeYOLO数据集时遇到两个挑战:
1. 蜜蜂翅膀振动产生运动模糊
2. 蜂箱入口强逆光环境
解决方案:
- 使用1000fps高速相机采集原始素材
- 数据增强策略:
```python
transform = A.Compose([
A.MotionBlur(blur_limit=7, p=0.5), # 模拟翅膀振动
A.SunFlare(p=0.3), # 模拟逆光
A.RandomShadow(p=0.2)
])
在RTX 3090上训练的关键参数:
bash复制python train.py --img 640 --batch 32 --epochs 300 \
--data bee.yaml --cfg yolov11-tiny.yaml \
--weights '' --device 0 --hyp hyp.bee.yaml
超参数配置要点:
实测发现:蜜蜂检测任务中,早停机制(patience=50)反而会降低模型鲁棒性,建议完整训练300epoch。
系统架构图:
code复制[摄像头] → [OpenCV捕获] → [YOLOv11推理] → [Flask API] → [WebSocket] → [Vue界面]
↳ [SQLite日志存储]
关键接口示例:
python复制@app.route('/api/detect', methods=['POST'])
def detect():
frame = request.files['image'].read()
results = model(frame) # YOLOv11推理
return jsonify({
'count': len(results),
'in_out': calc_direction(results) # 进出方向判断
})
方向判断算法核心:
python复制def calc_direction(tracks):
# 基于ByteTrack的轨迹分析
in_count = sum(1 for t in tracks if t['velocity'][1] > 0)
out_count = len(tracks) - in_count
return {'enter': in_count, 'exit': out_count}
在树莓派4B上的优化策略:
python复制model.export(format='onnx',
dynamic=False,
simplify=True,
opset=12)
bash复制trtexec --onnx=yolov11-tiny.onnx \
--fp16 \
--saveEngine=yolov11-tiny.engine
cv2.CAP_V4L2 + CAP_PROP_HW_ACCELERATION误检问题:
漏检问题:
yaml复制# hyp.bee.yaml
nms:
iou_thres: 0.45
conf_thres: 0.25
max_det: 300
方向误判:
python复制def smooth_track(track):
# 使用卡尔曼滤波
kf.update(track[-1])
return kf.predict()
登录注册系统的安全设计:
数据可视化方案:
javascript复制// 使用ECharts绘制蜂群活动曲线
option = {
xAxis: {type: 'time'},
yAxis: {name: '蜜蜂数量'},
series: [{
data: apiData,
type: 'line',
markArea: {
data: [[{xAxis: '6:00'}, {xAxis: '8:00'}]]
}
}]
}
实际部署后用户反馈的新需求:
蜜蜂种类识别:意蜂vs中蜂
异常行为检测:
蜜源分析:
这套系统在山东某蜂场连续运行6个月后,蜂群管理效率提升40%,异常情况发现时效从原来的3天缩短到2小时内。最意外的是通过数据分析发现了蜜源植物开花期比往年提前了两周,这个发现帮助蜂农及时调整了转场计划。
code复制